TextGadget à fond transparent

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: TextGadget à fond transparent

Message par MLD »

@Dzoumaka

1° Ce n'est pas mon code mais celui de netmaestro, qui est un exellent programmeur en PB depuis des lustres.
2° Je confirme que ce code fonctionne avec plusieurs TextGadget.

GeBonet : Content de te relire sur le forum et te souhaite une bonne année. :? :lol:
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TextGadget à fond transparent

Message par falsam »

Dzoumaka, on peut encore simplifier le code en supprimant le test des gadgets de la procédure callback (WinProc).

Code : Tout sélectionner

Global TextGadgetBackground, TextGadgetForeground
TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground = RGB(255, 0, 0)

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

OpenWindow(0, 0, 0, 250, 100, "Test", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)

SetWindowCallback(@WinProc())

TextGadget(0, 10, 10, 225, 13, "This TextGadget has a transparent background")

TextGadget(1, 10, 30, 225, 13, "This second gadget has a transparent background")

hBrush = CreatePatternBrush_(LoadImage(1, #PB_Compiler_Home + "Examples\Sources\Data\AlphaChannel.bmp"))
SetClassLong_(WindowID(0), #GCL_HBRBACKGROUND, hBrush)
InvalidateRect_(WindowID(0), 0, #True)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DeleteObject_(TextGadgetBackground)
De cette manière tu peux coder tes textgadgets sans te préoccuper de l’énumération de tes gadgettext. N'hésite pas à nous faire part de tes commentaires :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

8O 8O
Je me sens nul avec vos réponses, encore merci :)
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TextGadget à fond transparent

Message par falsam »

Dzoumaka a écrit :Je me sens nul avec vos réponses, encore merci :)
J'aurais préféré que tu me dises si ça fonctionne avec l'utilisation que tu en as :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

C'est le cas ! :mrgreen: :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TextGadget à fond transparent

Message par falsam »

Dzoumaka a écrit :C'est le cas ! :mrgreen: :mrgreen:
Thumbs up :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: TextGadget à fond transparent

Message par GeBonet »

Bonjour,

@MLD, merci, mais je ne suis que de passage...
Et meilleurs voeux à toi et à ceux qui veulent :wink:

@Falsam
Bonjour GeBonet. Peut être que je me montre :mrgreen: mais le code que tu donnes n'est pas fonctionnel car tu donnes des images qui n'existe pas sur nos PC (en tout cas le mien). De plus, il n'a aucun rapport avec la demande de Dzoumaka qui cherche à avoir des gadgettext transparents et non pas une fenêtre transparente.
C'est évident que les images ne sont pas accessibles puisque c'est les miennes...
Mais si tu lis le code il y a un commentaire explicite a ce sujet :
Image_ButtonImage_0:
IncludeBinary "C:\0 0 PureBasic52\PureBasic\00 ProgeneVII\Mes_Jpg\Fred_t.jpg" ; <<====== Votre chemin et Image JPG ?
Image_01:
IncludeBinary "C:\0 0 PureBasic52\PureBasic\00 ProgeneVII\Mes_Png\1jam_flag.png" ; <<====== Votre chemin et Image PNG ?
Quand au fait que ce soit pertinent puisqu'il s'agissait de Gadget, je sais lire ! Mais je donnais un code qui n'est pas à moi, mais du forum... Et qui est une piste ! Et que tous demande à Dzoumaka de lire et de chercher, alors je montre des choses trouvé, comme une FENÊTRE transparente...
Également donne accès à deux liens pour y télécharger ce que TOUS connaisse, les aides WIN32.HLP à placer dans le répertoire HELP qui devrait être dans le répertoire Purebasic et s'il n'y est pas, il est à créer... Maintenant ça n’intéresse personne ? Pas de problème 8) De toute façon je ne faisais que passer et ceci ne me donne pas envie d'y revenir...
Pas la peine de répondre avant l'année prochaine ! :mrgreen:
Anonyme
Messages : 3
Inscription : mer. 15/oct./2014 5:28
Contact :

Re: TextGadget à fond transparent

Message par Anonyme »

falsam a écrit :Dzoumaka, on peut encore simplifier le code en supprimant le test des gadgets de la procédure callback (WinProc).

Code : Tout sélectionner

Global TextGadgetBackground, TextGadgetForeground
TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground = RGB(255, 0, 0)

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

OpenWindow(0, 0, 0, 250, 100, "Test", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)

SetWindowCallback(@WinProc())

TextGadget(0, 10, 10, 225, 13, "This TextGadget has a transparent background")

TextGadget(1, 10, 30, 225, 13, "This second gadget has a transparent background")

hBrush = CreatePatternBrush_(LoadImage(1, #PB_Compiler_Home + "Examples\Sources\Data\AlphaChannel.bmp"))
SetClassLong_(WindowID(0), #GCL_HBRBACKGROUND, hBrush)
InvalidateRect_(WindowID(0), 0, #True)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DeleteObject_(TextGadgetBackground)
De cette manière tu peux coder tes textgadgets sans te préoccuper de l’énumération de tes gadgettext. N'hésite pas à nous faire part de tes commentaires :)
Bonjour à tous,

Je déterre un peu le sujet, mais j'aurais été curieux de savoir quel serait le code similaire mais sous Mac étant donné qu'on utilise ici des API Windows..

Merci !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: TextGadget à fond transparent

Message par Ollivier »

Si c'est urgent, peut-être vaut mieux "feinter" en copiant une image en "double tampon":
l'une sert de tampon original,
l'autre récupère l'original, subit ton affichage de texte quasiment en temps réel, puis est affichée par un imagegadget ou canvasgadget.
Ce n'est pas très compliqué à faire mais ce n'est pas facile de t'apporter une réponse si on ne sait pas trop les instructions que tu maîtrises dans ce langage.

Après si vraiment il te faut cette option sans "feinte", ce serait un coup de chance de trouver quelqu'un qui puisse t'aider ici rapidement. Pour augmenter tes chances de réponse, il y a le forum anglophone.

C'est un gars qui n'a pas Mac qui te parle. Quand j'ai vu les 4Go à télécharger pour programmer sur Mac, j'ai un peu fait marche arrière...

Je ne sais même si CanvasGadget fonctionne sur Mac. Si oui, je te recommande de tout centraliser sur ce gadget qui est quelque part "universel". N'hésite pas à piocher des exemples sur le forum pb: ils y sont allés comme des bourrins dès son intégration dans le langage.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: TextGadget à fond transparent

Message par comtois »

Comme dit précédemment les utilisateurs de mac sont plutôt sur le forum anglais.

il n'y a sans doute pas la réponse à ta question dans ce post, par contre tu trouveras de nombreux exemples d'utilisation de la commande CocoaMessage(). Si tu veux personnaliser les gadgets c'est le passage obligé.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre