Page 1 sur 1

[R] Choix de l'item surligné à l'ouverture d'une ListView

Posté : lun. 02 déc. 2013 12:13
par aulus
Bonjour,
je cherche à utiliser l'une ou l'autre des fonctions suivantes :

Code : Tout sélectionner

ControlListView ( "", "", $myListView, "Select",1,1)
ControlListView ( "", "", $myListView, "SelectClear")
_GUICtrlListView_SetItemFocused($myListView, 0)
_GUICtrlListView_SetItemSelected($myListView, 0, True, True)
Utilisées sans faire appel à la fonction Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam), comme dans les exemples fournies dans l'aide, tout se passe bien. Mais mon code faisant appel à cette fonction, les fonctions intervenant sur la sélection de l'item souhaité dans la listView sont ignorées.

Avez-vous une idée pour faire en sorte que toutes ces fonctions se supportent ?

Je vous remercie.

Re: [..] choix de l'item surligné à l'ouverture d'une ListVi

Posté : lun. 02 déc. 2013 15:16
par mikell
C'est pô très clair, on comprend pas bien ce qui ne marche pas et comment tu voudrais que ça marche
Tu n'aurais pas un petit script-exemple à tester pour mettre ça en évidence ?

Re: [..] choix de l'item surligné à l'ouverture d'une ListVi

Posté : lun. 02 déc. 2013 17:53
par aulus
Bonjour Mikell,

Ma listView affiche les lignes d'une base SQLite, et à son ouverture, par je ne sais quel mystère, c'est toujours la ligne 12 qui est surlignée. Ce n'est pas grave pour le fonctionnement du programme, mais c'est agaçant et déroutant pour l'utilisateur. J'essaie depuis des heures à faire en sorte que la ligne sélectionnée à l'ouverture soit la première ligne en utilisant la fonction :

Code : Tout sélectionner

ControlListView ( "", "", $myListView, "Select",0,0)
 
ou :

Code : Tout sélectionner

_GUICtrlListView_SetItemFocused($myListView, 0)
 
ou encore :

Code : Tout sélectionner

_GUICtrlListView_SetItemSelected($myListView, 0, True, True)
Quelle que soit la fonction utilisée, elle est toujours ignorée alors que toutes fonctionnent parfaitement dans les exemples de l'aide d'AutoIt.
J'en ai conclu que c'est l'appel à la fonction Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) qui me met le bazar.

Code : Tout sélectionner

;affichage de la listview

For $i = 1 to UBound($array)-1
       GUICtrlCreateListViewItem($array[$i][0], $myListView)
Next
_GUICtrlListView_SetItemSelected($myListView, 0, True, True) ;[color=#FF0000] CETTE LIGNE EST IGNOREE PAR LE PROGRAMME[/color]
GUICtrlSetState($myListView, $GUI_ENABLE)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

...
EndFunc


Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam ; pour éviter les warning
    Local $tNMHDR, $hWndFrom, $iCode, $iDeleteItem
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
   Local $hListView = GuiCtrlGetHandle($myListView)

    Switch $hWndFrom
        Case $hListView
            Switch $iCode
              Case $LVN_COLUMNCLICK
                   Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                   Local $colonne = DllStructGetData($tInfo, "SubItem")
                   If $colonne = $lastclicked Then
                        $var = not $var
                   Else
                        $var = 0
                   EndIf
                   $lastclicked = $colonne
                   _LVSort($colonne, $var)

                Case $LVN_KEYDOWN
                    $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
                    Local $vkey = DllStructGetData($tInfo, "VKey")
                   Switch $vkey
                             Case 0x2e
                                    Suppression()
                Case 0x2D
                                   Ajout()
               Case 0x08
                                   Modification()
               Case 0x20
                                   Affichage()
                    EndSwitch

           EndSwitch
       EndSwitch
    Return $GUI_RUNDEFMSG

EndFunc
 
J'ai tenté de placer mes fonctions en début ou en fin de la fonction WM_NOTIFY. Les fonctions ne sont pas ignorées mais me plantent le programme.

Re: [..] choix de l'item surligné à l'ouverture d'une ListVi

Posté : lun. 02 déc. 2013 18:11
par mikell
Quand la gui s'affiche ou s'update le WM_NOTIFY est automatiquement appelé
Faudrait essayer

Code : Tout sélectionner

ControlListView ($gui, "", $myListView, "SelectClear")
après la fin de son affichage ou après le GuiSetState()

Re: [..] choix de l'item surligné à l'ouverture d'une ListVi

Posté : lun. 02 déc. 2013 19:09
par aulus
De cette manière, la fonction est prise en compte (aucun item n'est surligné) , mais il ne devient plus possible de sélectionner une ligne.

Re: [..] choix de l'item surligné à l'ouverture d'une ListVi

Posté : lun. 02 déc. 2013 21:28
par mikell
L'instruction tu l'as pas mise dans le WM_NOTIFY ou dans une boucle ?

Re: [..] Choix de l'item surligné à l'ouverture d'une ListVi

Posté : mar. 03 déc. 2013 07:55
par aulus
Et ben... si ! :(
J'avais mal compris, ça ne fait pas l'ombre d'un doute ! Je l'avais placée à la fin de WM_NOTIFY !
Je viens de la placer à la fin de la fonction affichant la listView, et là ça fonctionne...
Encore merci Mikell pour votre temps et votre patience !