Parfaitement réalisable...
En me fiant au réponses précédentes, c'est impossible à l'aide de GuiCtrlCreateEdit().
Une solution alternative consisterait à créer un "pseudo-contrôle".
Avec gdi+ et _GDIPlus_StringFormatCreate(), tu peux écrire le texte désiré n'importe où
dans une GUI. Tu peux aisément capturer toutes les touches frappées sur le clavier à l'aide
de Hotkeyset()
Voilà un exemple très brouillon loin d'être terminé...
Écrit quelque chose et normalement ça devrait s'écrire au fur et à mesure.
Ce n'est qu'une piste à suivre mais tu pourrais faire ce que tu souhaites en te basant sur ça.
(On s'entend que j'ai fait cela en quelques minutes parce que je n'ai pas le temps nécessaire
pour te fournir un exemple complet étant donné que l'utilisation de Gdi+ me demande beaucoup de temps
de recherche chaque fois que je me met le nez dedans. )
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
Global $string
Global $hGUI, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout
For $i = 0 To 255
HotKeySet(Chr($i),"touche")
Next
HotKeySet("!","touche")
_Main()
Func touche()
ConsoleWrite(@HotKeyPressed)
;HotKeySet(@HotKeyPressed ) ; on désactive Hotkeyset avant d'envoyer la touche en question
;Send(@HotKeyPressed ,1)
If @HotKeyPressed <> Chr(8) Then
$String &=@HotKeyPressed
Else ; delete
$string = StringTrimRight($string,1)
EndIf
_GDIPlus_GraphicsDrawStringEx ($hGraphic,$string, $hFont, $tLayout, $hFormat, $hBrush)
;HotKeySet(@HotKeyPressed ,"touche")
EndFunc
Func _Main()
; Create GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()
; Draw a string
_GDIPlus_Startup ()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid (0xFF00007F)
$hFormat = _GDIPlus_StringFormatCreate ()
$hFamily = _GDIPlus_FontFamilyCreate ("Arial")
$hFont = _GDIPlus_FontCreate ($hFamily, 12, 2)
$tLayout = _GDIPlus_RectFCreate (140, 110, 100, 20)
_GDIPlus_GraphicsDrawStringEx ($hGraphic, "", $hFont, $tLayout, $hFormat, $hBrush)
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Clean up resources
_GDIPlus_FontDispose ($hFont)
_GDIPlus_FontFamilyDispose ($hFamily)
_GDIPlus_StringFormatDispose ($hFormat)
_GDIPlus_BrushDispose ($hBrush)
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_ShutDown ()
EndFunc ;==>_Main
Attention, c'est dans l'état brouillon.
Pour que ça soit vraiment fonctionnel, il faut que tu définisse la "zone" dans la gui qui doit être ton edit afin de
capturer les touches seulement lorsque le focus est sur le contrôle en question. Il faut encore ajouter certaines
fonctions gdi (j'ai oublié lesquelles) pour que le texte s'actualise lorsque tu effaces des caractères et pour éviter
de perdre ce qui a été dessiné si tu minimises la fenêtre entre autres choses.