TextGadget à fond transparent

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Stop !!!!


@ Dobro : Si j'ai bien cherché. Je me suis inspiré du lien que tu as mis, j'y avais déjà été fais un tour. Mais c'est du bidouillage (chose que je vais devoir faire). Mais je chercher un commande qui faisait ça automatiquement. Comme un HideWindow(), mais qui laisse le texte affiché.


Merci bien en tout cas...
Et STOP pour les bagarres :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Dans ce cas tu peux utiliser ma lib SetTextColor et avec un ImageGadget tu pourras afficher du texte de la couleur de ton choix.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Merci, mais je vais continuer avec mon label et sans Image.
Je veux faire un prog (lecteur MP3 d'un topic plus bas) léger, qui ne prend peut de mémoire.

Dailleurs j'ai remarqué qqchose de très surprenant en regardant la mémoire pris par mon lecteur MP3).
Lorsque je lance le lecteur, il occupe 5.3 Mo de Ram.
Qd je le réduiit, il n'occupe plus que 600Ko, et qd je le fais réapparaitre, il occupe 730Ko... 8O
Si qq1 a des explications...

Merci en tt cas pr votre aide dans mes recherches... :lol:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

Bonjour à tous !

Petit up please, je n'arrive toujours pas à rendre le fond d'un TextGadget transparant, ou du moins à simuler ce proceder :?
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 »

Tu te fiches un peu du monde à mon avis :) la doc : SetGadgetColor() et un exemple de cod.

Code : Tout sélectionner

Enumeration
  #Mainform
  #Customer
