TextGadget sur ImageGadget(fond Transparent) ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

TextGadget sur ImageGadget(fond Transparent) ?

Message 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
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

as tu essayer avec la lib de gnozal Purecolor ?
Jbernard13
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message 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 ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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) 
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Message 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//
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message 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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Dernière modification par Anonyme2 le dim. 08/mars/2009 10:11, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

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