Page 1 sur 1
[R] GuiSetAccelerator() sur une Gui enfant
Posté : lun. 24 mai 2010 21:46
par TommyDDR
Bonjour,
Tout est dans le titre ^^
J'aimerais savoir s'il était possible de mettre des Accelerator sur des Gui enfants ($WS_CHILD)
Voici un exemple :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $Acc[1][2]
Dim $Gui2
$Gui = GUICreate("test", 300, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
$Gui2 = GUICreate("", 200, 200, 5, 5, $WS_CHILD, -1, $Gui)
GUISetBkColor(0xFF0000)
$Input = GUICtrlCreateInput("", 5, 5, 190, 20)
$Input2 = GUICtrlCreateInput("", 5, 105, 190, 20)
GUICtrlSetOnEvent($Input, "test")
$Acc[0][0] = "{UP}"
$Acc[0][1] = $Input
GUISetAccelerators($Acc, $Gui2)
GUISetState()
While(True)
Sleep(10)
WEnd
Func test()
ToolTip("ok")
EndFunc
Func quit()
Exit
EndFunc
En laissant $Gui2, ca ne marche pas alors que si on met $Gui ca marche.
Merci pour vos réponses.
Edit : Ajout du spoiler
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : lun. 24 mai 2010 23:58
par Tlem
D'après l'exemple modifié de GUISetAccelerators, je dirais oui ...
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$GUI1 = GUICreate("GUI1", 500, 500)
GUISetState()
$GUI2 = GUICreate("GUI2", 200, 200, -1, -1, -1, -1, $GUI1)
GUICtrlCreateLabel("Please click a button!", 10, 10)
$YesID = GUICtrlCreateButton("Yes", 10, 50, 50, 20)
$NoID = GUICtrlCreateButton("No", 80, 50, 50, 20)
$ExitID = GUICtrlCreateButton("Exit", 150, 50, 50, 20)
; Set accelerators for Ctrl+y and Ctrl+n
Dim $AccelKeys[2][2]=[["^y", $YesID], ["^n", $NoID]]
GUISetAccelerators($AccelKeys)
GUISetState() ; display the GUI
Do
$msg = GUIGetMsg()
Select
Case $msg = $YesID
MsgBox(0, "You clicked on", "Yes")
Case $msg = $NoID
MsgBox(0, "You clicked on", "No")
Case $msg = $ExitID
MsgBox(0, "You clicked on", "Exit")
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "You clicked on", "Close")
EndSelect
Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID
Mais pour cela
vous ne devez pas être en mode événementiel car ce dernier gère les événements d'une manière différente.
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mar. 25 mai 2010 06:59
par TommyDDR
Hum, dans votre exemple, la création de la 2eme GUI est incomplète " $GUI2 = GUICreate("C "
Je l'ai complété de la manière suivante (mais ca ne marche pas non plus) :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$GUI1 = GUICreate("GUI1", 500, 500)
GUISetState()
$GUI2 = GUICreate("Ch", 200, 200, 5, 5, $WS_CHILD, -1, $GUI1)
GUISetBkColor(0xFF0000)
GUICtrlCreateLabel("Please click a button!", 10, 10)
$YesID = GUICtrlCreateButton("Yes", 10, 50, 50, 20)
$NoID = GUICtrlCreateButton("No", 80, 50, 50, 20)
$ExitID = GUICtrlCreateButton("Exit", 150, 50, 50, 20)
; Set accelerators for Ctrl+y and Ctrl+n
Dim $AccelKeys[2][2]=[["^y", $YesID], ["^n", $NoID]]
GUISetAccelerators($AccelKeys)
GUISetState() ; display the GUI
Do
$msg = GUIGetMsg()
Select
Case $msg = $YesID
MsgBox(0, "You clicked on", "Yes")
Case $msg = $NoID
MsgBox(0, "You clicked on", "No")
Case $msg = $ExitID
MsgBox(0, "You clicked on", "Exit")
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "You clicked on", "Close")
EndSelect
Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID
Mais de toute façon, même si ca avait marché, je ne peut me permettre de passer en mode non évènementiel ^^.
Merci quand même.
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mar. 25 mai 2010 08:37
par Tlem
Effectivement, la ligne de construction de la GUI2 avait été tronquée ...
J'ai modifié le code et maintenant cela fonctionne. Par contre en testant votre code, je me rend compte de ce que vous cherchez à faire.
Je vous déconseil l'utilisation d'une seconde GUI pour afficher des contrôle sur la GUI principale, cela n'a pas de sens. Utilisez des groupes de contrôle ou des images.

Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mar. 25 mai 2010 18:28
par TommyDDR
Malheureusement la seconde GUI m'est indispensable ^^.
En effet, dans mon programme j'ai un TreeView sur la gauche et quand je clique sur l'un des items, alors la fenêtre correspondant est affichée et les autres sont cachées.
Mais j'ai trouver une solution :
Je vais affecter les Accelerators à la GUI principale et les changerai a chaque cliques sur un nouvelle item du TreeView.
(En espérant resté compréhensif ^^)
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mar. 25 mai 2010 21:58
par Tlem
TommyDDR a écrit :Malheureusement la seconde GUI m'est indispensable ^^.
En effet, dans mon programme j'ai un TreeView sur la gauche et quand je clique sur l'un des items, alors la fenêtre correspondant est affichée et les autres sont cachées.
Et alors ...
Vous ne savez pas masquer/afficher un ou plusieurs contrôle ???
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 00:35
par TommyDDR
Bien sur que oui, je sais le faire, mais j'ai un nombre variable de fenêtres contenant chacune jusqu'à 10688 contrôles ^^' c'est pourquoi j'ai tout rassemblé dans des sous fenêtres.
J'en profite pour demander si le "GUI_MAXCONTROLS = 65532" se limitait pour une seule fenêtre d'un programme ou pour la totalité des fenêtres d'un programme ?
Merci.
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 00:37
par Tlem
TommyDDR a écrit :10688 contrôles
Heuuuu, qu'est-ce que vous nous faites là ....?
Vous pouvez développer un peut SVP car là, dit comme cela, ca parait complètement loufoque.

Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 00:49
par TommyDDR
Je fait un programme qui intègre un exploreur, je me suis fixé un maximum de 6000 fichiers dans un même dossier donc c'est autant de ListViewItem à stocker.
Le programme permet aussi de lister les processus en cours (limite de 1000 car 100 n'était pas suffisant pour vista, j'ai donc pris large ^^)
Il y a aussi la liste des services et diverses informations.
Ce qui nous fait monter a 10688 au final.
(Je devrais peut être créer un autre post mais, j'aimerais aussi savoir s'il était possible de connaitre la liste des programmes accédant à internet UDF ou autre)
Merci ^^.
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 01:45
par Tlem
Hummm, soit. Mais ces 'contrôles' sont dans des listes. Donc si vous masquez la liste, vous masquez les contrôles qu'elle contient.
Essayez ceci :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
Global $Form1 = GUICreate("Form1", 346, 406, 192, 124)
Global $hListView = GUICtrlCreateListView("", 16, 16, 314, 342)
Global $Label1 = GUICtrlCreateLabel("Ré-apparition du ListView" & @CRLF & " dans 3 secondes", 60, 120, 351, 50)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
Global $Button2 = GUICtrlCreateButton("Boutton Caché", 128, 168, 91, 25)
Global $Button1 = GUICtrlCreateButton("Valider", 144, 368, 75, 25)
GUISetState(@SW_SHOW)
; Load images
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
; Add columns
_GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
_GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
_GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)
; Add items
_GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
_GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
_GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetStyle($hListView, $LVS_REPORT)
GUICtrlSetState($hListView, $GUI_HIDE)
Sleep(3000)
GUICtrlSetState($hListView, $GUI_SHOW)
EndSwitch
WEnd
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 11:45
par TommyDDR
Oui, je vois ce que vous voulez dire mais je voulais que l'appui sur "ENTRER" dans une de mes sous fenêtres fasse une action et l'appui sur "ENTRER" dans une autre fasse une autre action, en mettant tous les contrôles dans une même fenêtre, mon problème reste le même.
Donc autant rester avec des GUI filles, comme ca je peux ajouter des contrôles dans celles-ci sans modifier le code de "changement de page".
Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 12:02
par Tlem
Je ne comprend pas tout ce que vous voulez faire exactement, mais ce n'est pas grave, c'est votre code et vous le faites comme bon vous semble ...

Re: [..] GuiSetAccelerator() sur une Gui enfant
Posté : mer. 26 mai 2010 12:19
par TommyDDR
Désolé ^^'
Je passe le post en résolu.