Page 1 sur 1

[R] GUI - Simulation de sélection de ligne dans un ListView

Posté : jeu. 12 juil. 2012 17:06
par Alaghir
Bonjour à tous,

Je suis nouveau sur le forum (et je ne sais si ma question est donc au bon endroit).

Je suis en train de créer un applicatif de gestion de centre de charges par utilisateur.

Cet applicatif intègre plus particulièrement un control ListView, avec des Item de type ChkBox (dont le texte et le nombre sont stockés dans deux fichiers externes et que j'affiche au chargement de la ListView).

J'ai une fonction recherche qui me permet de rechercher au sein du fichier des libellés la chaine correspondant à celle saisie dans une InputBox, et de renvoyer son indice de ligne. Jusque là, tout va bien.

Là où j'en arrive plus particulièrement sur la GUI, c'est que j'aimerai afficher le bandeau de sélection de la ListView sur la ligne correspondante à l'indice, afin d'informer l'utilisateur que le centre de charge est bien présent au sein de la ListView.

Je n'ai pas trouvé de sujet tel que celui-ci, ou alors c'est que je n'aie pas saisi la bonne requête (si besoin est, je peux livrer les différents fichiers :)).

Merci d'avance pour vos contributions :).

Bonne journée - soirée.

Alaghir

Re: [...]GUI - Simulation de sélection de ligne dans un List

Posté : jeu. 12 juil. 2012 18:32
par mikell
Si les lignes sont les mêmes dans le fichier et dans la listview et que les indices correspondent, alors

Code : Tout sélectionner

ControlListView ($gui, "", $ListView, "Select", $index)
devrait suffire, sinon il faut utiliser la chaine

Code : Tout sélectionner

$count = ControlListView ($gui, "", $ListView, "GetItemCount")
For $i = 0 to $count-1
  If ControlListView ($gui, "", $ListView, "GetText", $i) = $chaine Then
      ControlListView ($gui, "", $ListView, "Select", $i)
  EndIf
Next
On peut aussi utiliser les fonctions équivalentes de l'include GuiListView.au3

Re: [..] GUI - Simulation de sélection de ligne dans un List

Posté : sam. 14 juil. 2012 12:42
par Alaghir
Merci pour ton coup de main, je teste et te redis :).

Les indices sont les mêmes, donc apriori je penche pour la première solution :)

Re: [..] GUI - Simulation de sélection de ligne dans un List

Posté : lun. 16 juil. 2012 09:09
par Alaghir
Bon apparemment, il me sélectionne bien l'indice, mais il ne m'affiche pas le bandeau de sélection. Je continue à cogiter sur la question :).

Re: [..] GUI - Simulation de sélection de ligne dans un List

Posté : jeu. 19 juil. 2012 12:50
par GaRydelaMer
Bonjour

pour que le bandeau de sélection soit apparent je pense que tu dois aussi passé le focus à la listview, et ajouter des propriété a la listview.

Code : Tout sélectionner

$hListView = GUICtrlCreateListView("", 10, 10, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR([b]$LVS_EX_FULLROWSELECT, $LVS_EX_BORDERSELECT[/b], $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
 
sinon utilise ca:

1/ désélectionner tout:

Code : Tout sélectionner

 _GUICtrlListView_SetItemSelected($hListView, [b]-1[/b], False, False)
2/ Sélectionner ton Item plus lui donner le focus

Code : Tout sélectionner

_GUICtrlListView_SetItemSelected($hListView, [b]$iIndex, True, True[/b])


Edit:

Voila aussi une fonction qui va s'assurer de scroller verticalement et horizontalement la listview afin de montrer ton Iitem sélectionné.

Code : Tout sélectionner

Func My_GUICtrlListView_EnsureVisible($hWnd, $iIndex, $iSubItem = 0, $bSelected = False, $bFocused = False, $bPartialOK = False)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    _GUICtrlListView_EnsureVisible($hWnd, $iIndex, $bPartialOK)
    _GUICtrlListView_SetItemSelected($hWnd, $iIndex, $bSelected, $bFocused)
    Local $iPixel, $aRect = _GUICtrlListView_GetItemRect($hWnd, $iIndex)
    For $i = 0 To $iSubItem - 2 ; 2 means: show at second visible column
        $iPixel += _GUICtrlListView_GetColumnWidth($hWnd, $i)
    Next
    _GUICtrlListView_Scroll($hWnd, $iPixel + $aRect[0], 0)
EndFunc   ;==>My_GUICtrlListView_EnsureVisible
 

Re: [..] GUI - Simulation de sélection de ligne dans un List

Posté : mar. 24 juil. 2012 11:45
par Alaghir
Merci pour le coup de main, j'ai pris ta première solution et ça tourne nickel.

Je garde les deux autres sous le coude quand même, au cas où.