Fenêtre avec une forme bizarre basée sur une image

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

un petit peu de temps, voilà la source :

Code : Tout sélectionner

Procedure.l GetImageBits2(ImageID, HList) ; Transfert d'une image vers un tableau
  Protected bmi.BITMAPINFO, hdc.l, Resultat, Mem, n, nn, bm.BITMAP, Temp1, Temp2, Temp3, Temp4
  
  Resultat = 0
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth = bm\bmWidth
  bmi\bmiHeader\biHeight = bm\bmHeight
  bmi\bmiHeader\biPlanes = 1
  bmi\bmiHeader\biBitCount = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
  If Mem
    
    hdc = CreateCompatibleDC_(GetDC_(ImageID))
    If hdc
      GetDIBits_(hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
      DeleteDC_(hdc)
      Resultat = ImageID
    EndIf
    
    ; On convertit la liste dans le bon format
    Temp1 = bm\bmHeight - 1
    Temp2 = bm\bmWidth - 1
    For nn = 0 To Temp2
      For n = 0 To Temp1
        Temp3 = Mem + (nn + (Temp1 - n) * bm\bmWidth) * 4
        PokeB(HList + 2, PeekB(Temp3))
        PokeB(HList + 1, PeekB(Temp3 + 1))
        PokeB(HList, PeekB(Temp3 + 2))
        HList + 4
      Next
    Next
    
    FreeMemory(Mem)
  EndIf
  
  ProcedureReturn Resultat
EndProcedure

Procedure SkinWindow2(Window, Image) ; Mettre une forme sur une fenêtre a partir d'une image
  Protected Region_Temp, Region_Totale, Largeur, Hauteur
  ; On applique le skin à la fenêtre
  Largeur = ImageWidth(Image) - 1
  Hauteur = ImageHeight(Image) - 1
  Region_Totale = CreateRectRgn_(0, 0, Largeur + 1, Hauteur + 1) ; on crée une region de la taille de la fenêtre
  Dim Region_Image.l(Largeur, Hauteur)
  GetImageBits2(ImageID(Image), @Region_Image())
  For X1 = 0 To Largeur
    For Y1 = 0 To Hauteur
      If Region_Image(X1, Y1) = $FF00FF
        Y2 = Y1
        While X2 < Largeur And Region_Image(X1, Y2 + 1) = $FF00FF
          Y2 + 1
        Wend
        Region_Temp = CreateRectRgn_(X1, Y1, X1 + 1, Y2 + 1) ; On retire le point de la region
        CombineRgn_(Region_Totale, Region_Totale, Region_Temp, #RGN_DIFF)
        DeleteObject_(Region_Temp)
        Y1 = Y2
      EndIf
    Next
  Next
  SetWindowRgn_(WindowID(Window), Region_Totale, 1) ; On applique la region
  DeleteObject_(Region_Totale) ; On efface la region
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Skin", #PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf
; La fenêtre doit obligatoirement être avec le style #PB_Window_BorderLess

SetWindowColor(0, RGB(255, 0, 0))


; On crée une image qui va servir de skin (elle doit avoir la taille de la fenêtre)
CreateImage(0, 300, 300)
StartDrawing(ImageOutput(0))
  ; La couleur mauve $FF00FF ou RGB(255, 0, 255) représente la partie transparente de la fenêtre
  Box(250, 0, 50, 30, $FF00FF)
  Circle(200, 200, 50, $FF00FF)
  Circle(250, 230, 50, $FF00FF)
  Ellipse(50, 120, 40, 20, $FF00FF)
  LineXY(50, 50, 250, 100, $FF00FF)
StopDrawing()

Temps = ElapsedMilliseconds()

SkinWindow2(0, 0)

Temps = ElapsedMilliseconds() - Temps

; On place un bouton pour quitter
ButtonGadget(0, 0, 0, 100, 25, "Quitter")
; On affichage le temps nécesssaire pour créer le masque
TextGadget(#PB_Any, 0, 25, 100, 15, Str(Temps) + " ms")

Repeat
  Event = WaitWindowEvent()
  
  If Event = #WM_LBUTTONDOWN
    SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  EndIf
  
  If Event = #PB_Event_Gadget
    Select EventGadget() ; boutons, zone de texte, ...
      Case 0 ; On quitte le programme
        Event = #PB_Event_CloseWindow
    EndSelect
  EndIf
  
Until Event = #PB_Event_CloseWindow

End
La fonction GetImageBits permet de transformer une image sous forme de tableau. on peut ainsi y accéder nettement plus rapidement pour lire les couleurs et savoir si elle est mauve ou non.
En groupant les procedures GetImageBit et SkinWindow, on doit pouvoir aller encore plus vite car cela supprimerait toute la partie de conversion de l'image pour la rendre facilement exploitable. on doit pouvoir gagner encore 30% je pense.
Je suis dessus.
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)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Allez, finit, cela donne encore un gain de 40-50% sur mon exemple, c'est plutot bien en fait :)

voila le final :

Code : Tout sélectionner

Procedure.l SkinWindow2(WindowID, ImageID, Couleur) ; Transfert d'une image vers un tableau
  Protected bmi.BITMAPINFO
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP)
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth = bm\bmWidth
  bmi\bmiHeader\biHeight = bm\bmHeight
  bmi\bmiHeader\biPlanes = 1
  bmi\bmiHeader\biBitCount = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  
  Couleur = ((Couleur & $0000FF) << 16) | (Couleur & $00FF00) | ((Couleur & $FF0000) >> 16)
  
  Region_Totale = CreateRectRgn_(0, 0, bm\bmWidth, bm\bmHeight)
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4)
  If Mem
    
    hdc = CreateCompatibleDC_(GetDC_(ImageID))
    If hdc
      GetDIBits_(hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image
      DeleteDC_(hdc)
    EndIf
    
    ; On convertit la liste dans le bon format
    Largeur = bm\bmWidth - 1
    Hauteur = bm\bmHeight - 1
    Point = Mem
    For Y1 = 0 To Hauteur
      For X1 = 0 To Largeur
        ; Temp3 = Mem + (nn + (Temp1 - n) * bm\bmWidth) * 4
        ; PokeB(HList + 2, PeekB(Temp3))
        ; PokeB(HList + 1, PeekB(Temp3 + 1))
        ; PokeB(HList, PeekB(Temp3 + 2))
        ; HList + 4
        If PeekL(Point) = Couleur
          X2 = X1
          While X2 < Largeur And PeekL(Point + 4) = Couleur
            X2 + 1
            Point + 4
          Wend
          Region_Temp = CreateRectRgn_(X1, Hauteur - Y1, X2 + 1, Hauteur - Y1 + 1) ; On retire le point de la region
          CombineRgn_(Region_Totale, Region_Totale, Region_Temp, #RGN_DIFF)
          DeleteObject_(Region_Temp)
          X1 = X2
        EndIf
        Point + 4
      Next
    Next
    
    FreeMemory(Mem)
  EndIf
  
  SetWindowRgn_(WindowID, Region_Totale, 1) ; On applique la region
  DeleteObject_(Region_Totale) ; On efface la region
  
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Skin", #PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf
; La fenêtre doit obligatoirement être avec le style #PB_Window_BorderLess

SetWindowColor(0, RGB(255, 0, 0))


; On crée une image qui va servir de skin (elle doit avoir la taille de la fenêtre)
CreateImage(0, 300, 300)
StartDrawing(ImageOutput(0))
  ; La couleur mauve $FF00FF ou RGB(255, 0, 255) représente la partie transparente de la fenêtre
  Box(250, 0, 50, 30, $FF)
  Circle(200, 200, 50, $FF)
  Circle(250, 230, 50, $FF)
  Ellipse(50, 120, 40, 20, $FF)
  LineXY(50, 50, 250, 100, $FF)
StopDrawing()

Temps = ElapsedMilliseconds()

SkinWindow2(WindowID(0), ImageID(0), $FF)

Temps = ElapsedMilliseconds() - Temps

; On place un bouton pour quitter
ButtonGadget(0, 0, 0, 100, 25, "Quitter")
; On affichage le temps nécesssaire pour créer le masque
TextGadget(#PB_Any, 0, 25, 100, 15, Str(Temps) + " ms")

Repeat
  Event = WaitWindowEvent()
  
  If Event = #WM_LBUTTONDOWN
    SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  EndIf
  
  If Event = #PB_Event_Gadget
    Select EventGadget() ; boutons, zone de texte, ...
      Case 0 ; On quitte le programme
        Event = #PB_Event_CloseWindow
    EndSelect
  EndIf
  
Until Event = #PB_Event_CloseWindow

End
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)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

J'ai mis la librairie a jour sur mon site, attention, les paramètres de la fonction ont changée, voir l'exemple :wink:
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)]
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Les sources sont vraiment interessantes, merci beaucoup.
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour

