Page 1 sur 1
[R] Sélection item par double clic
Posté : lun. 11 mars 2013 08:12
par Ks10
Bonjour,
Je voudrais savoir si a partir d'une GuiCtrlCreateList() il était possible de sélectionner les items lié à celui ci ?
Exemple :
Code : Tout sélectionner
$List1 = GUICtrlCreateList("", 0, 0, 617, 474)
GuiCtrlSetData($list1, "Item1")
GuiCtrlSetData($list1, "Item2")
GuiCtrlSetData($list1, "Item3")
etc...
Je voudrais par exemple pouvoir sélectionner l'item1 avec un double clic pour pouvoir lui attribuer un changement. (Changer la ligne de couleur par exemple ^^, je connait la commande pour changer la couleur mais pas pour pouvoir sélectionner l'item)
j'espère que ma demande a été précise.
Je vous remercie d'avance.
Re: [..] Sélection item par double clic
Posté : lun. 11 mars 2013 11:20
par mikell
Avec ce code le double clic sur l'item retourne son index
► Afficher le texte
Code : Tout sélectionner
#include <WindowsConstants.au3>
Global Const $LB_GETCURSEL = 0x0188
$Gui = GUICreate("test", 300, 200)
$List1 = GUICtrlCreateList("", 10, 10, 250, 150)
GuiCtrlSetData($list1, "Item1")
GuiCtrlSetData($list1, "Item2")
GuiCtrlSetData($list1, "Item3")
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Do
Until GUIGetMsg() = -3
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
Switch BitAND($wParam, 0x0000FFFF)
Case $List1
If BitShift($wParam, 16) = 2 Then ; 1 = clic, 2 = dble clic
$index = GUICtrlSendMsg($List1, $LB_GETCURSEL, 0, 0)
msgbox(0,"", $index)
EndIf
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc
Re: [..] Sélection item par double clic
Posté : lun. 11 mars 2013 11:49
par Ks10
Le double clic fonctionne, j'ai réadapter la fonction à mon programme et voila ce que sa donne :
Code : Tout sélectionner
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
Switch BitAND($wParam, 0x0000FFFF)
Case $List1
If BitShift($wParam, 16) = 2 Then ; 1 = clic, 2 = dble clic
$index = InputBox("Choix de la couleur", "Liste des couleurs disponibles : " & @CRLF & "- Vert" & @CRLF & "- Orange" & @CRLF & "- Rouge")
If $index = "Rouge" Then GUICtrlSetColor($List1, 0xff0000)
;$index = GUICtrlSendMsg($List1, $LB_GETCURSEL, 0, 0)
;msgbox(0,"", $index)
EndIf
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc
Le résultat voulu : Si l'utilisateur entre le mot rouge, il colorie la ligne qui est sélectionner.
Le résultat que j'ai : L'utilisateur met le mot rouge il colorie toute les lignes... Je sait que ce n'est pas la variable $list1 qu'il faut spécifié mais je ne sait pas laquelle pour sélectionner uniquement la ligne qu'on veux.
Re: [..] Sélection item par double clic
Posté : lun. 11 mars 2013 13:40
par mikell
Ks10 a écrit : je connait la commande pour changer la couleur mais pas pour pouvoir sélectionner l'item)
Hum tu m'as induit en erreur là
Pour ce genre de truc je te conseille d'utiliser une Listview plutôt qu'une List, en effet la difficulté c'est pas la sélection par double clic c'est la couleur des items et dans une listview les items sont mieux différenciés donc plus facilement customisables
Une listview avec le style $LVS_NOCOLUMNHEADER a exactement le look d'une list
Re: [..] Sélection item par double clic
Posté : lun. 11 mars 2013 13:47
par Ks10
Le soucis avec une listview pour avoir un contrôle des items il faut déclaré une variable mais mon programme fonctionne comme sa :
- Tu a la liste view
- Tu appuie sur le bouton 1
- Tu entre le paramètre voulu
- Il affiche dans la liste
- Il écrit dans un fichier texte.
Lorsque je relance mon programme.
- Il lit le fichier texte et réaffiche les items dans la liste.
Cependant aucune variable n'est déclaré. Et du coup je n'est aucun contrôle sur mes items.
Re: [..] Sélection item par double clic
Posté : lun. 11 mars 2013 14:30
par mikell
Ben va falloir choisir ^^
Si tu veux colorer une ligne au double clic, faudra une listview et gérer les items différemment, en passant par une array par exemple
► Afficher le texte
Code : Tout sélectionner
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
Global Const $tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom;INT Code; endstruct"
Global Const $tagNMITEMACTIVATE = $tagNMHDR & ";int Index;int SubItem;int NewState;int OldState;" & _
"int Changed;int X;int Y;int lParam;int KeyFlags"
Dim $array[3][3]
$array[0][1] = @Autoitexe
$array[0][2] = FileGetVersion(@Autoitexe)
$array[1][1] = "ligne 2, colonne 1"
$array[1][2] = "ligne 2, colonne 2"
$array[2][1] = "ligne 3, colonne 1"
$array[2][2] = "ligne 3, colonne 2"
$gui = GUICreate("listview items", 420, 180, 100, 200, -1)
$listview = GUICtrlCreateListView("icone|colonne 1|colonne 2 ", 10, 10, 400, 130)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 1, 200)
Dim $ligne[3]
$ligne[0] = GUICtrlCreateListViewItem("(1)|" &$array[0][1] & "|" & $array[0][2], $listview)
GUICtrlSetImage(-1, @Autoitexe, -1)
$ligne[1] = GUICtrlCreateListViewItem("(2)|" &$array[1][1] & "|" & $array[1][2], $listview)
GUICtrlSetImage(-1, @SystemDir & "\shell32.dll", -132)
$ligne[2] = GUICtrlCreateListViewItem("(3)|" &$array[2][1] & "|" & $array[2][2], $listview)
GUICtrlSetImage(-1, @SystemDir & "\shell32.dll", -138)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = GUICtrlGetHandle($listView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$index = DllStructGetData($tInfo, "Index")
For $i = 0 to 2
GuiCtrlSetColor($ligne[$i], 0x000000)
Next
GuiCtrlSetColor($ligne[$index], 0xff0000)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Sinon tu ne pourras pas customiser tes items
Re: [..] Sélection item par double clic
Posté : mar. 12 mars 2013 05:49
par Ks10
Ok je vais essayer de voir ce que je peut faire alors ^^
Merci.