J'ai des Boutons

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

dans cet exemple , tu verra qu'il est facile de faire une fenetre de la forme que tu veux , c'est une code qui avait ete fait par le Soldat inconnu , mais qui te donne deja une base

Code : Tout sélectionner

; 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.

Declare Forme(win)

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

Global win=0






; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 400, 400,  "Test",#PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(win)) = 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(win) ; sinon, on change la forme de la fenêtre
    EndSelect
  EndIf
  
Until Event =#PB_Event_CloseWindow 

End



; zone procedure
Procedure Forme(win)
  If GetGadgetState(#Forme1) ; si on a choisi la forme 1
    
    Region = CreateRoundRectRgn_(0, 0, WindowWidth(win), WindowHeight(win), 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(win), 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(win), WindowHeight(win)) ; 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(win), 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(win), 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(win), WindowHeight(win)) ; Création d'une région en rectangle
    Region2 = CreateRectRgn_(10, 10, WindowWidth(win) - 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(win), 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(win), WindowHeight(win))
    CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
    SetWindowRgn_(WindowID(win), Region1, #True) ; On applique la région finale
    DeleteObject_(Region1) ; On supprime les régions
    DeleteObject_(Region2)
    
  EndIf
  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
EndProcedure





une fois que tu as décider de la forme de ta fenetre de base tu vas pouvoir déssiner ce que tu veux dedans (librairie 2DDrawing intergé a Purebasic )

je te poste un petit exemple de dessin ... ;)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: J'ai des Boutons

Message par Le Soldat Inconnu »

Depuis, j'ai poussé encore un peu plus loin la personnalisation car j'ai trouvé le support du PNG pour skinner une fenêtre, voir ici :
http://www.purebasic.fr/french/viewtopi ... ng#p103469
ou la pour un exemple :
http://www.purebasic.fr/french/viewtopi ... nu#p103590

Et sinon, j'ai aussi ma lib buttonImageGadgetEx qui permet de faire un bouton avec des images de ton choix. (voir mon site)

qui peut-être facilement compléter avec des dessins de formes Avec AA comme ici :
http://www.purebasic.fr/french/viewtopi ... 534#p87534
cela permet de faire des bouton avec des formes rondes ou plus tordu :)

Ainsi de suite :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

Merci le Soldat , je regarde ça demain


@MLD : je continue la demonstration


voici un code qui reprends la forme "coins arrondis"

qui ajoute 2 petites barre rouge faite maison , la couleur est modifiable facilement
qui ajoute un petit cadre fait de 4 lignes de box

qui ajoute un call back pour pas que le dessin s'efface

et qui ajoute une petite astuce pour pouvoir déplacer la fenetre
grâce au bouton gauche de la souris, que tu clique n'importe ou
sur sa surface (sauf bien sur , sur le gadget)


voila , je crois que ça réponds a ton probleme :)

ps : tu dispose de la librairie "2Ddrawing" de purebasic
pour personnaliser ton dessin sur la fenetre

après si tu veux quelque chose de plus soigné , je te conseille
d'utiliser une image ...
car là tu dessine ton skin comme tu le veux !
grace a un logiciel de dessin...

le skin n'est pas une bidouille , c'est prévu par windows
autant en profiter :)

Code : Tout sélectionner



Enumeration
  #win
  #frame
  #Quitter
EndEnumeration

Global EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
Global EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
  
  Declare  Forme(win) ; procedure qui va faire changer la forme de la fenetre
  Declare dessins(win,larg,haut) ; procedure qui dessine dans le fentre
  Declare WindowCallback(WindowID,message,wParam,lParam) ; le call back qui evite l'effacement
  
  
  
  hwnd=OpenWindow(#win, 0, 0, 400, 400,  "Test",#PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(#win)) = 0
  SetWindowCallback(@WindowCallback())  ; un callback pour que le dessin reste sur la fenetre (repaint)
  ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter")
  Frame3DGadget(#frame, 70, 70, 250, 80, "", #PB_Frame3D_Single)
  
  
  Forme(#win) ; sinon, on change la forme de la fenêtre
  dessins(#win,WindowWidth(#win), WindowHeight(#win))
  
  
  Repeat
    
    Select WaitWindowEvent()
        
      Case  #PB_Event_Gadget ; evenement gadget 
        Select EventGadget() ; boutons, zone de texte, ...
          Case #Quitter
            event = #PB_Event_CloseWindow ; On quitte 
          Default
            Forme(#win) ; sinon, on change la forme de la fenêtre
            dessins(#win,WindowWidth(#win), WindowHeight(#win))
        EndSelect
        
      Case #WM_LBUTTONDOWN ; on recupere l'evenement d'un click souris gauche
        SendMessage_(WindowID(#win), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) ; ceci fait suivre la fenetre avec la souris
      Case #WM_LBUTTONUP ; on a relaché le bouton souris
        Debug "clic"
    EndSelect
    
  Until event =#PB_Event_CloseWindow 
  
  End
  
  
  Procedure Forme(win) ; procedure qui change la forme de la fenetre
    Region = CreateRoundRectRgn_(0, 0, WindowWidth(win), WindowHeight(win), 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(win), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
  EndProcedure
  
  Procedure dessins(win,larg,haut) ; Procedure qui va dessiner un skin ici 2 lignes rouge
    
    
    StartDrawing( WindowOutput(win)) ; on commence le dessin
      
      
      ; ********** dessin des ligne rouge ************************
      For x=0 To larg Step 4 
        Circle(x, 2, 4 ,RGB(255,10,10))  ; dessin des lignes rouge
        Circle(x, 20, 4 ,RGB(255,10,10)) 
      Next x
      ; *********************************************************
      
      ; ************* dessin du texte *********************************************
      Resultat = DrawText(20, 200, "voici une fenetre skinné avec en plus du text de couleur", RGB(0,0,255),RGB(154,154,154) ) ; text bleu
      Resultat = DrawText(20, 250, "Note que tu peux bouger la fenetre avec le bouton gauche", RGB(0,70,30),RGB(154,154,154) ) ; text bleu
      ; ************************************************************************
      
      ; *********************dessin du cadre autour du bouton *************************
      Box(95, 90, 210, 5, RGB(250,50,255))
      Box(95, 125, 210, 5, RGB(250,50,255))
      
      Box(95, 95, 5, 30, RGB(250,50,255))
      Box(301, 95, 5, 30, RGB(250,50,255))
      ; ****************************************************************************
      
      ; ************* colorisation du frame3D **********************************************
      x_win =WindowX(win)
      y_win=WindowY(win)
      If x_win >=0 And x_win<=EcranX And y_win>=0 And y_win<=EcranY
        FillArea(70, 70, -1,RGB($23,$8B,$5)) ; couleur FRAME coin haut gauche 
        FillArea(70, 149, -1,RGB($33,$CB,$7)) ; couleur FRAME coin bas droit
         FillArea(75, 130, -1,RGB($18,$D1,$B6)) ; couleur FRAME fond
        
      EndIf
      ; ************************************************************************************
      
    StopDrawing()
    
  EndProcedure
  
  
  Procedure WindowCallback(WindowID,message,wParam,lParam)
    res=#PB_ProcessPureBasicEvents
    Select message 
      Case #WM_PAINT
        Forme(win) ; sinon, on change la forme de la fenêtre
        dessins(win,WindowWidth(win), WindowHeight(win))
      Case #WM_MOVE
        dessins(win,WindowWidth(win), WindowHeight(win))
    EndSelect
    ProcedureReturn res
  EndProcedure 
  
  
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: J'ai des Boutons

Message par MLD »

Bonjour
Merci LSI et Dobro
Vos codes sont super, mais ce sont soit des fenêtres modifiées, soit un skin sur une fenêtre. :D
Mais nous sommes un peu a coté du sujet. :|
Le sujet : Réaliser un "pseudo gadget" Frame3D comme celui de PB, mais avec la possibilité de choisir
1° La couleur du texte (facile)
2° La couleur sous le texte (facile)
3° La couleur des traits du cadre (trés difficile)
4° possibilité de remplir ou non l'intérieur avec la couleur de son choix
Ceci a l'intérieur d'une fenêtre
Si quelqu'un a la solution, peut-être que Fred en fera un "vrai" gadget en remplacement de l'actuel?? :wink:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: J'ai des Boutons

Message par Le Soldat Inconnu »

c'est super facile à faire :)

regarde :
PB4.40 obligatoire par contre, j'ai besoin de supporter la couche alpha des images (c'est trop bien ça :) )

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.40
;
; Explication du programme :
; Frame3D personnalisé

Procedure.l LoadWindowFont(Bold = -1, Italic = -1, UnderLine = -1, Size.f = -1)
  Protected ncm.NONCLIENTMETRICS
  ncm\cbSize = SizeOf(NONCLIENTMETRICS)
  SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, SizeOf(NONCLIENTMETRICS), @ncm, 0)
  If Bold = 0
    ncm\lfMessageFont\lfWeight = 0
	ElseIf Bold = 1
    ncm\lfMessageFont\lfWeight = 700
	EndIf
  If Italic = 0
    ncm\lfMessageFont\lfItalic = 0
	ElseIf Italic = 1
    ncm\lfMessageFont\lfItalic = 1
	EndIf
  If UnderLine = 0
    ncm\lfMessageFont\lfUnderline = 0
	ElseIf UnderLine = 1
    ncm\lfMessageFont\lfUnderline = 1
	EndIf
  If Size > 0
    ncm\lfMessageFont\lfheight * Size
	EndIf
  
  ProcedureReturn CreateFontIndirect_(@ncm\lfMessageFont)
EndProcedure
Procedure CircleAA(x, y, Radius, Color, Thickness = 1, Mode = #PB_2DDrawing_Default)
  Protected n, nn, Distance.f, Application.f, Couleur_Fond.l
  If Mode & #PB_2DDrawing_Outlined ; Cercle vide
    ; on dessine 1/4 du cercle et on duplique pour le reste
    For n = 0 To Radius
      For nn = 0 To Radius
        Distance.f = Sqr(n * n + nn * nn)
        If Distance <= Radius And Distance > Radius - 1
          Application.f = 1 - Abs(Radius - 1 - Distance)
          Alpha = 255 * Application
					Plot(x + n, y + nn, Color | Alpha << 24)
					Plot(x - n, y + nn, Color | Alpha << 24)
					Plot(x + n, y - nn, Color | Alpha << 24)
					Plot(x - n, y - nn, Color | Alpha << 24)
				ElseIf Distance <= Radius - Thickness And Distance > Radius - Thickness - 1
          Application.f = 1 - Abs(Radius - Thickness - Distance)
          Alpha = 255 * Application
					Plot(x + n, y + nn, Color | Alpha << 24)
					Plot(x - n, y + nn, Color | Alpha << 24)
					Plot(x + n, y - nn, Color | Alpha << 24)
					Plot(x - n, y - nn, Color | Alpha << 24)
				ElseIf Distance <= Radius - 1 And Distance > Radius - Thickness
          Plot(x + n, y + nn, Color | $FF000000)
          Plot(x - n, y + nn, Color | $FF000000)
          Plot(x + n, y - nn, Color | $FF000000)
          Plot(x - n, y - nn, Color | $FF000000)
				EndIf
			Next
		Next
	Else ; Cercle plein
    ; on dessine 1/4 du cercle et on duplique pour le reste
    For n = 0 To Radius
      For nn = 0 To Radius
        Distance.f = Sqr(n * n + nn * nn)
        If Distance <= Radius And Distance > Radius - 1
          Application.f = (Radius - Distance)
          Alpha = 255 * Application
					Plot(x + n, y + nn, Color | Alpha << 24)
					Plot(x - n, y + nn, Color | Alpha << 24)
					Plot(x + n, y - nn, Color | Alpha << 24)
					Plot(x - n, y - nn, Color | Alpha << 24)
				ElseIf Distance <= Radius - 1
          Plot(x + n, y + nn, Color | $FF000000)
          Plot(x - n, y + nn, Color | $FF000000)
          Plot(x + n, y - nn, Color | $FF000000)
          Plot(x - n, y - nn, Color | $FF000000)
				EndIf
			Next
		Next
	EndIf
EndProcedure

Procedure Frame3DGadgetEx(Gadget, x, y, Width, Height, Text.s, FontID.l = 0, BorderColor.l = -1, BackColor.l = -1)
	Protected Retour.l, Image.l, Image_G.l, Image_D.l, Image_H.l, Image_B.l, WindowsFont.l
	
	#Frame3DGadgetEx_Border = 16
	#Frame3DGadgetEx_Round = 16
	#Frame3DGadgetEx_TextBorder = 4
	
	If BorderColor = -1
		BorderColor = $000000
	EndIf
	
	Image = CreateImage(#PB_Any, Width, Height, 32)
	StartDrawing(ImageOutput(Image))
		; Fond totalement transparent
		DrawingMode(#PB_2DDrawing_AlphaChannel)
		Box(0, 0, Width, Height, 0)
		DrawingMode(#PB_2DDrawing_AlphaBlend)
		If BackColor >= 0
			; Dessin des angles arrondis du fond
			CircleAA(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Round - 1, BackColor)
			CircleAA(Width - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Round - 1, BackColor)
			CircleAA(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, Height - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Round - 1, BackColor)
			CircleAA(Width - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, Height - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Round - 1, BackColor)
		EndIf
		; Dessin des angles arrondis du Frame3D
		CircleAA(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Round - 1, BorderColor, 2, #PB_2DDrawing_Outlined)
		CircleAA(Width - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, #Frame3DGadgetEx_Round - 1, BorderColor, 2, #PB_2DDrawing_Outlined)
		CircleAA(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round - 1, Height - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Round - 1, BorderColor, 2, #PB_2DDrawing_Outlined)
		CircleAA(Width - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, Height - #Frame3DGadgetEx_Border / 2 - #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Round - 1, BorderColor, 2, #PB_2DDrawing_Outlined)
		If BackColor >= 0
			; Dessin des bords du fond
			Box(#Frame3DGadgetEx_Border / 2 + 1, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, Width - 2 - #Frame3DGadgetEx_Border, Height - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, BackColor | $FF000000)
			Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Border / 2 + 1, Width - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, Height - 2 - #Frame3DGadgetEx_Border, BackColor | $FF000000)
		Else
			; Ou si il n'y a pas de fond, on efface les parties qui ne doivent pas être dessinées (on dessine un cercle complet pour les angles donc il faut effacer pour avoir des quart de cercle)
			DrawingMode(#PB_2DDrawing_AlphaChannel)
			Box(#Frame3DGadgetEx_Border / 2 + 1, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, Width - 2 - #Frame3DGadgetEx_Border, Height - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, $00000000)
			Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Border / 2 + 1, Width - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, Height - 2 - #Frame3DGadgetEx_Border, $00000000)
			DrawingMode(#PB_2DDrawing_AlphaBlend)
		EndIf
		; Dessin des bords du Frame3D
		Box(#Frame3DGadgetEx_Border / 2 + 1, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, 2, Height - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, BorderColor | $FF000000)
		Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, #Frame3DGadgetEx_Border / 2 + 1, Width - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, 2, BorderColor | $FF000000)
		Box(Width - #Frame3DGadgetEx_Border / 2 - 3, #Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, 2, Height - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, BorderColor | $FF000000)
		Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Round, Height - #Frame3DGadgetEx_Border / 2 - 3, Width - #Frame3DGadgetEx_Round * 2 - #Frame3DGadgetEx_Border, 2, BorderColor | $FF000000)
		
		; Chargement de la police
		If Font
			DrawingFont(FontID)
		Else
			WindowsFont = LoadWindowFont()
			DrawingFont(WindowsFont)
		EndIf
		
		; On dessine l'espace pour la police
		DrawingMode(#PB_2DDrawing_AlphaChannel)
		Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border / 2 + 1, TextWidth(Text) + #Frame3DGadgetEx_TextBorder * 2, 2, $00000000)
		If BackColor >= 0
			Box(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border / 2 + 3, TextWidth(Text) + #Frame3DGadgetEx_TextBorder * 2, #Frame3DGadgetEx_Border, BackColor | $FF000000)
		EndIf
		
		; Dessin du titre du Frame3D
		DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
		DrawText(#Frame3DGadgetEx_Border / 2 + #Frame3DGadgetEx_Border + #Frame3DGadgetEx_TextBorder, (#Frame3DGadgetEx_Border - TextHeight(Text)) / 2, Text, BorderColor | $FF000000)
		
		If WindowsFont
			DeleteObject_(WindowsFont)
		EndIf
		
	StopDrawing()
	
	Image_G = GrabImage(Image, #PB_Any, 0, 0, #Frame3DGadgetEx_Border, Height)
	ImageGadget(#PB_Any, x, y, #Frame3DGadgetEx_Border, Height, ImageID(Image_G))
	Image_D = GrabImage(Image, #PB_Any, Width - #Frame3DGadgetEx_Border, 0, #Frame3DGadgetEx_Border, Height)
	ImageGadget(#PB_Any, x + Width - #Frame3DGadgetEx_Border, y, #Frame3DGadgetEx_Border, Height, ImageID(Image_D))
	Image_H = GrabImage(Image, #PB_Any, #Frame3DGadgetEx_Border, 0, Width - 2 * #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border)
	ImageGadget(#PB_Any, x + #Frame3DGadgetEx_Border, y, Width - 2 * #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border, ImageID(Image_H))
	Image_B = GrabImage(Image, #PB_Any, #Frame3DGadgetEx_Border, Height - #Frame3DGadgetEx_Border, Width - 2 * #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border)
	ImageGadget(#PB_Any, x + #Frame3DGadgetEx_Border, y + Height - #Frame3DGadgetEx_Border, Width - 2 * #Frame3DGadgetEx_Border, #Frame3DGadgetEx_Border, ImageID(Image_B))
	
	Retour = ContainerGadget(Gadget, x + #Frame3DGadgetEx_Border, y + #Frame3DGadgetEx_Border, Width - 2 * #Frame3DGadgetEx_Border, Height - 2 * #Frame3DGadgetEx_Border, #PB_Container_BorderLess)
		If Gadget = #PB_Any
			Gadget = Retour
		EndIf
		If BackColor >= 0
			SetGadgetColor(Gadget, #PB_Gadget_BackColor, BackColor)
		EndIf
	CloseGadgetList()
	
	ProcedureReturn Retour
EndProcedure


; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
  End
EndIf

Gadget = Frame3DGadgetEx(#PB_Any, 10, 10, 200, 200, "Frame3D", 0, $00A0FF, $FFFFFF)

; On met un bouton dans le frame
OpenGadgetList(Gadget)
	ButtonGadget(1, 10, 10, 100, 30, "Button")
CloseGadgetList()

LoadFont(0, "Verdana", 9, #PB_Font_Bold)

Frame3DGadgetEx(10, 10, 220, 280, 60, "No background", FontID(0), $00A0FF)


Repeat
  Event = WaitWindowEvent()
  
  Select Event
		Case #PB_Event_Menu
      Select EventMenu() ; Menus
          
			EndSelect
      
		Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
          
			EndSelect
	EndSelect
  
Until Event = #PB_Event_CloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

.....................
Dernière modification par Backup le sam. 19/mars/2011 18:16, modifié 1 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: J'ai des Boutons

Message par Le Soldat Inconnu »

Dobro, ton code ne marche pas chez moi, ca clignote quand je bouge la souris, le bouton est rarement visible et je ne vois pas de frame (parfois un trait rouge qui passe)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: J'ai des Boutons

Message par MLD »

OK LSI. je m'incline humblement. Tu es trés fort. 8O
Ce serait bien d'en faire un gadget bintégré a PB. :lol:
Dobro ton code a un problème chez moi?
Le but de mes propos, est d'incité, les programeurs en PB, de faire avancé les possibilité de merveilleux programme.
Les gadgets n'ons pas beaucoup évolués, contrairement au fond du programme lui-même. Mais si l'on veut que la communauté PB s'élargisse il faut aussi s'occuper de se qui se voit. :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

ha oui !!

je viens de tester sur ma tour , effectivement ça deconne grave !

question ? pourquoi ce code marche parfaitement sur mon netbook ? 8O
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

le code est corrigé et fonctionne sur ma tour :)
(purebasic V 4.31)

j'en ai profité pour ajouter la couleur du fond

cette méthode a l'avantage de pouvoir colorer tout ce qu'on veux
il suffit de mettre le pinceau au bon endroit ;)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: J'ai des Boutons

Message par MLD »

Super Dobro ca marche :lol:
Pour te taquiner un peu le Frame avec les coins arrondis SVP :roll:
J'imagine que vous avez compris ma démarche :?:
Pour toi Dobro, une retraite de PB?? Domage! J'aime bien te lire, tes codes, et surtout tes coups de gueule
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: J'ai des Boutons

Message par Backup »

MLD a écrit :Super Dobro ca marche :lol:
Pour te taquiner un peu le Frame avec les coins arrondis SVP :roll:
c'est vrais que la methode que je propose , n'offre pas les coins arrondis
mais.....
tu as pus voir que j'utilisais la librairie 2Drawing de Purebasic
et du coup tout est possible puisque graphiquement parlant on peut déssiner tout ce qu'on veux .
meme un rectangle a coins arrondis ;)

maintenant pour ce qui concerne les Frames gadget , la Methode
du Soldat est surement mieux adapté :)

moi je propose juste une façon de coloriser un endroit ou un autre d'une fenetre, et c'est tout :)

Pour toi Dobro, une retraite de PB??
oui je ne trouve plus trop de plaisir a la prog
je repasse en phase "musical" (2 passions , Guitare et informatique)
je continurai de programmer pour moi,
mais j'aurai surement moins de temps pour ça donc ...

une retraite c'est un peu ça , on arrete un boulot pour finalement
etre encore plus occupé ailleurs ;)
un ordinateur c'est chronophage , est j'ai de plus en plus envie de profiter de mon temps :)

je continurai a venir ici , mais je ne posterai plus de code :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: J'ai des Boutons

Message par Kwai chang caine »

je continurai a venir ici
Je crois que c'est ce que tout le monde attendait de t'entendre dire 8)
Apres tout...meme si tu as la chance et le bonheur de découvrir une nouvelle famille...oublie pas l'ancienne :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Noos88
Messages : 59
Inscription : lun. 14/juin/2010 19:16
Localisation : Belrupt (Vosges)

Re: J'ai des Boutons

Message par Noos88 »

Bonjour a tous, pour le premier exemple de MLD, je vous es fait un petit explorateur d'icone car il n'ai pas évident de savoir quel numéro vas avec quelle icone (ça peut servir)

Code : Tout sélectionner

Enumeration
  #Window_0

EndEnumeration

  If OpenWindow(#Window_0, 0, 0, 600, 400, "Liste des Icones",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

   IconFile = ListIconGadget(#PB_Any, 5, 5, 590, 390, "Icône", 100, #PB_ListIcon_AlwaysShowSelection)
   SetGadgetAttribute(IconFile, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
   
While ExtractIcon_(0,"Shell32.dll", Icone)
 Icone=Icone+1
  AddGadgetItem(IconFile, 0, "Icône n°"+Str(Icone),ExtractIcon_(0,"Shell32.dll", Icone))
  SetGadgetState(IconFile, 0)
Wend
   
   
   Repeat 
      Event = WaitWindowEvent() 
        If Event = #PB_Event_Gadget
                                
         EndIf
      
    Until Event  = #PB_Event_CloseWindow 
EndIf 
 End 
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: J'ai des Boutons

Message par MLD »

@Noos88

Bonjour
Sympa ton code :D
Abuse pas trop des bulles le 31 :mrgreen:
Bonne fin d'année :lol:
Michel
Répondre