Joli code soldat inconnu, bravo, ça fait rever.

J'aurais une question à poser, comment faut il faire pour creer un menu contextuel sur cette fenetre, j'ai éssayé les methode traditionnelle et ça ne marche pas. :(

Le menu barre de titre marche mais pas le menu contextuel.

Aurais je fais une fausse manoeuvre :oops:

Merci de vos reponses

Bonne journées à tous
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

bonjour Kwai chang caine,

je ne sait pas si tu a fait une erreur mais moi pour cree un menu dans cette fenetre je ferai comme ce-ci

Code : Tout sélectionner

Procedure.l SkinWindow2(WindowID, ImageID, Couleur) ; Transfert d'une image vers un tableau 
  Protected bmi.BITMAPINFO 
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP) 
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER) 
  bmi\bmiHeader\biWidth = bm\bmWidth 
  bmi\bmiHeader\biHeight = bm\bmHeight 
  bmi\bmiHeader\biPlanes = 1 
  bmi\bmiHeader\biBitCount = 32 
  bmi\bmiHeader\biCompression = #BI_RGB 
  
  Couleur = ((Couleur & $0000FF) << 16) | (Couleur & $00FF00) | ((Couleur & $FF0000) >> 16) 
  
  Region_Totale = CreateRectRgn_(0, 0, bm\bmWidth, bm\bmHeight) 
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4) 
  If Mem 
    
    hdc = CreateCompatibleDC_(GetDC_(ImageID)) 
    If hdc 
      GetDIBits_(hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image 
      DeleteDC_(hdc) 
    EndIf 
    
    ; On convertit la liste dans le bon format 
    Largeur = bm\bmWidth - 1 
    Hauteur = bm\bmHeight - 1 
    Point = Mem 
    For Y1 = 0 To Hauteur 
      For X1 = 0 To Largeur 
        ; Temp3 = Mem + (nn + (Temp1 - n) * bm\bmWidth) * 4 
        ; PokeB(HList + 2, PeekB(Temp3)) 
        ; PokeB(HList + 1, PeekB(Temp3 + 1)) 
        ; PokeB(HList, PeekB(Temp3 + 2)) 
        ; HList + 4 
        If PeekL(Point) = Couleur 
          X2 = X1 
          While X2 < Largeur And PeekL(Point + 4) = Couleur 
            X2 + 1 
            Point + 4 
          Wend 
          Region_Temp = CreateRectRgn_(X1, Hauteur - Y1, X2 + 1, Hauteur - Y1 + 1) ; On retire le point de la region 
          CombineRgn_(Region_Totale, Region_Totale, Region_Temp, #RGN_DIFF) 
          DeleteObject_(Region_Temp) 
          X1 = X2 
        EndIf 
        Point + 4 
      Next 
    Next 
    
    FreeMemory(Mem) 
  EndIf 
  
  SetWindowRgn_(WindowID, Region_Totale, 1) ; On applique la region 
  DeleteObject_(Region_Totale) ; On efface la region 
  
EndProcedure 

; Création de la fenêtre et de la GadgetList 
If OpenWindow(0, 0, 0, 300, 300, "Skin", #PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(0)) = 0 
  End 
EndIf 
; La fenêtre doit obligatoirement être avec le style #PB_Window_BorderLess 

SetWindowColor(0, RGB(255, 0, 0)) 


; On crée une image qui va servir de skin (elle doit avoir la taille de la fenêtre) 
CreateImage(0, 300, 300) 
StartDrawing(ImageOutput(0)) 
  ; La couleur mauve $FF00FF ou RGB(255, 0, 255) représente la partie transparente de la fenêtre 
  Box(250, 0, 50, 30, $FF) 
  Circle(200, 200, 50, $FF) 
  Circle(250, 230, 50, $FF) 
  Ellipse(50, 120, 40, 20, $FF) 
  LineXY(50, 50, 250, 100, $FF) 
StopDrawing() 

Temps = ElapsedMilliseconds() 

SkinWindow2(WindowID(0), ImageID(0), $FF) 

Temps = ElapsedMilliseconds() - Temps 

;-------------------------------------------on cree le menu ici----------------------------
If CreateMenu(0, WindowID(0))   
      MenuTitle("fichier")
        MenuItem(1, "quitter")
      MenuTitle("edition")
        MenuItem(2, "etc...")
    EndIf
;-----------------------------------------fin du menu--------------------------------------
 
; On affichage le temps nécesssaire pour créer le masque 
TextGadget(#PB_Any, 0, 25, 100, 15, Str(Temps) + " ms") 

Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #WM_LBUTTONDOWN 
    SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
  EndIf 

;-----------------------------on active les fonction du menu ici---------------------------
    If Event = #PB_Event_Menu 
      Select EventMenu()
    
       Case 1
        End
      
     EndSelect
    EndIf
;------------------------------------on l'arrete ici---------------------------------------
  Until EventID = #PB_Event_CloseWindow
End 
voila dit moi si sa te va. bon c'est pas trop commenter mais bon :)


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour venom

Je te remercie beaucoup de m'avoir répondu. 8)

Pour le menu tout simple, j'y etait arrivé par contre je demandais pour le menu contextuel, tu sais celui que l'on obtient en cliquant droit et qui apparait ou est le pointeur de la souris.

Quoi qu'il en soit ton aide m'a aidé. :P

Je me suis permis de rajouter les commandes menu contextuel et cette fois ça marche.
Apres les lignes de menu + dans la detection des evenements, le clic droit (J'ai rajouté en face ; Rajouté par Kwai) :wink:

Je ne comprend pas, j'avais fait la meme chose hier et ça ne marchait pas ?? C'etait sur une autre machine, mais ça reste bizzare quand meme.... 8O

Voila, si c'est ce qu'il fallait faire, tant mieux.
Si par contre tu connais une meilleure solution n'hésite pas, on est ici pour apprendre et moi j'en ai grand besoin :P

Code : Tout sélectionner

Procedure.l SkinWindow2(WindowID, ImageID, Couleur) ; Transfert d'une image vers un tableau 
  Protected bmi.BITMAPINFO 
  
  GetObject_(ImageID, SizeOf(BITMAP), @bm.BITMAP) 
  
  bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER) 
  bmi\bmiHeader\biWidth = bm\bmWidth 
  bmi\bmiHeader\biHeight = bm\bmHeight 
  bmi\bmiHeader\biPlanes = 1 
  bmi\bmiHeader\biBitCount = 32 
  bmi\bmiHeader\biCompression = #BI_RGB 
  
  Couleur = ((Couleur & $0000FF) << 16) | (Couleur & $00FF00) | ((Couleur & $FF0000) >> 16) 
  
  Region_Totale = CreateRectRgn_(0, 0, bm\bmWidth, bm\bmHeight) 
  
  Mem = AllocateMemory(bm\bmWidth * bm\bmHeight * 4) 
  If Mem 
    
    hdc = CreateCompatibleDC_(GetDC_(ImageID)) 
    If hdc 
      GetDIBits_(hdc, ImageID, 0, bm\bmHeight, Mem, @bmi, #DIB_RGB_COLORS) ; on envoie la liste dans l'image 
      DeleteDC_(hdc) 
    EndIf 
    
    ; On convertit la liste dans le bon format 
    Largeur = bm\bmWidth - 1 
    Hauteur = bm\bmHeight - 1 
    Point = Mem 
    For Y1 = 0 To Hauteur 
      For X1 = 0 To Largeur 
        ; Temp3 = Mem + (nn + (Temp1 - n) * bm\bmWidth) * 4 
        ; PokeB(HList + 2, PeekB(Temp3)) 
        ; PokeB(HList + 1, PeekB(Temp3 + 1)) 
        ; PokeB(HList, PeekB(Temp3 + 2)) 
        ; HList + 4 
        If PeekL(Point) = Couleur 
          X2 = X1 
          While X2 < Largeur And PeekL(Point + 4) = Couleur 
            X2 + 1 
            Point + 4 
          Wend 
          Region_Temp = CreateRectRgn_(X1, Hauteur - Y1, X2 + 1, Hauteur - Y1 + 1) ; On retire le point de la region 
          CombineRgn_(Region_Totale, Region_Totale, Region_Temp, #RGN_DIFF) 
          DeleteObject_(Region_Temp) 
          X1 = X2 
        EndIf 
        Point + 4 
      Next 
    Next 
    
    FreeMemory(Mem) 
  EndIf 
  
  SetWindowRgn_(WindowID, Region_Totale, 1) ; On applique la region 
  DeleteObject_(Region_Totale) ; On efface la region 
  
EndProcedure 

; Création de la fenêtre et de la GadgetList 
If OpenWindow(0, 0, 0, 300, 300, "Skin", #PB_Window_BorderLess | #PB_Window_ScreenCentered) = 0 Or CreateGadgetList(WindowID(0)) = 0 
  End 
EndIf 
; La fenêtre doit obligatoirement être avec le style #PB_Window_BorderLess 

SetWindowColor(0, RGB(255, 0, 0)) 


; On crée une image qui va servir de skin (elle doit avoir la taille de la fenêtre) 
CreateImage(0, 300, 300) 
StartDrawing(ImageOutput(0)) 
  ; La couleur mauve $FF00FF ou RGB(255, 0, 255) représente la partie transparente de la fenêtre 
  Box(250, 0, 50, 30, $FF) 
  Circle(200, 200, 50, $FF) 
  Circle(250, 230, 50, $FF) 
  Ellipse(50, 120, 40, 20, $FF) 
  LineXY(50, 50, 250, 100, $FF) 
StopDrawing() 

Temps = ElapsedMilliseconds() 

SkinWindow2(WindowID(0), ImageID(0), $FF) 

Temps = ElapsedMilliseconds() - Temps 

;-------------------------------------------on cree le menu ici---------------------------- 
If CreateMenu(0, WindowID(0))    
 MenuTitle("fichier") 
 MenuItem(1, "quitter") 
 MenuTitle("edition") 
 MenuItem(2, "etc...") 
EndIf 
    
 ;                           MENU CONTEXTUEL
 ;                           ***************
 
 CreatePopupMenu(1001)  ; Rajouté par Kwai
 MenuItem(1002, "Fichier") ; Rajouté par Kwai
 MenuItem(1003, "Ouvrir") ; Rajouté par Kwai
 MenuItem(1004, "Quitter")   ; Rajouté par Kwai

;-----------------------------------------fin du menu-------------------------------------- 
  
; On affichage le temps nécesssaire pour créer le masque 
TextGadget(#PB_Any, 0, 25, 100, 15, Str(Temps) + " ms") 

Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #WM_LBUTTONDOWN 
    SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
  EndIf 
  If Event = #WM_RBUTTONDOWN        ; Rajouté par Kwai
   DisplayPopupMenu(1001,WindowID(0))  ; Rajouté par Kwai
  EndIf 
;-----------------------------on active les fonction du menu ici--------------------------- 
    If Event = #PB_Event_Menu 
      Select EventMenu() 
       
       Case 1 
        End 
      
     EndSelect 
    EndIf 
;------------------------------------on l'arrete ici--------------------------------------- 
  Until EventID = #PB_Event_CloseWindow 
End 
Je te remercie encore de ton coup de main.
Excelente journée à toi.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

salut Kwai chang caine,

nan ton MENU CONTEXTUEL est bien placer fin moi j'aurais fait comme ce-ci

Code : Tout sélectionner

;-------------------------------------------on cree le menu ici---------------------------- 
If CreateMenu(0, WindowID(0))    
 MenuTitle("fichier") 
 MenuItem(1, "quitter") 
 MenuTitle("edition") 
 MenuItem(2, "etc...")  
    
 ;                           MENU CONTEXTUEL 
 ;                           *************** 
  
  CreatePopupMenu(1001)  ; Rajouté par Kwai 
  MenuItem(1002, "Fichier") ; Rajouté par Kwai 
  MenuItem(1003, "Ouvrir") ; Rajouté par Kwai 
  MenuItem(1004, "Quitter")   ; Rajouté par Kwai 
 EndIf

;-----------------------------------------fin du menu-------------------------------------- 
mais bon ta façon fonctionne aussi :wink: apres c'est a toi de voir avec ta magnère de coder met moi je m'arrange toujour pour metre entre

Code : Tout sélectionner

 If EndIf 
. voila pour le renseignement :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bien noté

Merci encore pour tout

Bonne journée
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

de rien c'est fait pour sa :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre