Page 1 sur 1

TextGadget sur ImageGadget(fond Transparent) ?

Publié : sam. 07/mars/2009 17:41
par Shinao
bonjour,

je souhaiterais mettre un text gadget sur un imagegadget, le problème c'est que son fond est gris/blanc, mais je ne sais pas comment définir son fond en transparent ?

Quelqu'un sait ?
Voir une solution

Merci d'avance

Publié : sam. 07/mars/2009 17:47
par jbernard13
as tu essayer avec la lib de gnozal Purecolor ?

Publié : sam. 07/mars/2009 17:57
par Shinao
Je n'avais pas essayé,

mais j'ai testé ça :

PureCOLOR_SetGadgetColor(#Text_Login1, #PureCOLOR_SystemColor, #PureCOLOR_DontSetBackColor)

et ça ne marche pas le fond reste tel quel..

Que faire ?

Publié : sam. 07/mars/2009 19:01
par Kwai chang caine
Bonjour SHINAO

Peut etre ce code de Danilo / Num3 modifié par PB :roll:

Code : Tout sélectionner

Global TextGadgetBackground,TextGadgetForeground 

TextGadgetBackground=GetStockObject_(#HOLLOW_BRUSH) 
TextGadgetForeground=RGB($FF,$00,$00) 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  If Msg=#WM_CTLCOLORSTATIC And lParam = GadgetID(1) 
    SetBkMode_(wParam,#TRANSPARENT) 
    SetTextColor_(wParam,TextGadgetForeground) 
    ProcedureReturn TextGadgetBackground 
  Else 
    ProcedureReturn #PB_ProcessPureBasicEvents 
  EndIf 
EndProcedure 

UseJPEGImageDecoder()
OpenWindow(2,0,0,250,100,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
CreateGadgetList(WindowID(2)) 
SetWindowCallback(@WinProc())
TextGadget(1,0,0,225,13,"This TextGadget has a transparent background") 

hBrush = CreatePatternBrush_(LoadImage(1,#PB_Compiler_Home + "Examples\#Commun\" + "jpg.jpg")) 
SetClassLong_(WindowID(2), #GCL_HBRBACKGROUND, hBrush)  
InvalidateRect_(WindowID(2), 0, #True) 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 

DeleteObject_(TextGadgetBackground) 

Publié : sam. 07/mars/2009 19:34
par zaphod
Sinon pour colorer un text gadget :

Code : Tout sélectionner

WinMain=OpenWindow(#PB_Any, 0, 0, 800, 600, "Test Program", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered) 
T1=TextGadget(#PB_Any,10,10,100,100,"",#PB_Text_Center) 
SetGadgetColor(T1,#PB_Gadget_BackColor,RGB(50,150,100)) 
SetGadgetColor(T1,#PB_Gadget_FrontColor,RGB(205,105,205)) 
SetGadgetText(T1,"Width: "+Str(100)+"    Height: "+Str(100))  

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Z@ph0d//

Publié : dim. 08/mars/2009 8:48
par Shinao
Merci mais je ne comprend pas comment l'utiliser (pour le background),

C'est possible d'avoir un exemple ou on ouvre une fenetre , un textgadget et que le background soit "deleted" ?

merci d'avance

Publié : dim. 08/mars/2009 10:09
par Anonyme2
Voilà un petit exemple commenté avec les fonctions PB sans callback sans brush et autres délices Microsoft.

J'ai mis en commentaire l'API GetTextExtentPoint32_() qui est prête à être utilisée pour retrouver les dimensions du texte pour le centrer ou autre avec (à ta charge de calculer le centrage) mais la fonction TextWidth() le fait aussi.

Code : Tout sélectionner

;- Gadgets
Enumeration 1
     #ImageGadget_Origine
     #ImageGadget_Ecrit
EndEnumeration

;- image
Enumeration 1
     #Image_Origine
EndEnumeration

;// constante de la couleur rouge
#bleu = #blue


If OpenWindow(#PB_Any,0,0,400,200,"Texte sur image",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
     
     ;// on charge l'image png
     UsePNGImageDecoder()
     If CatchImage(#Image_Origine, ?scalling_png) = 0
          MessageRequester("Erreur", "Impossible de charger l'image"+Chr(10)+"L'application va se terminer", 16)
          End
     EndIf
     
     ;// on affiche à gauche l'image d'origine et à droite l'image avec le texte
     If ImageGadget(#ImageGadget_Origine, 40, 40, 0, 0, ImageID(#Image_Origine)) = 0
          MessageRequester("Erreur", "Impossible d'afficher l'image"+Chr(10)+"L'application va se terminer", 16)
          End
     EndIf
     
     ;// on affiche le texte "Essai PB"
     Texte$ = "Essai PB"
     ;// on récupère le handle du contexte de périphérique retournée par StartDrawing() de PB
     hdc = StartDrawing(ImageOutput(#Image_Origine))
     ;// toujours tester que l'opération a réussie, hdc doit être différent de 0
     If hdc
          ;// on retrouve la taille de la chaine avec la police dce caractère associée au hdc
          ;// si on ne met pas de police, c'est la police associée (système) au hdc qui est utilisée
          ;// par l'API windows GetTextExtentPoint32_()
          ;           If GetTextExtentPoint32_(hdc, Texte$, Len(Texte$), @lpSize.size) = 0
          ;                MessageRequester("Erreur", "Erreur système"+Chr(10)+"L'application va se terminer", 16)
          ;                StopDrawing()
          ;                End
          ;           EndIf
          
          ;// on écrit le texte en bleu sur fond transparent pour garder l'image
          DrawingMode(#PB_2DDrawing_Transparent)
          DrawText(10, 10, Texte$ , #bleu)
          
          StopDrawing()
     EndIf
     
     
     ;// on affiche à droite l'image d'origine avec le texte écrit dessus
     If ImageGadget(#ImageGadget_Ecrit, GadgetWidth(#ImageGadget_Origine)+100, 40, 0, 0, ImageID(#Image_Origine)) = 0
          MessageRequester("Erreur", "Impossible d'afficher l'image"+Chr(10)+"L'application va se terminer", 16)
          End
     EndIf
     
     ;// boucle d'événements
     Repeat
     Until WaitWindowEvent() = #PB_Event_CloseWindow
     
     
EndIf
End
DataSection
     ;// l'image qui suit est une image png
     scalling_png:
     Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $82000000, $64000000
     Data.l $00000208, $7F7CC500, $00000035, $4D497407, $04D70745, $3419040D
     Data.l $5B0DB879, $09000000, $73594870, $C21E0000, $C21E0000, $75D06E01
     Data.l $0000003E, $4D416704, $B1000041, $61FC0B8F, $01000005, $41444911
     Data.l $EDDA7854, $800DC1D1, $41040C30, $A6A1B142, $F02D0B54, $998FB4B1
     Data.l $76B64E02, $79AE739D, $FBA3DECF, $1F66B5EF, $FCE8EF58, $FF3D7B3D
     Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
     Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
     Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
     Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
     Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
     Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
     Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
     Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
     Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
     Data.l $432090C8, $727C07C2, $FD83C605, $0000084F, $45490000, $42AE444E
     Data.b  96, -126
EndDataSection

Publié : dim. 08/mars/2009 10:11
par Kwai chang caine
Bah, je ne comprend pas ce que tu ne comprend pas :roll:

Tu choisis l'image a mettre deriiere à cette ligne

Code : Tout sélectionner

hBrush = CreatePatternBrush_(LoadImage(1,#PB_Compiler_Home + "Examples\#Commun\" + "jpg.jpg")) 
Et tu as bien une fenetre

Code : Tout sélectionner

OpenWindow(2,0,0,250,100,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
Et un textegadget

Code : Tout sélectionner

TextGadget(1,0,0,225,13,"This TextGadget has a transparent background") 
que tu ouvre 8O

Publié : dim. 08/mars/2009 10:15
par Kwai chang caine
Voilà un petit exemple commenté avec les fonctions PB sans callback sans brush et autres délices Microsoft.
Oui effectivement, pas de callback, mais la question etait que SHINAO voulait un TextGadget :roll:

Ton code est super et j'avais aussi ce type, mais point de TextGadget il n'y a :wink:

Publié : dim. 08/mars/2009 10:20
par Anonyme2
Je me disais aussi :D

mais bon, on peut très facilement écrire des fonctions permettant d'écrire du texte sur des images en gardant l'image d'origine pour "effacer le texte".

J'adore quand je suis hors sujet :D

Publié : dim. 08/mars/2009 14:20
par Shinao
Bon je suis encore débutant donc le code en entier c'est la confusion total pour moi, je vais rajouter le textgadget sur l'image enfaite il n'y aura pas de gadget car ce sera l'image et voila ça sera bon.

merci quand même