Taux de transparance

Sujets variés concernant le développement en PureBasic
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Taux de transparance

Message par wolfjeremy »

Salut,

Est-il possible, d'appliquer une transparance, mais pas totalement, c'est a dire que l'on voit plus ou moin a travers la zone, dans une fenetre ?
Appliquer au pixel si possible, pour des zone précise.

Merci d'avance pour votre aide.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

J'arrive a gerer la transparance de la fenetre complète avec l'api, mais pas une zone précise de la fenetre :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tout ce que j'ai sous la main c'est l'exemple du Soldat
que je viens de rendre compatible avec la V4
regarde plus specialement la fenetre "Troué" :D

Code : Tout sélectionner

 ; Auteur : Le Soldat Inconnu
; Version de PB : 4.00
;
; Explication du programme :
; Donner à une fenêtre une forme spécifique. Par exemple faire une fenêtre ronde ou triangulaire.


Enumeration
    #Quitter
    #Forme1
    #Forme2
    #Forme3
    #Forme4
    #Forme5
EndEnumeration



Procedure Forme()
    If GetGadgetState(#Forme1) ; si on a choisi la forme 1
        
        Region = CreateRoundRectRgn_(0, 0, WindowWidth(0), WindowHeight(0), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis
        ; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2)
        ; X1, Y1 : coordonné du point haut gauche de la region
        ; X1, Y1 : coordonné du point haut gauche de la region
        ; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region
        SetWindowRgn_(WindowID(0), Region, #True) ; On applique la région
        DeleteObject_(Region) ; On supprime la région
        
    ElseIf GetGadgetState(#Forme2) ; si on a choisi la forme 2
        
        Region = CreateEllipticRgn_(0, 0, WindowWidth(0), WindowHeight(0)) ; Création de la région pour faire une fenêtre elliptique
        ; CreateEllipticRgn_(X1, Y1, X2, Y2)
        ; X1, Y1 : coordonné du point haut gauche de la region
        ; X1, Y1 : coordonné du point haut gauche de la region
        SetWindowRgn_(WindowID(0), Region, #True) ; On applique la région
        DeleteObject_(Region) ; On supprime la région
        
    ElseIf GetGadgetState(#Forme3) ; si on a choisi la forme 3
        
        Region = CreatePolygonRgn_(?Triangle, 4, #ALTERNATE) ; Création de la région pour faire une fenêtre elliptique
        ; CreateRoundRectRgn_(Array, NbPoints, Type)
        ; Array : Adresse de la liste ou de la Data
        ; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point)
        ; Type : Voir msdn
        SetWindowRgn_(WindowID(0), Region, #True) ; On applique la région
        DeleteObject_(Region) ; On supprime la région
        
    ElseIf GetGadgetState(#Forme4) ; si on a choisi la forme 4
        
        Region1 = CreateRectRgn_(0, 0, WindowWidth(0), WindowHeight(0)) ; Création d'une région en rectangle
        Region2 = CreateRectRgn_(10, 10, WindowWidth(0) - 10, 50) ; Création d'une région en rectangle
        ; CreateRectRgn_(X1, Y1, X2, Y2)
        ; X1, Y1 : coordonné du point haut gauche de la region
        ; X1, Y1 : coordonné du point haut gauche de la region
        CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions
        ; Les modes suivants sont disponibles :
        ; #RGN_AND : Intersection
        ; #RGN_OR : Union
        ; #RGN_DIFF : Différences
        ; #RGN_XOR : Union moins les intersections
        SetWindowRgn_(WindowID(0), Region1, #True) ; On applique la région finale
        DeleteObject_(Region1) ; On supprime les régions
        DeleteObject_(Region2)
        
    ElseIf GetGadgetState(#Forme5) ; si on a choisi la forme 5
        
        Region1 = CreatePolygonRgn_(?Triangle, 4, #ALTERNATE)
        Region2 = CreateEllipticRgn_(0, 0, WindowWidth(0), WindowHeight(0))
        CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
        SetWindowRgn_(WindowID(0), Region1, #True) ; On applique la région finale
        DeleteObject_(Region1) ; On supprime les régions
        DeleteObject_(Region2)
        
    EndIf
EndProcedure




; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 400, 400,  "Test",#PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(0)) = 0
    End
EndIf

; Création des boutons et de l'option d'affichage
ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter")
OptionGadget(#Forme1, 100, 125, 200, 15, "Angles arrondis")
OptionGadget(#Forme2, 100, 140, 200, 15, "Ronde")
OptionGadget(#Forme3, 100, 155, 200, 15, "Triangle")
OptionGadget(#Forme4, 100, 170, 200, 15, "Trouée")
OptionGadget(#Forme5, 100, 185, 200, 15, "Triangle + Rond")


Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
        Select EventGadget() ; boutons, zone de texte, ...
            Case #Quitter
                Event = #PB_Event_CloseWindow ; On quitte
            Default
                Forme() ; sinon, on change la forme de la fenêtre
        EndSelect
    EndIf
    
Until Event = #PB_Event_CloseWindow

End



DataSection
Triangle :
Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle
EndDataSection
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Ok merci, je vais voir sa.
Mais a première vue c'est une transparance total... mais enfin bon je vais verif quand même !

EDIT : Oui il fait un deleteobject donc en faite ce n'est pas se que je cherche :( je vais voir si je ne trouve pas une commande setalphaobject ou un truc du genre...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Auriez vous un code pour la transparence sur les gadgets ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est un truc de "layered window" je crois qui ne fonctionne qu'à partir d'XP
sinon ca peut s'émuler mais dans les deux cas ca bouffe pas mal de ressource sans que ca soit spécialement utile...

Dri
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

sinon, pour windows 2000, XP, ...

Code : Tout sélectionner

w = 400
h = 400

#COLORKEY = #Green

If CreateImage(0, w, h)
  StartDrawing(ImageOutput(0))
  Box   ( 10,  10, 100,  70, #COLORKEY)
  Box   (100,  10,  10,  40, #COLORKEY)
  Box   (100, 200, 250, 180, #COLORKEY)
  For y = 200 To 380 Step 4
    For x = 100 To 350 Step 4
      Plot(x, y, #Blue)
    Next
  Next
  Box   ( 50,  50, 250, 200, #Blue)
  Circle(450, 150,  25, #COLORKEY)
  Circle(300, 150,  50, #COLORKEY)
  Circle(250, 250,  25, #Red)
  StopDrawing()
EndIf

If OpenWindow(0, 0, 0, w, h, "LWA_COLORKEY", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  StickyWindow(0, #True)
  
  CreateGadgetList(WindowID(0))
  ImageGadget(0, 0, 0, w, h, ImageID(0))
  
  If OSVersion() >= #PB_OS_Windows_2000
    SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_LAYERED) 
    SetLayeredWindowAttributes_(WindowID(0), #COLORKEY, 200, #LWA_COLORKEY);|#LWA_ALPHA)
  EndIf
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf
Image
Répondre