ScrollAreaGadget transparent

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
supercdfr
Messages : 105
Inscription : sam. 21/juil./2007 15:16

ScrollAreaGadget transparent

Message par supercdfr »

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.
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: ScrollAreaGadget transparent

Message par dayvid »

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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ScrollAreaGadget transparent

Message par falsam »

@Dayvid : C'est possible :)

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
Je retrouve le bon code et je poste.
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
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ScrollAreaGadget transparent

Message par falsam »

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%
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: ScrollAreaGadget transparent

Message par dayvid »

Ouoi la vache, pas mal Falsam :o :)
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
supercdfr
Messages : 105
Inscription : sam. 21/juil./2007 15:16

Re: ScrollAreaGadget transparent

Message par supercdfr »

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.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ScrollAreaGadget transparent

Message par falsam »

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:)

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
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)
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%
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: ScrollAreaGadget transparent

Message par dayvid »

C'est pas mal :)

Cependant le scroll se trouve pour moi en dehors de la fenêtre :mrgreen:
Il reviens sur la fenêtre si je déplace la fenêtre :wink:

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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ScrollAreaGadget transparent

Message par falsam »

dayvid a écrit :Cependant le scroll se trouve pour moi en dehors de la fenêtre :mrgreen:
Il reviens sur la fenêtre si je déplace la fenêtre :wink:
Pour moi c'est correct sous windows 7
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
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: ScrollAreaGadget transparent

Message par Kwai chang caine »

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 8O
Juste un peu laborieux le déplacement de la fenêtre :(
Merci Falsam 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: ScrollAreaGadget transparent

Message par dayvid »

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 8O
Juste un peu laborieux le déplacement de la fenêtre :(
Merci Falsam 8)
C'est pas ce que je viens de dire !!! 8O
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: ScrollAreaGadget transparent

Message par Kwai chang caine »

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 8O
Et t'a oublié de dire que ça labourait :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
supercdfr
Messages : 105
Inscription : sam. 21/juil./2007 15:16

Re: ScrollAreaGadget transparent

Message par supercdfr »

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. :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: ScrollAreaGadget transparent

Message par falsam »

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. :)
et remplacer GetWindowRect_(WindowID(0), r.RECT) par GetWindowRect_(WindowID(#MainForm), r.RECT)

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

Re: ScrollAreaGadget transparent

Message par Kwai chang caine »

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 :lol:
Surement une scroll mexicaine :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre