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

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Alaghir
Niveau 4
Niveau 4
Messages : 51
Enregistré le : jeu. 12 juil. 2012 16:49
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Alaghir le mar. 24 juil. 2012 11:45, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Alaghir
Niveau 4
Niveau 4
Messages : 51
Enregistré le : jeu. 12 juil. 2012 16:49
Status : Hors ligne

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

#3

Message 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 :)
Alaghir
Niveau 4
Niveau 4
Messages : 51
Enregistré le : jeu. 12 juil. 2012 16:49
Status : Hors ligne

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

#4

Message 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 :).
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#5

Message 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
 
Alaghir
Niveau 4
Niveau 4
Messages : 51
Enregistré le : jeu. 12 juil. 2012 16:49
Status : Hors ligne

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

#6

Message 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ù.
Répondre