[..] Selection souris dans _Arraydisplay
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Selection souris dans _Arraydisplay
Bonjour à tous,
Je commence à me débrouiller en Autoit, un logiciel pour ma société est actuellement en production et je lui rajoute des fonctions, ici nous sommes sur le retour d'une recherche par nom d'un client.
Je fait le retour dans un _ArrayDisplay (je n'ai jamais fait ce type de fonction je tâtonne et je pense que ce n'est pas la meilleure solution). Actuellement cela fonctionne j'ai ma fenêtre principal et lors de la recherche une seconde fenêtre s'ouvre avec la liste des résultats trouvé (le _Arraydisplay).
Je voudrais plutôt que de mémorisé le code client et le retaper dans la fenêtre principal pouvoir le sélectionner via un double clic par exemple, fermer la fenêtre secondaire et alimenter une de mes zone de ma Gui principale avec la valeur récupérée.
Je travaille avec une base de donnée mdb et la recherche est en fait une requête sql :
$query = "SELECT * FROM " & $tblname & " WHERE Nom LIKE '%" & GUICtrlRead($clientNom) & "%'"
et le classique pour la conenxion à la base :
$adoCon = ObjCreate("ADODB.Connection")
$adoCon.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & $dbname)
Mon array :
$rgrid = $adoRs.GetRows()
$r_number = UBound($rgrid)
_ArrayDisplay($rgrid, "Résultat clients", "|0:23", 32 + 64, Default, "AA|BB|CC|DD", Default, 0xDDFFDD)
$adoCon.Close
Je pense qu'il ne faut pas que j'utilise un _ArrayDisplay seul car cette fonction est je pense trop cloisonnée et pas forcement faite pour ça mais je ne voit pas trop comment faire.
Merci d'avance pour votre aide !
PS : Je cache les boutons car je souhaite que les utilisateur puisse faire leur sélection à la souris.
Je commence à me débrouiller en Autoit, un logiciel pour ma société est actuellement en production et je lui rajoute des fonctions, ici nous sommes sur le retour d'une recherche par nom d'un client.
Je fait le retour dans un _ArrayDisplay (je n'ai jamais fait ce type de fonction je tâtonne et je pense que ce n'est pas la meilleure solution). Actuellement cela fonctionne j'ai ma fenêtre principal et lors de la recherche une seconde fenêtre s'ouvre avec la liste des résultats trouvé (le _Arraydisplay).
Je voudrais plutôt que de mémorisé le code client et le retaper dans la fenêtre principal pouvoir le sélectionner via un double clic par exemple, fermer la fenêtre secondaire et alimenter une de mes zone de ma Gui principale avec la valeur récupérée.
Je travaille avec une base de donnée mdb et la recherche est en fait une requête sql :
$query = "SELECT * FROM " & $tblname & " WHERE Nom LIKE '%" & GUICtrlRead($clientNom) & "%'"
et le classique pour la conenxion à la base :
$adoCon = ObjCreate("ADODB.Connection")
$adoCon.Open("Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & $dbname)
Mon array :
$rgrid = $adoRs.GetRows()
$r_number = UBound($rgrid)
_ArrayDisplay($rgrid, "Résultat clients", "|0:23", 32 + 64, Default, "AA|BB|CC|DD", Default, 0xDDFFDD)
$adoCon.Close
Je pense qu'il ne faut pas que j'utilise un _ArrayDisplay seul car cette fonction est je pense trop cloisonnée et pas forcement faite pour ça mais je ne voit pas trop comment faire.
Merci d'avance pour votre aide !
PS : Je cache les boutons car je souhaite que les utilisateur puisse faire leur sélection à la souris.
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: [..] Selection souris dans _Arraydisplay
Je ne pense pas que la fonction ArrayDisplay soit adaptée. Dans un premier temps, à la place d'exécuter ArrayDisplay, il faudrait créer une seconde GUI avec une ListView qui sera remplie avec les résultats de la requête SQL ($rgrid) ; c'est d'ailleurs ce que fait ArrayDisplay. C'est cette seconde GUI qui s'occupera de gérer le double clic sur un élément de la ListView.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: [..] Selection souris dans _Arraydisplay
Alors, j'ai essayé de faire un listview mais il est vide, du coup c'est là que j'ai besoin d'exemple précis.
J'ai ceci :
Là j'ai un grand tableau (ma $GuiList) avec un petit dedans, à la limite les taille on s'en fou lol mais juste le mot test apparait :/
J'ai ceci :
$rgrid = $adoRs.GetRows()
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 800, 600, 100, 100, -1)
Local $listview = GUICtrlCreateListView("Test", 10, 10, 200, 150)
Local $iditemlist = GUICtrlCreateListViewItem($rgrid, $listview)
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 800, 600, 100, 100, -1)
Local $listview = GUICtrlCreateListView("Test", 10, 10, 200, 150)
Local $iditemlist = GUICtrlCreateListViewItem($rgrid, $listview)
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
Re: [..] Selection souris dans _Arraydisplay
Alors j'ai essayé un peu d'avancer sur le sujet, toujours bloqué avec le code suivant :
J'ai une erreur :
==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
GUICtrlCreateListViewItem($rgrid[$i] & "|" & $rgrid[$i] & "|" & $rgrid[$i],$listview)
GUICtrlCreateListViewItem(^ ERROR
Ma vairable $r_number renvoi bien le nombre de ligne du résultat de la requête, pour le test 34 exactement d'où mon $i de 1 à 34 on vas dire mais je ne voit pas trop comment remplir cette listview.
Du coup je me demande, est-ce parce que je n'ai mis que trois colonne pour tester et qu'il en attend X (nombre de colonne sur ma requête) et qu'il plante ou que j'utilise mal ma variable $rgrid qui je suppose est un Array... pourtant en l'affichant avec un _ArrayDisplay mon $rgrid rempli bien le tableau... bref je séche.
Merci de votre aide.
$rgrid = $adoRs.GetRows()
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 800, 600, 100, 100, -1)
$listview = GUICtrlCreateListView("1col|2col|3col", 10, 10, 200, 150)
For $i = 1 To UBound($rgrid) - 1
GUICtrlCreateListViewItem($rgrid[$i] & "|" & $rgrid[$i] & "|" & $rgrid[$i],$listview)
;GUICtrlCreateListViewItem($i & "|" & $i & "|" & $i,$listview)
Next
;Local $iditemlist = GUICtrlCreateListViewItem($rgrid, $listview)
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 800, 600, 100, 100, -1)
$listview = GUICtrlCreateListView("1col|2col|3col", 10, 10, 200, 150)
For $i = 1 To UBound($rgrid) - 1
GUICtrlCreateListViewItem($rgrid[$i] & "|" & $rgrid[$i] & "|" & $rgrid[$i],$listview)
;GUICtrlCreateListViewItem($i & "|" & $i & "|" & $i,$listview)
Next
;Local $iditemlist = GUICtrlCreateListViewItem($rgrid, $listview)
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
GUICtrlCreateListViewItem($rgrid[$i] & "|" & $rgrid[$i] & "|" & $rgrid[$i],$listview)
GUICtrlCreateListViewItem(^ ERROR
Ma vairable $r_number renvoi bien le nombre de ligne du résultat de la requête, pour le test 34 exactement d'où mon $i de 1 à 34 on vas dire mais je ne voit pas trop comment remplir cette listview.
Du coup je me demande, est-ce parce que je n'ai mis que trois colonne pour tester et qu'il en attend X (nombre de colonne sur ma requête) et qu'il plante ou que j'utilise mal ma variable $rgrid qui je suppose est un Array... pourtant en l'affichant avec un _ArrayDisplay mon $rgrid rempli bien le tableau... bref je séche.
Merci de votre aide.
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..] Selection souris dans _Arraydisplay
Bonjour,
essayez celà
je pense que vous devez retrouver un array avec plusieurs colonnes
Si c'est le cas
Autre chose aussi, vérifiez si les données commencent en ligne 0 ou 1
si elles commencent en ligne 0 il faut
essayez celà
Si c'est le cas
$rgrid[$i]
est faux. il devrait être $rgrid[$i][$y]
car vous êtes sur un array 2DAutre chose aussi, vérifiez si les données commencent en ligne 0 ou 1
si elles commencent en ligne 0 il faut
For $i = 0 To UBound($rgrid) - 1
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Selection souris dans _Arraydisplay
Merci pour la réponse, je vais essayé avec la méthode 2D.
Concernant _Array($rgrid) il fonctionne parfaitement mais comme je l'indique dans mon premier poste une fois le tableau des résultat apparu je voudrais que les utilisateurs puissent double cliquer sur une ligne et ainsi sélectionner la valeur et le _ArrayDisplay étant cloisonné on m'as conseillé éun listview, aprés si je peux le faire dans _ArrayDisplay ça m'arrangerais lol
Concernant _Array($rgrid) il fonctionne parfaitement mais comme je l'indique dans mon premier poste une fois le tableau des résultat apparu je voudrais que les utilisateurs puissent double cliquer sur une ligne et ainsi sélectionner la valeur et le _ArrayDisplay étant cloisonné on m'as conseillé éun listview, aprés si je peux le faire dans _ArrayDisplay ça m'arrangerais lol
Re: [..] Selection souris dans _Arraydisplay
Eureka, j'ai des donnée !
du coup $rgrid[$i][$y] était la solution à mon probléme, le fameux 2D, par contre le premier chiffre c'est la ligne et le second la colonne ?
J'anticipe ensuite, dans ma list view comment mettre le fond d'une ligne sur deux en surbrillance, comment permettre à l'utilisateur de faire un tris sur les colonnes, et le fameux clic droit actif car dans ma GUI mon clic droit est anatif.
Merci de vos aides
du coup $rgrid[$i][$y] était la solution à mon probléme, le fameux 2D, par contre le premier chiffre c'est la ligne et le second la colonne ?
J'anticipe ensuite, dans ma list view comment mettre le fond d'une ligne sur deux en surbrillance, comment permettre à l'utilisateur de faire un tris sur les colonnes, et le fameux clic droit actif car dans ma GUI mon clic droit est anatif.
Merci de vos aides
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..] Selection souris dans _Arraydisplay
un exemple d'utilisation
Pour trier les colonnes, voir _GUICtrlListView_SortItems() ou _GUICtrlListView_SimpleSort() dans l'aide
ou plus simple
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
Local $aArray[16][5]
For $i = 0 To 15
For $j = 0 To 4
$aArray[$i][$j] = "#" & $i & $j
Next
Next
;dans votre cas si $rgrid est array 2D
;$rgrid = $adoRs.GetRows()
;$aArray = $rgrid
_ArrayDisplay($aArray)
$r_col = UBound($aArray,2) - 1;colonnes
Local $colonne
For $i = 0 To $r_col;enregistre colonnes
$colonne &= "colonne " & $i & "|"
Next
$GUIlist = GUICreate("2 D", 500, 500, 100, 100, -1)
Local $listview = GUICtrlCreateListView($colonne, 10, 10, 400, 400)
GUICtrlSetBkColor(-1, 0xccffff)
GUICtrlSetBkColor($listview, $GUI_BKCOLOR_LV_ALTERNATE)
Local $val
Local $item[UBound($aArray,1)];stock item ID dans un array soit un ID par ligne
For $i = 0 To UBound($aArray,1) - 1;lignes
For $j = 0 To $r_col ;récup valeurs colonnes sur ligne $i
$val &= $aArray[$i][$j] & "|"
Next
$item[$i] = GUICtrlCreateListViewItem($val, $listview);écriture ligne
GUICtrlSetBkColor(-1, 0xffffcc)
$val = "";on vide variable pour ligne suivante
Next
GUICtrlCreateLabel("cliquez sur un item",10,450,400,30)
GUICtrlSetFont(-1,15)
$label = GUICtrlCreateLabel("",100,420,300,30)
GUICtrlSetFont(-1,15)
GUISetState(@SW_SHOW)
While 1
$aMsg = GUIGetMsg()
Switch $aMsg
Case -3
GUIDelete($GUIlist)
ExitLoop
Case $item[0] To $item[UBound($aArray,1) - 1]
$valrow = GUICtrlRead($aMsg);lecture de la ligne #01|#02|#03......
$split = StringSplit($valrow,"|")
$concatene = ""
For $a = 1 To $split[0];$split[0]= nb enregistrements
$concatene &= $split[$a] & " ";récupère valeurs sans "|"
Next
GUICtrlSetData($label,$concatene)
;autre possibilité
;GUICtrlSetData($inputnom,$split[1])
;GUICtrlSetData($inputadresse,$split[2])
;GUICtrlSetData($inputville,$split[3]) etc....
EndSwitch
WEnd
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
Local $aArray[16][5]
For $i = 0 To 15
For $j = 0 To 4
$aArray[$i][$j] = "#" & $i & $j
Next
Next
;dans votre cas si $rgrid est array 2D
;$rgrid = $adoRs.GetRows()
;$aArray = $rgrid
_ArrayDisplay($aArray)
$r_col = UBound($aArray,2) - 1;colonnes
Local $colonne
For $i = 0 To $r_col;enregistre colonnes
$colonne &= "colonne " & $i & "|"
Next
$GUIlist = GUICreate("2 D", 500, 500, 100, 100, -1)
Local $listview = GUICtrlCreateListView($colonne, 10, 10, 400, 400)
GUICtrlSetBkColor(-1, 0xccffff)
GUICtrlSetBkColor($listview, $GUI_BKCOLOR_LV_ALTERNATE)
Local $val
Local $item[UBound($aArray,1)];stock item ID dans un array soit un ID par ligne
For $i = 0 To UBound($aArray,1) - 1;lignes
For $j = 0 To $r_col ;récup valeurs colonnes sur ligne $i
$val &= $aArray[$i][$j] & "|"
Next
$item[$i] = GUICtrlCreateListViewItem($val, $listview);écriture ligne
GUICtrlSetBkColor(-1, 0xffffcc)
$val = "";on vide variable pour ligne suivante
Next
GUICtrlCreateLabel("cliquez sur un item",10,450,400,30)
GUICtrlSetFont(-1,15)
$label = GUICtrlCreateLabel("",100,420,300,30)
GUICtrlSetFont(-1,15)
GUISetState(@SW_SHOW)
While 1
$aMsg = GUIGetMsg()
Switch $aMsg
Case -3
GUIDelete($GUIlist)
ExitLoop
Case $item[0] To $item[UBound($aArray,1) - 1]
$valrow = GUICtrlRead($aMsg);lecture de la ligne #01|#02|#03......
$split = StringSplit($valrow,"|")
$concatene = ""
For $a = 1 To $split[0];$split[0]= nb enregistrements
$concatene &= $split[$a] & " ";récupère valeurs sans "|"
Next
GUICtrlSetData($label,$concatene)
;autre possibilité
;GUICtrlSetData($inputnom,$split[1])
;GUICtrlSetData($inputadresse,$split[2])
;GUICtrlSetData($inputville,$split[3]) etc....
EndSwitch
WEnd
ou plus simple
$query = "SELECT * FROM " & $tblname & " WHERE Nom LIKE '%" & GUICtrlRead($clientNom) & "%' ORDER BY Nom ASC;"
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [..] Selection souris dans _Arraydisplay
Merci pour l'ensemble de l'aide j'ai pu résoudre par contre pour que ce soit le double clic qui fonctionne pas moyen... j'ai dû utiliser la touche entrée.
Pour les intéressé voici le code :
Si quelqu'un sait comment fait un genre de "_IsPressed("0D", $hDLL) And BitAND($StateWin, Then" mais qui prend en charge le double clic et si on peu les intégrer facilement dans le code je prend.
Pour les intéressé voici le code :
$rgrid = $adoRs.GetRows()
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 1000, 600, 100, 100, $WS_OVERLAPPEDWINDOW) ;BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN)
$listview = GUICtrlCreateListView("Code|Identifiant|Nom|Numéro de rue|Nom de rue|Complement|Code Postal|Ville|Téléphone", 10, 10, 980, 580, -1)
For $i = 0 to $r_number - 1
if Mod($i, 2) = 0 Then ; pour savoir si nombre impair ou pair et colorer une ligne sur deux en 0xFFDDDD
GUICtrlCreateListViewItem($rgrid[$i][0] & "|" & $rgrid[$i][1] & "|" & $rgrid[$i][6] & "|" & $rgrid[$i][11] & "|" & $rgrid[$i][13] & "|" & $rgrid[$i][14] & "|" & $rgrid[$i][17] & "|" & $rgrid[$i][18] & "|" & $rgrid[$i][20],$listview)
Else
GUICtrlCreateListViewItem($rgrid[$i][0] & "|" & $rgrid[$i][1] & "|" & $rgrid[$i][6] & "|" & $rgrid[$i][11] & "|" & $rgrid[$i][13] & "|" & $rgrid[$i][14] & "|" & $rgrid[$i][17] & "|" & $rgrid[$i][18] & "|" & $rgrid[$i][20],$listview)
GUICtrlSetBkColor(-1, 0xFFDDDD)
EndIf
Next
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
$Indice = _GUICtrlListView_GetSelectedIndices($ListView) ; récupere l'indice de la ligne sélectionné
$Item = _GUICtrlListView_GetItem($ListView,int($Indice),0); Le 0 permet de recuperer dans la colonne 1
$StateWin = WinGetState("Résultat clients") ;sans ça la touche entrée s'exécute de partout....
If _IsPressed("0D", $hDLL) And BitAND($StateWin, 8) Then
Global $ccliselect = $Item[3]
GUIDelete($GUIlist)
ExitLoop
EndIf
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
GUICtrlSetData($CodeClient,$ccliselect)
Call("searchcode")
$r_number = UBound($rgrid)
$GUIlist = GUICreate("Résultat clients", 1000, 600, 100, 100, $WS_OVERLAPPEDWINDOW) ;BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN)
$listview = GUICtrlCreateListView("Code|Identifiant|Nom|Numéro de rue|Nom de rue|Complement|Code Postal|Ville|Téléphone", 10, 10, 980, 580, -1)
For $i = 0 to $r_number - 1
if Mod($i, 2) = 0 Then ; pour savoir si nombre impair ou pair et colorer une ligne sur deux en 0xFFDDDD
GUICtrlCreateListViewItem($rgrid[$i][0] & "|" & $rgrid[$i][1] & "|" & $rgrid[$i][6] & "|" & $rgrid[$i][11] & "|" & $rgrid[$i][13] & "|" & $rgrid[$i][14] & "|" & $rgrid[$i][17] & "|" & $rgrid[$i][18] & "|" & $rgrid[$i][20],$listview)
Else
GUICtrlCreateListViewItem($rgrid[$i][0] & "|" & $rgrid[$i][1] & "|" & $rgrid[$i][6] & "|" & $rgrid[$i][11] & "|" & $rgrid[$i][13] & "|" & $rgrid[$i][14] & "|" & $rgrid[$i][17] & "|" & $rgrid[$i][18] & "|" & $rgrid[$i][20],$listview)
GUICtrlSetBkColor(-1, 0xFFDDDD)
EndIf
Next
GUISetState(@SW_SHOW)
Local $aMsg = 0
While 1
$aMsg = GUIGetMsg(1)
$Indice = _GUICtrlListView_GetSelectedIndices($ListView) ; récupere l'indice de la ligne sélectionné
$Item = _GUICtrlListView_GetItem($ListView,int($Indice),0); Le 0 permet de recuperer dans la colonne 1
$StateWin = WinGetState("Résultat clients") ;sans ça la touche entrée s'exécute de partout....
If _IsPressed("0D", $hDLL) And BitAND($StateWin, 8) Then
Global $ccliselect = $Item[3]
GUIDelete($GUIlist)
ExitLoop
EndIf
Switch $aMsg[0]
Case $GUI_EVENT_CLOSE
GUIDelete($GUIlist)
ExitLoop
EndSwitch
WEnd
$adoCon.Close
GUICtrlSetData($CodeClient,$ccliselect)
Call("searchcode")
Re: [..] Selection souris dans _Arraydisplay
Consulte bien ceci: https://www.autoitscript.fr/forum/viewtopic.php?t=14078
Aussi inspire toi de ceci surtout : https://www.autoitscript.fr/forum/viewt ... 021#p98021
Aussi inspire toi de ceci surtout : https://www.autoitscript.fr/forum/viewt ... 021#p98021
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric