[..] Fond d'un Edit transparent, possible ?
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Fond d'un Edit transparent, possible ?
Bonsoir,
je voudrais savoir s'il est possible de rendre transparent un edit, ou alors mettre une image de fond.
Merci d'avance.
je voudrais savoir s'il est possible de rendre transparent un edit, ou alors mettre une image de fond.
Merci d'avance.
Modifié en dernier par Yogui le mer. 16 févr. 2011 10:45, modifié 1 fois.
Raison : Modification de la baslise [...] par [..]
Raison : Modification de la baslise [...] par [..]
- Narmeke
- Niveau 6
- Messages : 247
- Enregistré le : mer. 28 oct. 2009 11:31
- Localisation : Libourne
- Status : Hors ligne
Re: [...] Fond d'un Edit transparent, possible ?
Oui, un Edit peut être transparent (le fond), mais tu ne verras pas a travers la fenêtre !
Voici 2 morceaux de codes pour comparaison !
Avec Fond noire :
Avec Fond transparent :
Les fragments de codes sont extraits d'un de mes scripts donc désoler pour la mise en form !
Il vous faut, pour simplifier, mettre ceci Comme couleur et le tour est joué :
P.S : Fonctionne avec les labels.
Voici 2 morceaux de codes pour comparaison !
Avec Fond noire :
Code : Tout sélectionner
$Edit2 = GUICtrlCreateEdit("", 16, 16, 241, 409, BitOR($ES_CENTER,$ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$WS_CLIPSIBLINGS))
GUICtrlSetData(-1, "|| Pause ||")[color=#00FF00];Texte dans l'Edit[/color]
GUICtrlSetFont(-1, 9, 800, 0, "Lucida Console") [color=#00FF00];Type de police[/color]
GUICtrlSetColor(-1, 0x00FF00)[color=#00FF00];Couleur de la police[/color]
GUICtrlSetBkColor(-1, [color=#FF4000]0x000000[/color])[color=#00FF00];Couleur de fonds de l'Edit[/color]
Avec Fond transparent :
Code : Tout sélectionner
$Edit2 = GUICtrlCreateEdit("", 16, 16, 241, 409, BitOR($ES_CENTER,$ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL,$WS_CLIPSIBLINGS))
GUICtrlSetData(-1, "|| Pause ||")[color=#00FF00];Texte dans l'Edit[/color]
GUICtrlSetFont(-1, 9, 800, 0, "Lucida Console") [color=#00FF00];Type de police[/color]
GUICtrlSetColor(-1, 0x00FF00)[color=#00FF00];Couleur de la police[/color]
GUICtrlSetBkColor(-1, [color=#FF4000]$GUI_BKCOLOR_TRANSPARENT[/color])[color=#00FF00];Couleur de fonds de l'Edit[/color]

Il vous faut, pour simplifier, mettre ceci Comme couleur et le tour est joué :
Code : Tout sélectionner
$GUI_BKCOLOR_TRANSPARENT
- DJSIR
- Niveau 8
- Messages : 583
- Enregistré le : mar. 01 juil. 2008 15:16
- Localisation : 76, Le HAVRE (in the DJSIR World)
- Status : Hors ligne
Re: [...] Fond d'un Edit transparent, possible ?
.. l'édit ne permettra pas de voir si une Pic est en dessous 

$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)
[Func] ProgressBar, aller plus loin
(ne décodez pas le binaire, ça veux rien dire)
[Func] ProgressBar, aller plus loin
-
- Niveau 7
- Messages : 393
- Enregistré le : dim. 30 août 2009 13:49
- Localisation : Euh...Verticale, entre le siège et l'écran...
- Status : Hors ligne
Re: [...] Fond d'un Edit transparent, possible ?
Donc, en résumé : non, c'est impossible. Ou alors tu mets la couleur du fond de ta fenêtre pour le fond de ton Edit.
-
- Niveau 7
- Messages : 442
- Enregistré le : dim. 06 juil. 2008 09:11
- Status : Hors ligne
Re: [...] Fond d'un Edit transparent, possible ?
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. )
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.
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
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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
plus belle vue du haut de son Pouf = )
-
- Niveau 7
- Messages : 393
- Enregistré le : dim. 30 août 2009 13:49
- Localisation : Euh...Verticale, entre le siège et l'écran...
- Status : Hors ligne
Re: [...] Fond d'un Edit transparent, possible ?
Petit UP, voila le code adéquat (tout fonctionne) :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
$GUI = GUICreate("", 800, 600)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$Edit = GUICtrlCreateEdit("", 0, 0, 800, 600, 0x50011004)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
_GUICtrlMakeTrans($Edit, 50)
GUICtrlSetFont(-1, 12, 750, "", "Arial", 2)
$Pic1 = GUICtrlCreatePic("Background.bmp", 0, 0, 800, 600)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOW)
While 1
WEnd
Func _Exit()
Exit 0
EndFunc ;==>_Exit
Func _GuiCtrlMakeTrans($iCtrlID, $iTrans = 255)
Local $pHwnd, $nHwnd, $aPos, $a
$hWnd = GUICtrlGetHandle($iCtrlID);Get the control handle
If $hWnd = 0 Then Return SetError(1, 1, 0)
$pHwnd = DllCall("User32.dll", "hwnd", "GetParent", "hwnd", $hWnd);Get the parent Gui Handle
If $pHwnd[0] = 0 Then Return SetError(1, 2, 0)
$aPos = ControlGetPos($pHwnd[0], "", $hWnd);Get the current pos of the control
If @error Then Return SetError(1, 3, 0)
$nHwnd = GUICreate("", $aPos[2], $aPos[3], $aPos[0], $aPos[1], 0x80000000, 0x00080000 + 0x00000040, $pHwnd[0]);greate a gui in the position of the control
If $nHwnd = 0 Then Return SetError(1, 4, 0)
$a = DllCall("User32.dll", "hwnd", "SetParent", "hwnd", $hWnd, "hwnd", $nHwnd);change the parent of the control to the new gui
If $a[0] = 0 Then Return SetError(1, 5, 0)
If Not ControlMove($nHwnd, '', $hWnd, 0, 0) Then Return SetError(1, 6, -1);Move the control to 0,0 of the newly created child gui
GUISetState(@SW_SHOW, $nHwnd);show the new child gui
WinSetTrans($nHwnd, "", $iTrans);set the transparency
If @error Then Return SetError(1, 7, 0)
GUISwitch($pHwnd[0]);switch back to the parent Gui
Return $nHwnd;Return the handle for the new Child gui
EndFunc ;==>_GuiCtrlMakeTrans