Page 1 sur 1

[..] Fond d'un Edit transparent, possible ?

Posté : dim. 10 janv. 2010 01:55
par badnolife
Bonsoir,
je voudrais savoir s'il est possible de rendre transparent un edit, ou alors mettre une image de fond.

Merci d'avance.

Re: [...] Fond d'un Edit transparent, possible ?

Posté : lun. 18 janv. 2010 20:04
par Narmeke
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 :

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]
 
Les fragments de codes sont extraits d'un de mes scripts donc désoler pour la mise en form ! :lol:

Il vous faut, pour simplifier, mettre ceci Comme couleur et le tour est joué :

Code : Tout sélectionner

$GUI_BKCOLOR_TRANSPARENT
 
P.S : Fonctionne avec les labels.

Re: [...] Fond d'un Edit transparent, possible ?

Posté : lun. 18 janv. 2010 20:58
par DJSIR
.. l'édit ne permettra pas de voir si une Pic est en dessous :mrgreen:

Re: [...] Fond d'un Edit transparent, possible ?

Posté : mar. 19 janv. 2010 09:34
par Habibsbib
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.

Re: [...] Fond d'un Edit transparent, possible ?

Posté : mar. 23 mars 2010 04:01
par SagePourpre
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
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.

Re: [...] Fond d'un Edit transparent, possible ?

Posté : sam. 15 janv. 2011 19:31
par Habibsbib
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