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

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
badnolife
Niveau 2
Niveau 2
Messages : 23
Enregistré le : mer. 08 avr. 2009 16:59
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Yogui le mer. 16 févr. 2011 10:45, modifié 1 fois.
Raison : Modification de la baslise [...] par [..]
Avatar du membre
Narmeke
Niveau 6
Niveau 6
Messages : 247
Enregistré le : mer. 28 oct. 2009 11:31
Localisation : Libourne
Status : Hors ligne

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

#2

Message 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.
Avatar du membre
DJSIR
Niveau 8
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 ?

#3

Message par DJSIR »

.. l'édit ne permettra pas de voir si une Pic est en dessous :mrgreen:
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Habibsbib
Niveau 7
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 ?

#4

Message 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.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#5

Message 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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Habibsbib
Niveau 7
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 ?

#6

Message 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
Répondre