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.
Taux de transparance
-
wolfjeremy
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
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é"
que je viens de rendre compatible avec la V4
regarde plus specialement la fenetre "Troué"
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
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Auriez vous un code pour la transparence sur les gadgets ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
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