Page 1 sur 1

[R] Insérer texte prédéfini dans l'edit ayant le focus

Posté : mar. 02 mars 2021 16:52
par GMH
Bonjour,

Par l'appui sur un bouton, je voudrais insérer un texte prédéfini dans l'édit ayant eu le focus dernièrement avant l'appui sur ledit bouton. Lorsque la fonction récupérant le focus est envoyée, elle retourne bien entendu le handle du bouton enfoncé et non celui de l'edit sélectionné précédemment par un clic du bouton gauche de la souris.

Sauriez-vous me guider dans le codage ?

Code : Tout sélectionner

#include <EditConstants.au3>

Opt("GUIOnEventMode", 1)
   Global $maGui = GUICreate("test", 600, 300, -1, -1)
   GuiSetOnEvent(-3, "_Close", $maGui)
   Global $edit1 = GUICtrlCreateEdit("",20,20,500,50)
   Global $edit2 = GUICtrlCreateEdit("",20,90,500,50)
   GUICtrlCreateButton("Insérer", 100, 160, 60, 20)
   GUICtrlSetOnEvent(-1,"_insere")
GUISetState(@SW_SHOW)

While 1
   Sleep(1000)
WEnd

Func _insere()
Local $cControle = ControlGetFocus($maGui)
If $cControle = "Edit1" Then
	GUICtrlSetData($edit1, "Cette ligne est affichée dans Edit1")
ElseIf $cControle = "Edit2" Then
	GUICtrlSetData($edit2, "Cette ligne est affichée dans Edit2")
EndIf

EndFunc

Func _Close()
   Exit
EndFunc

Je vous remercie de votre éclairage.

Re: [..] Insérer texte prédéfini dans l'edit ayant le focus

Posté : mar. 02 mars 2021 17:26
par Tlem
Bonjour.
Que je sache, il n'y a pas d'historique sur le focus, donc si vous donnez le focus à une fenêtre, vous perdrez forcément l'info du focus précédent.

Donc AMHA, 2 solutions :
1 - Enregistrer dans votre propre script l'identifiant de chaque fenêtre qui obtient le focus (Si identifiant = identifiant de votre script alors on prends l'identifiant mémorisé précédemment).
2 - Au lieu d'un bouton, faites un raccourcis clavier. ^^

Re: [..] Insérer texte prédéfini dans l'edit ayant le focus

Posté : mar. 02 mars 2021 17:50
par GMH
Merci à vous,

Votre solution 1 me paraît jouable. Voilà mon oeuvre ... qui n'est pas bonne :

Code : Tout sélectionner

#include <EditConstants.au3>

Opt("GUIOnEventMode", 1)
   Global $cControle
   Global $maGui = GUICreate("test", 600, 300, -1, -1)
   GuiSetOnEvent(-3, "_Close", $maGui)
   Global $edit1 = GUICtrlCreateEdit("",20,20,500,50)
   GUICtrlSetOnEvent(-1,"_focus")
   Global $edit2 = GUICtrlCreateEdit("",20,90,500,50)
   GUICtrlSetOnEvent(-1,"_focus")
   GUICtrlCreateButton("Insérer", 100, 160, 60, 20)
   GUICtrlSetOnEvent(-1,"_insere")
GUISetState(@SW_SHOW)

While 1
   Sleep(1000)
WEnd

Func _focus()
	$cControle = ControlGetFocus($maGui)
	MsgBox(0,"",$cControle)
EndFunc

Func _insere()
	If $cControle = "Edit1" Then
		GUICtrlSetData($edit1, "Cette ligne est affichée dans Edit1")
	ElseIf $cControle = "Edit2" Then
		GUICtrlSetData($edit2, "Cette ligne est affichée dans Edit2")
	EndIf

EndFunc

Func _Close()
   Exit
EndFunc



Re: [..] Insérer texte prédéfini dans l'edit ayant le focus

Posté : mar. 02 mars 2021 19:17
par Tlem
C'est probablement pas tout a fait ce que vous voudrez au final, mais ceci fait comme demandé :

Code : Tout sélectionner

#include <EditConstants.au3>
Global $LastFocus

Opt("GUIOnEventMode", 1)
   Global $cControle
   Global $maGui = GUICreate("test", 600, 300, -1, -1)
   GuiSetOnEvent(-3, "_Close", $maGui)
   Global $edit1 = GUICtrlCreateEdit("",20,20,500,50)
;   GUICtrlSetOnEvent(-1,"_focus")
   Global $edit2 = GUICtrlCreateEdit("",20,90,500,50)
;   GUICtrlSetOnEvent(-1,"_focus")
   GUICtrlCreateButton("Insérer", 100, 160, 60, 20)
   GUICtrlSetOnEvent(-1,"_insere")
GUISetState(@SW_SHOW)

While 1
	Switch ControlGetFocus($maGui)
		Case "edit1"
			$LastFocus = $edit1

		Case "edit2"
			$LastFocus = $edit2

	EndSwitch

   Sleep(1000)
WEnd

Func _insere()
	GUICtrlSetData($LastFocus, "Cette ligne est affichée dans le dernier edit")
EndFunc

Func _Close()
   Exit
EndFunc

Re: [R] Insérer texte prédéfini dans l'edit ayant le focus

Posté : mar. 02 mars 2021 19:47
par GMH
Si, c'est exactement ça !
J'ai adapté le code à mon programme réel, j'obtiens exactement ce que je veux.

Un très grand merci à vous.