Page 1 sur 1

[Ex] Raccourci Ctrl+A (Tout selectionner) dans un Edit

Posté : mer. 11 févr. 2015 17:00
par timmalos
Bonjour. Les Edit créés avec GUICtrlCreateEdit ne gèrent pas le raccourci Ctrl+A (Tout selectionner) de base, ce qui peut être assez problématique dans certains cas.
On peut rajouter ce comportement assez simplement avec le code suivant :

Include à rajouter en début de script:

Code : Tout sélectionner

#include <WinAPI.au3>
#include <GUIEdit.au3>
 

Code à rajouter après la création de l'Edit (un ou plusieurs) et de votre GUI, avant votre boucle infinie.

Code : Tout sélectionner

$hSelAll = GUICtrlCreateDummy()
Dim $AccelKeys[1][2] = [["^a", $hSelAll]] ; Set accelerators for Ctrl+a
GUISetAccelerators($AccelKeys)
GUICtrlSetOnEvent($hSelAll, "WM_COMMAND_CTRLA")

Et la fonction WM_COMMAND_CTRLA à rajouter en fin de script ou dans vos includes:

Code : Tout sélectionner

Func WM_COMMAND_CTRLA()
    $hWnd = _WinAPI_GetFocus()
    $class = _WinAPI_GetClassName($hWnd)
    If $class = 'Edit' Then _GUICtrlEdit_SetSel($hWnd, 0, -1)
EndFunc   ;==>WM_COMMAND_CTRLA

Re: [Ex] Raccourci Ctrl+A (Tout selectionner) dans un Edit

Posté : lun. 16 févr. 2015 21:12
par mikell
Ben alors on cite pas ses sources ? :mrgreen:

Si on veut pas les gros includes on peut aussi faire ça

Code : Tout sélectionner

HotkeySet("^a", "_allsel")

Func _allsel()
  If StringRegExp(ControlGetFocus($gui), '^Edit\d*$') Then Send("^{HOME}+^{END}")
EndFunc

Re: [Ex] Raccourci Ctrl+A (Tout selectionner) dans un Edit

Posté : mar. 17 févr. 2015 00:29
par timmalos
Il faudrait rajouter à cette fonction un contrôle de la fenêtre pour ne pas casser le comportement d'autres programmes lorsque le notre n'est pas actif par exemple.

Re: [Ex] Raccourci Ctrl+A (Tout selectionner) dans un Edit

Posté : mar. 17 févr. 2015 09:19
par TommyDDR
Je ne suis personnellement pas trop fan des HotKeySet et préfère utiliser les Accelerator :P

Re: [Ex] Raccourci Ctrl+A (Tout selectionner) dans un Edit

Posté : mar. 17 févr. 2015 12:30
par mikell
Pas de sarcasmes s'il vous plaît :mrgreen:

Code : Tout sélectionner

HotkeySet("^a", "_allsel")

Func _allsel()
  HotkeySet("^a")
  Send( (WinActive($gui) and StringRegExp(ControlGetFocus($gui), 'Edit\d*') ) ? "^{HOME}+^{END}" : "^a")
  HotkeySet("^a", "_allsel")
EndFunc
Mais je reconnais volontiers qu'un accelerator c'est préférable
Le code précédent voulait surtout montrer qu'on pouvait n'utiliser que des fonctions intégrées dans la fonction appelée