TextGadget sur ImageGadget(fond Transparent) ?
TextGadget sur ImageGadget(fond Transparent) ?
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
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
-
- Messages : 1501
- Inscription : dim. 18/avr./2004 15:04
- Localisation : sud de la france
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Bonjour SHINAO
Peut etre ce code de Danilo / Num3 modifié par PB
Peut etre ce code de Danilo / Num3 modifié par PB

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)
Sinon pour colorer un text gadget :
Z@ph0d//
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
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.
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
Dernière modification par Anonyme2 le dim. 08/mars/2009 10:11, modifié 1 fois.
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Bah, je ne comprend pas ce que tu ne comprend pas
Tu choisis l'image a mettre deriiere à cette ligne
Et tu as bien une fenetre
Et un textegadget
que tu ouvre 

Tu choisis l'image a mettre deriiere à cette ligne
Code : Tout sélectionner
hBrush = CreatePatternBrush_(LoadImage(1,#PB_Compiler_Home + "Examples\#Commun\" + "jpg.jpg"))
Code : Tout sélectionner
OpenWindow(2,0,0,250,100,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Code : Tout sélectionner
TextGadget(1,0,0,225,13,"This TextGadget has a transparent background")

- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere