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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#1

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#4

Message par TommyDDR »

Je ne suis personnellement pas trop fan des HotKeySet et préfère utiliser les Accelerator :P
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#5

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre