ScrollAreaGadget transparent
ScrollAreaGadget transparent
Bonjour,
je cherche a crée un ScrollAreaGadget transparent.
J'explique :
Je crée un fenêtre windows, sur laquelle j'applique un imagegadget pour crée un fond.
quand je rajoute un ScrollAreaGadget, le fond est de la couleur d'origine de ma fenêtre (gris dans mon cas). J'aimerais un fond transparent pour pouvoir voir l'image de fond de ma fenêtre.
Cdlt.
je cherche a crée un ScrollAreaGadget transparent.
J'explique :
Je crée un fenêtre windows, sur laquelle j'applique un imagegadget pour crée un fond.
quand je rajoute un ScrollAreaGadget, le fond est de la couleur d'origine de ma fenêtre (gris dans mon cas). J'aimerais un fond transparent pour pouvoir voir l'image de fond de ma fenêtre.
Cdlt.
Re: ScrollAreaGadget transparent
Je pense que c'est pas possible se que tu demande !
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollAreaGadget transparent
@Dayvid : C'est possible 
Juste parce que je me suis trompé :p
Je retrouve le bon code et je poste.

Juste parce que je me suis trompé :p
Code : Tout sélectionner
Enumeration
#Mainform
#MyScrollArea
EndEnumeration
Procedure Open_MainForm()
hwnd = OpenWindow(#Mainform, 0, 0, 500, 400, "Test")
ScrollAreaGadget(#MyScrollArea, 40, 40, 200, 200, 250, 250)
CloseGadgetList()
SetGadgetColor(#MyScrollArea, #PB_Gadget_BackColor ,#Red)
SetWindowLongPtr_(WindowID(#Mainform),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(#Mainform),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(#Mainform), #Red, 0, #LWA_COLORKEY)
EndProcedure
Open_MainForm()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollAreaGadget transparent
Code de Rashad sur le forum anglais
Code : Tout sélectionner
Procedure WndProc(hwnd, uMsg, wParam, lParam)
GetWindowRect_(WindowID(0), r.RECT)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_SIZE,#WM_MOVE,#WM_PAINT
MoveWindow_(WindowID(1),r\left+3,r\top+25,r\right-r\left-6,r\bottom-r\top-28,1)
EndSelect
ProcedureReturn result
EndProcedure
CreateImage(0, 800, 600)
StartDrawing(ImageOutput(0))
For x = 0 To 799
For y = 0 To 599
Plot(x, y, RGB(x, y, x*y/15))
Next
Next
StopDrawing()
hBrush = CreatePatternBrush_(ImageID(0))
hwnd = OpenWindow(0, 0, 0, 800, 600, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetClassLongPtr_(WindowID(0), #GCL_HBRBACKGROUND, hBrush)
InvalidateRect_(WindowID(0), 0, 1)
OpenWindow(1, WindowX(0)+3, WindowY(0)+25, WindowWidth(0), WindowHeight(0), "", #WS_POPUP,WindowID(0))
ScrollAreaGadget(0, 10, 10, 780,580, 1500,1000, 30)
SetGadgetColor(0,#PB_Gadget_BackColor ,#Red)
SetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(1),#Red,0,#LWA_COLORKEY)
ButtonGadget (1, 10, 10, 230, 30,"Button 1")
ButtonGadget (2, 50, 50, 230, 30,"Button 2")
ButtonGadget (3, 90, 90, 230, 30,"Button 3")
TextGadget (4,130,130, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()
SetWindowCallback(@WndProc())
Repeat
If GetActiveWindow() <> 0
SetActiveWindow(0)
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
EndSelect
ForEver
Dernière modification par falsam le jeu. 21/juin/2012 23:34, modifié 1 fois.
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ScrollAreaGadget transparent
Ouoi la vache, pas mal Falsam
Merci, je prends
Falsam, tu pense que c'est possible avec un StringGadget, EditorGadget et les autres gadget du style ?!
Je vais faire des testes, encore merci !


Merci, je prends

Falsam, tu pense que c'est possible avec un StringGadget, EditorGadget et les autres gadget du style ?!
Je vais faire des testes, encore merci !

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
Re: ScrollAreaGadget transparent
Malheureusement, aucun des 2 codes n'est bons.
Dans le 1er, le fond est tellement transparent, qu'on voit au travers, et plus la fenetre Mainform.
Dans le 2eme, tu crée 2 fenetres.
Mon but de mettre une image de fond sur la fenetre (#Mainform) et que le scrollgadget devienne transparent pour que l'on voit l'image de fond.
Dans le 1er, le fond est tellement transparent, qu'on voit au travers, et plus la fenetre Mainform.
Dans le 2eme, tu crée 2 fenetres.
Mon but de mettre une image de fond sur la fenetre (#Mainform) et que le scrollgadget devienne transparent pour que l'on voit l'image de fond.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollAreaGadget transparent
Le 1er c'était juste pour que Dayvid constate qu'un fond transparent sur un ScrollAreaGadget est possible à condition de connaitre les API Windows ainsi que les callbacks, et en la matière je suis plutôt novice.
Un ScrollAreaGadget avec un fond invisible n'est pas possible, pour le moment, en natif avec Pure Basic.
La 2eme fenetre que tu as vu n'est qu'un container ou wrapper qui contient ton ScrollAreaGadget et sur lequel on va utiliser les fonctionnalités des API.
Essaye le code suivant et je pense qu'il répondra à tes attentes. (Windows Of Course:)
Tu remarqueras que les api sont exécutés uniquement sur le wrapper de la fenetre qui contient ton ScrollArrea et les gagets inclus dans cet area.
Le principe est de mettre de rendre transparents les fenetres et les gadgets colorés avec du blanc.
-Le wrapper (#MainWrapper) est coloré en blanc, le fond du gadget Textgadget est coloré en blanc etc ....
Attention ça ne fonctionne pas avec tous les gadgets.
Mais comme je l'ai dit, je ne suis pas un expert en API
J'ai corrigé GetWindowRect_(WindowID(0), r.RECT) en le remplaçant par GetWindowRect_(WindowID(#MainForm), r.RECT)
Un ScrollAreaGadget avec un fond invisible n'est pas possible, pour le moment, en natif avec Pure Basic.
La 2eme fenetre que tu as vu n'est qu'un container ou wrapper qui contient ton ScrollAreaGadget et sur lequel on va utiliser les fonctionnalités des API.
Essaye le code suivant et je pense qu'il répondra à tes attentes. (Windows Of Course:)
Code : Tout sélectionner
Enumeration
#Mainform
#MainWrapper
EndEnumeration
Procedure WndProc(hwnd, uMsg, wParam, lParam)
Protected X, Y, Width, Height
GetWindowRect_(WindowID(#MainForm), r.RECT)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_SIZE,#WM_MOVE,#WM_PAINT
MoveWindow_(WindowID(#MainWrapper), r\left+20, r\top+100, 500, 300,1)
EndSelect
ProcedureReturn Result
EndProcedure
;Création du background de #MainForm
CreateImage(0, 800, 600)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Gradient)
LinearGradient(0, 0, 800, 600)
GradientColor(0.00, $03FEFC)
GradientColor(0.25, $83FD7C)
GradientColor(1.00, $0803F7)
Box(0,0,800,600)
StopDrawing()
hBrush = CreatePatternBrush_(ImageID(0))
;Fenetre principale
hwnd = OpenWindow(#Mainform, 0, 0, 800, 600, "ScrollAreaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetClassLongPtr_(WindowID(#Mainform), #GCL_HBRBACKGROUND, hBrush)
InvalidateRect_(WindowID(#Mainform), 0, 1)
;ScrollArea dans son wrapper
OpenWindow(#MainWrapper, 20, 100, 500, 300, "", #WS_POPUP, WindowID(#Mainform))
ScrollAreaGadget(0, 0, 0, 500, 300, 700, 400)
SetGadgetColor(0,#PB_Gadget_BackColor ,#White)
;SetWindowLongPtr_ : Modifie un attribut de la fenêtre spécifiée.
;GetWindowLongPtr_ : Récupère des informations à propos de la fenêtre spécifiée
SetWindowLongPtr_(WindowID(#MainWrapper),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(#MainWrapper),#GWL_EXSTYLE)|#WS_EX_LAYERED)
;SetLayeredWindowAttributes : Définit l'opacité et/ou la transparence
SetLayeredWindowAttributes_(WindowID(#MainWrapper),#White, 0, #LWA_COLORKEY)
TextGadget(11, 20, 30, 100, 30, "TextGadget")
SetGadgetColor(11,#PB_Gadget_BackColor ,#White)
ButtonGadget (12, 380, 50, 80, 30,"Test Button")
StringGadget(12, 20, 50, 200, 22,"Essai")
CloseGadgetList()
;SetWindowCallback(@WndProc(), #MainWrapper)
SetWindowCallback(@WndProc(), #Mainform)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Le principe est de mettre de rendre transparents les fenetres et les gadgets colorés avec du blanc.
-Le wrapper (#MainWrapper) est coloré en blanc, le fond du gadget Textgadget est coloré en blanc etc ....
Attention ça ne fonctionne pas avec tous les gadgets.
Mais comme je l'ai dit, je ne suis pas un expert en API

J'ai corrigé GetWindowRect_(WindowID(0), r.RECT) en le remplaçant par GetWindowRect_(WindowID(#MainForm), r.RECT)
Dernière modification par falsam le ven. 22/juin/2012 19:41, modifié 1 fois.
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: ScrollAreaGadget transparent
C'est pas mal
Cependant le scroll se trouve pour moi en dehors de la fenêtre
Il reviens sur la fenêtre si je déplace la fenêtre
C'est pas mal je trouve

Cependant le scroll se trouve pour moi en dehors de la fenêtre

Il reviens sur la fenêtre si je déplace la fenêtre

C'est pas mal je trouve

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollAreaGadget transparent
Pour moi c'est correct sous windows 7dayvid a écrit :Cependant le scroll se trouve pour moi en dehors de la fenêtre![]()
Il reviens sur la fenêtre si je déplace la fenêtre![]()
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollAreaGadget transparent
Marche niquel aussi sur XP sp3 v4.61, y'a juste au début ou la scroll est en dehors de la fenêtre
Mais des qu'on bouge la fenetre elle saute dedans
Juste un peu laborieux le déplacement de la fenêtre
Merci Falsam
Mais des qu'on bouge la fenetre elle saute dedans

Juste un peu laborieux le déplacement de la fenêtre

Merci Falsam

Re: ScrollAreaGadget transparent
C'est pas ce que je viens de dire !!!Kwai chang caine a écrit :Marche niquel aussi sur XP sp3 v4.61, y'a juste au début ou la scroll est en dehors de la fenêtre
Mais des qu'on bouge la fenetre elle saute dedans![]()
Juste un peu laborieux le déplacement de la fenêtre![]()
Merci Falsam

La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !
Mon forum http://purebasic.forumphp3.com/index.php
Mon forum http://purebasic.forumphp3.com/index.php
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollAreaGadget transparent
Bah si !!! Ca n’empêche pas que le fond transparent marche niquel et que je confirme ce que ça fait sur XP SP3
Et c'est pas parce que t'as dit quelque chose, que j'ai pas le droit de dire ce que ça fait chez moi, pour guider FALSAM
Et t'a oublié de dire que ça labourait
Et c'est pas parce que t'as dit quelque chose, que j'ai pas le droit de dire ce que ça fait chez moi, pour guider FALSAM

Et t'a oublié de dire que ça labourait

Re: ScrollAreaGadget transparent
En modifiant comme ca juste avant le repeat :
SetWindowCallback(@WndProc(), #Mainform)
GetWindowRect_(WindowID(0), r.RECT)
MoveWindow_(WindowID(#MainWrapper), r\left+20, r\top+100, 500, 300,1)
le gadget arrive bien au bon emplacement.
SetWindowCallback(@WndProc(), #Mainform)
GetWindowRect_(WindowID(0), r.RECT)
MoveWindow_(WindowID(#MainWrapper), r\left+20, r\top+100, 500, 300,1)
le gadget arrive bien au bon emplacement.

- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: ScrollAreaGadget transparent
et remplacer GetWindowRect_(WindowID(0), r.RECT) par GetWindowRect_(WindowID(#MainForm), r.RECT)supercdfr a écrit :En modifiant comme ca juste avant le repeat :
SetWindowCallback(@WndProc(), #Mainform)
GetWindowRect_(WindowID(0), r.RECT)
MoveWindow_(WindowID(#MainWrapper), r\left+20, r\top+100, 500, 300,1)
le gadget arrive bien au bon emplacement.
Une chance que #MainForm soit la première énumération

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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Re: ScrollAreaGadget transparent
C'est vrai pour le positionnement de la Scroll, y'a du mieux.
Y'a plus besoin de déplacer pour qu'elle saute...Mais elle saute quand même, elle est rigolote cette scroll qui se promène
Surement une scroll mexicaine
Y'a plus besoin de déplacer pour qu'elle saute...Mais elle saute quand même, elle est rigolote cette scroll qui se promène

Surement une scroll mexicaine