EndEnumeration


Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  Protected IdGadget.i, WindowColor = RGB(222, 184, 135)
  
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  SetWindowColor(#Mainform, WindowColor)
  
  IdGadget = TextGadget(#PB_Any, 20, 23, 100, 20, "Client")
  SetGadgetColor(IdGadget, #PB_Gadget_BackColor, WindowColor)
  
  StringGadget(#Customer, 120, 20, 200, 22, "")
EndProcedure


Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow() ;different de WindowEvent() :p (oui je me suis fais avoir !!!)
  MEvent = EventMenu()
  GEvent = EventGadget()
  TEvent = EventType()
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
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 »

Je ne me fiche de personne; mon problème est le même que celui évoqué içi à savoir qu'en fond il y a une image personnalisé et pas un vieux fond de couleur unie..
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 ne me fiche de personne; mon problème est le même que celui évoqué içi à savoir qu'en fond il y a une image personnalisé et pas un vieux fond de couleur unie..
Tu aurais non seulement pu préciser qu'il y avaut une image personnalisée mais aussi créer un nouveau sujet plutôt que de déterrer un sujet qui date de 2005 :) Tout ça n'est pas bien grave et je te propose quand même une solution.

1 - Loader l'image de fond de ta fenêtre.
2 - Créer les différents textes sur cette image.
3 - Créer tes différents gadgets
4 - Afficher EN DERNIER ton image de fond.

Code : Tout sélectionner

Enumeration
  #Mainform
  #Customer
  #Adresse
  
  #Image
  #WindowBackGround
EndEnumeration


Define.l Event, WEvent, MEvent, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered

Procedure TextGadgetTransparent(Gadget.i, x.i, y.i, Width.i, Height.i, Text.s, Police.s="Arial", Size.i=9, Color.i=$000000)
  Protected Font.i
  
  Font = LoadFont(#PB_Any, Police,Size)
  If StartDrawing(ImageOutput(#Image))
    DrawingFont(FontID(Font))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(x, y, Text, Color)
    StopDrawing()
  EndIf
  
EndProcedure

Procedure Open_MainForm() 
  UseJPEGImageDecoder()
  
  LoadImage(#Image, #PB_Compiler_Home + "/examples/3d/Data/Textures/MRAMOR6X6.jpg")
  
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  TextGadgetTransparent(#PB_Any, 20, 23, 100, 20, "Client") 
  StringGadget(#Customer, 120, 20, 200, 22, "")
  
  TextGadgetTransparent(#PB_Any, 20, 60, 100, 20, "Adresse", "Arial", 11, RGB(255, 69, 0)) 
  EditorGadget(#Adresse, 20, 80, 300, 200)
  
  ImageGadget(#WindowBackGround, 0, 0, 0, 0, ImageID(#Image))
EndProcedure


Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  WEvent = EventWindow() ;different de WindowEvent() :p (oui je me suis fais avoir !!!)
  MEvent = EventMenu()
  GEvent = EventGadget()
  TEvent = EventType()
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
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
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: TextGadget à fond transparent

Message par MLD »

Salut
tu ne cherche pas beaucoup. Regarde

Code : Tout sélectionner

; netmaestro: http://www.purebasic.fr/english/viewtopic.php?p=151896#p151896
; Ceci est valable aussi pour optiongadget
Global TextGadgetBackground, TextGadgetForeground
TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground = RGB(255, 0, 0)

Procedure WinProc(hWnd, Msg, wParam, lParam)
  If Msg = #WM_CTLCOLORSTATIC And lParam = GadgetID(0)
    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")
 

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)

Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

Déjà un grand merci à tous les deux de vos réponse :wink:

@falsam ta technique marche mais petit problème quand la fenêtre est réduite puis réouverte :?

@MLD celà semble de parfaitement marcher

Problème résolus.
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

Petite rectification: ton code @MLD ne marche que pour un seul texte gadget; réécrire la même procédure pour l'appeler une 2ème fois ou inclure un argument en plus n'y change rien :|
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 :Petite rectification: ton code @MLD ne marche que pour un seul texte gadget; réécrire la même procédure pour l'appeler une 2ème fois ou inclure un argument en plus n'y change rien :|
J'aurais été curieux de voir ton code :)
En tout cas ça fonctionne aussi avec un deuxiéme textgadget.

Code : Tout sélectionner

; netmaestro: http://www.purebasic.fr/english/viewtopic.php?p=151896#p151896
; Ceci est valable aussi pour optiongadget
Global TextGadgetBackground, TextGadgetForeground
TextGadgetBackground = GetStockObject_(#HOLLOW_BRUSH)
TextGadgetForeground = RGB(255, 0, 0)

Procedure WinProc(hWnd, Msg, wParam, lParam)
  If Msg = #WM_CTLCOLORSTATIC 
    Select lParam 
      Case GadgetID(0), GadgetID(1)
        SetBkMode_(wParam, #TRANSPARENT)
        SetTextColor_(wParam, TextGadgetForeground)
        ProcedureReturn TextGadgetBackground
    EndSelect  
  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)
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 »

A toutes fins utile et pour rappel... Il y a Ceci et aussi !

Notes : le fichier "WIN32.HLP" disponible là : https://dl.dropboxusercontent.com/u/404 ... wsHelp.zip
Ou/Et celui là pour Vb mais exploitable : https://dl.dropboxusercontent.com/u/404 ... lpFrVb.chm

Fichiers à copier dans le répertoire "Help" de Purebasic et accessible via la touche F1 sur le mots ou via "Aide externe"
il donne les infos utiles (en anglais) sur les fonctions API disponibles (ATTENTION pas forcément à jour pour tout)

Code : Tout sélectionner

; :-------------------------------------------------------------------------------------------------------------------------------------------------------------
;  Fentêtre Transparente....  Basée sur des codes trouvés et donne l'illusion de transparence 
;  --------------------------------- :  **********************************************************************
;                                                Laisse entrevoir l'image de fond de votre écran sans rien d'autre que ce que vous y placez
;									    Ici un objet représenté par une image de type déclaté en première ligne...
;									    et le nom ainsi que le répertoire dans la ligne Data... 				                         Versus JG.
; 
; :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;
Global Rep$                                                       ; Localisation de l'application                                              
     Rep$=GetPathPart(ProgramFilename()) ; Le programme actuel se trouve ICI 
     SetCurrentDirectory(Rep$)					     ; On fixe le répertoire  
; 
Global Window_0
Global ButtonImage_0
;
;{ Images
Enumeration
     #Image_ButtonImage_0
     #Menu_EscapeKey = 123  ; keyboardshortcut, will return 123 as if it was a menuitem selected 
EndEnumeration
;}
;{ Images incluent
DataSection
     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 ? 

EndDataSection
;}
;{ Image Plugins
     UsePNGImageDecoder()
     UseJPEGImageDecoder()
;}
; Active tout les encodeurs que PureBasic accepte (avec BMP).
;
Declare.l myCallback(hwnd.l, uMsg.l, wParam.l, lParam.l)
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;
Global hImage.l = CatchImage (1, ?Image_01)
Global hImageList.l = ImageList_Create_ ( ImageWidth (1), ImageHeight (1), #ILC_COLOR32|#ILC_MASK , 1, 0)
;
ImageList_AddMasked_ (hImageList, hImage, #Black )
;
; *************************  Supple ***********************
;  --------------------------- Open a window --------------------- 
;     If OpenWindow(0, 330, 250, 600, 460, "Menus Gestion Budget en Purebasic", #PB_Window_SystemMenu) 
;     
If OpenWindow (0, 216, 0, 800, 500, "Menu Budget J.G. 2008" , #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu )
  	SetWindowCallback (@myCallback(), 0)
    
    If CreateMenu(0, WindowID(0)) 
          MenuTitle("Gestion Fichiers") 
               MenuItem( 1, "&Membres..") 
               MenuItem( 2, "&Articles") 
               MenuItem( 3, "&Fournisseurs") 
               MenuItem( 4, "&Catégories") 
               MenuBar() 
               OpenSubMenu("Recensement") 
                    MenuItem( 5, "Biens individuel") 
                    MenuItem( 6, "Table Répartition") 
                    MenuItem( 7, "C:\Ok.bat") 
                    CloseSubMenu() 
          MenuBar() 
          MenuItem( 8, "E&xit") 
          MenuTitle("Mouvements") 
               MenuItem( 9, "&Journal de mouvements") 
               MenuItem( 10, "Journal de &Banque") 
               MenuItem( 11, "&Centralisateur") 
               MenuItem(12, "&Table des indices") 
          MenuTitle("Aide") 
               MenuItem(13, "Aide générale") 
               MenuItem(14, "Info Produit") 
    EndIf 
    
    Repeat
          ;
          Quit = 0 ; Flag pour quitter la boucle (ici les menus gérer par cette fenêtre 
	     ; 
          Select WaitWindowEvent() 
			;     
               Case #PB_Event_Menu
                    ;
                    ButtonImage_0 = ButtonImageGadget(#PB_Any, 145, 85, 500,360, CatchImage(#Image_ButtonImage_0, ?Image_ButtonImage_0))
                    ;
                    Select EventMenu(); To see which menu has been selected 
                         ;     
     			     Case #Menu_EscapeKey ; esc key 
     				     MessageRequester("Hint", "You pressed ESC", 0) 
                         Case 1 ; 
                              MessageRequester("Touche ", " Appyée 1", 0) 
     	               Case 2 ; 
                              MessageRequester("Touche ", " Appyée 2", 0) 
     				Case 3 ; 
                              MessageRequester("Touche ", " Appyée 3", 0) 
                         Case 4 ; 
                              MessageRequester("Touche ", " Appyée 4", 0) 
                         Case 5 ; 
                              MessageRequester("Touche ", " Appyée 5", 0) 
                         Case 6 ;
                              MessageRequester("Touche ", " Appyée 6", 0) 
     				 Case 7  ; 
                              MessageRequester("Touche ", " Appyée 7", 0) 
                         Case 8  ;
                              MessageRequester("Touche ", " Appyée 8 (Quitte)", 0) 
                              Quit = 1 ;  Exit 
                         Case 9  ;  
                              MessageRequester("Touche ", " Appyée 9 (Journaux)", 0) 
     				 Case 10 ; 
                              MessageRequester("Touche ", " Appyée 10 (Journaux)", 0) 
                         Case 11 ; 
                              MessageRequester("Touche ", " Appyée 11 (centralisateur", 0) 
                         Case 12 ; 
                              MessageRequester("Touche ", " Appyée 12 (Indices)", 0) 
                         Case 13 ; About 
     				  	MessageRequester("About", "Aides !", 0) 
                         Case 14 ; About 
                              MessageRequester("About", "Infos Programme !", 0)                       
                         Default 
     				   	MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0) 
     				EndSelect 
     				;
               Case #WM_CLOSE ; #PB_EventCloseWindow 
		    	     MessageRequester("Exit", "One more click, please!", 0) 
                    Quit = 1 
		        
          EndSelect 
    
  Until Quit = 1 
 ;
EndIf
ImageList_Destroy_ (hImageList)
;-
Procedure.l myCallback(hwnd.l, uMsg.l, wParam.l, lParam.l)
 
  Protected hdc.l, result.l = #PB_ProcessPureBasicEvents
 
     Select uMsg
   
          Case #WM_PAINT
               hdc = BeginPaint_ (hwnd, ps.PAINTSTRUCT)
     	     PaintDesktop_ (hdc)
     	     ImageList_Draw_ (hImageList, 0, hdc, 20, 20, #ILD_TRANSPARENT )
     	     EndPaint_ (hwnd, ps)
	     result = #True
     
          Case #WM_SIZING , #WM_MOVING
       	     InvalidateRect_ (hwnd, 0, 1)
     
          Case #WM_ERASEBKGND
               result = #False
     
     EndSelect
     ProcedureReturn result
 
EndProcedure
;:-------------------------------------------------------------------------------------------------------------------------------------------------------------
End
;
Voilà, au cas ou ! :wink:
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 »

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.

Attends au moins que Dzoumaka donne une réponse sur les codes précédents quand le code que tu donnes n'est pas lié à sa demande.

En règle générale, pensez à insérer, si possible, des images issus du dossier d'installation de Pure Basic.
Ex : IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\AlphaChannel.bmp"
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
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: TextGadget à fond transparent

Message par majikeyric »

GeBonet a écrit :A toutes fins utile et pour rappel... Il y a Ceci et aussi !

Notes : le fichier "WIN32.HLP" disponible là : https://dl.dropboxusercontent.com/u/404 ... wsHelp.zip
Ou/Et celui là pour Vb mais exploitable : https://dl.dropboxusercontent.com/u/404 ... lpFrVb.chm

Fichiers à copier dans le répertoire "Help" de Purebasic et accessible via la touche F1 sur le mots ou via "Aide externe"
il donne les infos utiles (en anglais) sur les fonctions API disponibles (ATTENTION pas forcément à jour pour tout
Salut, je n'ai pas trouvé le répertoire "Help" dont tu parles, c'est quoi son chemin complet ?

Merci
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: TextGadget à fond transparent

Message par Anonyme 2 »

De mon côté le problème de transparence du fond d'un TextGadget est résolus grâce au code de @falsam que je remercie encore ! merci aussi aux autres qui prennent le temps de proposer leurs idées :wink:
Répondre