Fenêtre et api

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Fenêtre et api

Message par poshu »

Bonjours ^^;
Après une courte recherche, je n'ai pas trouvé d'info concernant la création d'une fenêtre à partir d'une image (pour pouvoir obtenir un truc rigolo au niveau des formes et un système skinnable facilement).
Je sais que c'est possible avec l'api; alors je vous appelle à l'aide! Si vous avez au moins une idée pour orienter ma recherche, ne vous gênez pas.
Merci d'avance.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Dans PBOSL il y a une lib qui fait ça + exemples
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Code : Tout sélectionner

Procedure Shape(hwnd, w.l, h.l, transcolor.l)
Protected X.l, Y.l
Protected success.l, curRgn.l, tempRgn.l

curRgn = CreateRectRgn_(0, 0, w, h)
While Y <= h
    While X <= w
        If GetPixel_(GetDC_(hwnd), X, Y) = transcolor
            tempRgn = CreateRectRgn_(X, Y, X + 1, Y + 1)
            success = CombineRgn_(curRgn, curRgn, tempRgn, #RGN_DIFF)
            DeleteObject_(tempRgn)
        EndIf
        X = X + 1
    Wend
        Y = Y + 1
        X = 0
Wend
success = SetWindowRgn_(hwnd, curRgn, #True)
DeleteObject_(curRgn)

EndProcedure
Ca devrait faire l'affaire.
"Qui baise trop bouffe un poil." P. Desproges
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »



; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; 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 (), WindowHeight (), 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 (), 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 (), WindowHeight ()) ; 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 (), 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 (), 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 (), WindowHeight ()) ; Création d'une région en rectangle
        Region2 = CreateRectRgn_ (10, 10, WindowWidth () - 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 (), 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 (), WindowHeight ())
         CombineRgn_ (Region1, Region1, Region2, #RGN_OR ) ; On combine les 2 régions
         SetWindowRgn_ ( WindowID (), 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, #PB_Window_Borderless | #PB_Window_ScreenCentered , "Test" ) = 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_EventGadget
         Select EventGadgetID () ; boutons, zone de texte, ...
             Case #Quitter
                Event = #PB_EventCloseWindow ; On quitte
             Default
                Forme() ; sinon, on change la forme de la fenêtre
         EndSelect
     EndIf
    
Until Event = #PB_EventCloseWindow

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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est beau un code en couleur non ? :lol: :lol:


surtout avec le theme SPACEPILOTE3K
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Merci beaucoup ^^,
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Y'a SkinWin de Danilo (Lib PureITools)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

c'est beau un code en couleur non ?
Beau je ne sais, cela dépend des goûts et des couleurs, mais ultra lisible OUI!
Encore bravo! 8)
Est beau ce qui plaît sans concept :)
Speedy Galerie
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

pour que ce soit encore plus mieux, faudrait reprendre le code couleur de pb ^^;
Répondre