Page 1 sur 1

ResizemouseGadget

Publié : ven. 08/avr./2011 14:52
par dayvid
Bonjour !

j'ai vue que quelqu'un avais commencer un projet du genre
et j'ai regarder mais est pas compris la chose
alors je me suis dit "bha pourquoi faire simple quand on peut faire compliquer
ce qui as d'ennuyant avec les prof, c'est qu'il fond toujours compliquer"

alors je me suis dit que moi j'allais faire mieux et plus simple encore :mrgreen: *

alors je me lance dans l'arène au lion et je commence a donpter la bête
et puis comme toutes les belle histoire ont une fin "tragique ou non"
et ba je fini finalement par me faire bouffer par lme lion :roll:

en gros je me suis dit que j'étais plus malin que tous le monde mais
TRÈS GROSSE ERREUR DE MA PART :twisted:

Bha ouais, j’suis beaux moi , n’importe quoi

* je sais que je me suis largement avancer la :roll:
alors je me suis dit que moi j'allais faire mieux et plus simple encore
Oui oui je sais, je sais, j’aurais jamais du dire ou même penser ça
Mais c’est trop tard, et comme d’habe je viens pleurnicher que j’y arrive pas
C’est du n’importe quoi et je le sais bien, sa m’apprendra :roll: :oops: :cry:

Bon aller asses plaisanter pour aujourd'hui :lol:

Ya déjà eu un sujet la dessus mais personnellement j’aime pas trop le système
Qui est compliquer pour moi est il manque des carrer, normalement y’en as hui non ?

Bon je reformule le tous, est ce que une gentil âme veut bien m’aider
j'ai commencer ceci, ya que le petit carrer haut gauche du bouton qui marche plus ou moins

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration 1
  #Button_1
  #String_1
  #Liste_Icon_1
  #Option_Gadget_1
  
  #Carrer_1
  #Carrer_2
  #Carrer_3
  #Carrer_4
  #Carrer_5
  #Carrer_6
  #Carrer_7
  #Carrer_8
  
  #image_gadget_Carrer_1
  #image_gadget_Carrer_2
  #image_gadget_Carrer_3
  #image_gadget_Carrer_4
  #image_gadget_Carrer_5
  #image_gadget_Carrer_6
  #image_gadget_Carrer_7
  #image_gadget_Carrer_8 
  
  #Cursseur_normale
  #Cursseur_deplacer
  #Cursseur_fleche_diagonnale_haut_droite
  #Cursseur_fleche_diagonnale_haut_gauche
  #Cursseur_fleche_haut_et_bas
  #Cursseur_fleche_gauche_et_droite
EndEnumeration

Enumeration
  #MouseEvent_EventType_Click
  #MouseEvent_EventType_DoubleClick
  #MouseEvent_EventType_Push
  #MouseEvent_EventType_Release
  #MouseEvent_EventType_Hover
  #MouseEvent_EventType_Leave
  #MouseEvent_EventType_Drag
  #MouseEvent_EventType_DragStart
  #MouseEvent_EventType_DragStop
  #MouseEvent_EventType_Move
  #MouseEvent_EventType_WheelUp
  #MouseEvent_EventType_WheelDown
EndEnumeration

;...Load cursors
Global Cursseur_Normale = LoadCursor_(0, #IDC_ARROW)   
Global Cursseur_deplacer = LoadCursor_(0, #IDC_SIZEALL)   
Global Cursseur_fleche_diagonnale_haut_gauche = LoadCursor_(0, #IDC_SIZENESW)
Global Cursseur_fleche_diagonnale_haut_droite = LoadCursor_(0, #IDC_SIZENWSE)
Global Cursseur_fleche_gauche_et_droite = LoadCursor_(0, #IDC_SIZEWE)
Global Cursseur_fleche_haut_et_bas = LoadCursor_(0, #IDC_SIZENS)

Global EventMouse$

Global NewList ListeGadget.l()

Global Gadget
Global MouseLeft = 0

AddElement(ListeGadget())
ListeGadget() = #Button_1
AddElement(ListeGadget())
ListeGadget() = #String_1
AddElement(ListeGadget())
ListeGadget() = #Liste_Icon_1
AddElement(ListeGadget())
ListeGadget() = #Option_Gadget_1

Global convertion_nombre
    
Procedure.l convertion_positif(nombre)
  convertion_nombre = nombre - nombre - nombre
  ProcedureReturn convertion_nombre
EndProcedure
    
Procedure.l convertion_negatif(nombre)
  convertion_nombre = nombre - nombre - nombre
  ProcedureReturn convertion_nombre
EndProcedure
    
Procedure IsMouseOverGadget(Gadget, Marge) 
  If IsGadget(Gadget)
  GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
  GetCursorPos_(mouse.POINT) 
  If mouse\x>=GadgetRect\Left - Marge And mouse\x<=GadgetRect\right + Marge And mouse\y>=GadgetRect\Top - Marge And mouse\y<=GadgetRect\bottom + Marge
    ProcedureReturn #True 
  Else 
    ProcedureReturn #False 
  EndIf 
  EndIf
EndProcedure 

;{aide
;-----------------------------------------------------------Pour le clavier:---------------------------------------------------------------------------------------------------------

; Le Mode peut être entre 1 et 5, sinon si différent de 1, 2, 3, 4 ou 5,  le mode 1 sera appliquer par défaut
;
; 1 = Renvoie uniquement le nom de la touche presser (Mode par défaut)
; 2 = Renvoie le nom ainsi que le code de la touche presser
; 3 = Renvoie le nom ainsi que le code de la touche presser sous la forme Hexa
; 4 = Renvoie uniquement le code de la touche presser
; 5 = Renvoie uniquement le code de la touche presser mais sous la forme Hexa

; Syntaxe:  Touche_presser$ = GetKeyboardKeyPressed(Mode)

; La commande doit être placer a l'intérieur d'une boucle quelconque pour fonctionner correctement
; ou sinon celle-ci sera exécuter qu'une seule fois et ne renverra rien sauf si une touche est déjà enfoncer

; Normalement, toutes les touches du clavier son gérer !

;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



;---------------------------------------------------------------Pour la souris:-----------------------------------------------------------------------------------------------------
; Le Mode peut être entre 1 et 5, sinon si différent de 1, 2, 3, 4 ou 5,  le mode 1 sera appliquer par défaut
;
; 1 = Renvoie uniquement le nom du clique presser (Mode par défaut)
; 2 = Renvoie le nom ainsi que le code du clique presser
; 3 = Renvoie le nom ainsi que le code du clique presser sous la forme Hexa
; 4 = Renvoie uniquement le code du clique presser
; 5 = Renvoie uniquement le code du clique presser mais sous la forme Hexa

; Syntaxe:  Clique_Souris$ = GetMouseKeyPressed(Mode)

; La commande doit être placer a l'intérieur d'une boucle quelconque pour fonctionner correctement
; ou sinon celle-ci sera exécuter qu'une seule fois et ne renverra rien sauf si un clique est déjà enfoncer

; Normalement, la plupart des cliques de la souris son gérer, mais pas tous !
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;}

Procedure.s GetKeyboardKeyPressed(Mode)
  
  Buffer$ = ""
  
  For Touche = 0 To 254
    Cle_Touche = GetAsyncKeyState_(Touche)
    
    If Cle_Touche = - 32767
      
      Buffer$ + Str(Touche) + "|"
      
      
      If Touche > 64 And Touche < 91 ; de A à Z
        Touche$ = Chr(Touche)
        
        
      ElseIf Touche = 27
        Touche$ = "Echap"
        
        
      ElseIf Touche = 32
        Touche$ = "Espace"
        
        
      ElseIf Touche > 111 And Touche < 124 ; de F1 a F12
        Touche$ = "F" + Str(Touche - 111)
        
        
      ElseIf Touche = 44
        Touche$ = "Impr écran"
        
        
      ElseIf Touche = 45
        Touche$ = "Inser"
        
        
      ElseIf Touche = 46
        Touche$ = "Suppr"
        
        
      ElseIf Touche = 36
        Touche$ = "Flèche diagonnale haut gauche"
        
        
      ElseIf Touche = 35
        Touche$ = "Fin"
        
        
      ElseIf Touche = 19
        Touche$ = "Pause-Attn"
        
        
      ElseIf Touche = 145
        Touche$ = "Arrêt Défil"
        
        
      ElseIf Touche > 47 And Touche < 58 ; de 0 à 9
        Touche$ = Str(Touche - 48)
        
        
      ElseIf Touche > 95 And Touche < 106 ; pad numérique de 0 à 9
        Touche$ = "Pad " + Str(Touche - 96)
        
        
      ElseIf Touche = 222
        Touche$ = "²"
        
        
      ElseIf Touche = 219
        Touche$ = ")"
        
        
      ElseIf Touche = 187
        Touche$ = "="
        
        
      ElseIf Touche = 8
        Touche$ = "Retour arrière"
        
        
      ElseIf Touche = 9
        Touche$ = "Tabulation Horizontal"
        
        
      ElseIf Touche = 20
        Touche$ = "Majuscule Cadena"
        
        
      ElseIf Touche = 160
        Touche$ = "Majuscule flèche gauche"
        
        
      ElseIf Touche = 162
        Touche$ = "Ctrl gauche"
        
      ElseIf Touche = 91
        Touche$ = "Appel du menue de windows"
        
        
      ElseIf Touche = 93
        Touche$ = "Appel du menue de la souris"
        
        
      ElseIf Touche = 164
        Touche$ = "Alt"
        
        
      ElseIf Touche = 226
        Touche$ = ">"
        
        
      ElseIf Touche = 221
        Touche$ = "¨"
        
        
      ElseIf Touche = 186
        Touche$ = "$"
        
        
      ElseIf Touche = 192
        Touche$ = "ù"
        
        
      ElseIf Touche = 220
        Touche$ = "*"
        
        
      ElseIf Touche = 188
        Touche$ = ","
        
        
      ElseIf Touche = 190
        Touche$ = ";"
        
        
      ElseIf Touche = 191
        Touche$ = ":"
        
        
      ElseIf Touche = 223
        Touche$ = "!"
        
        
      ElseIf Touche = 161
        Touche$ = "Majuscule flèche droite"
        
        
      ElseIf Touche = 33
        Touche$ = "Flèche arrètte haut"
        
        
      ElseIf Touche = 34
        Touche$ = "Flèche arrètte bas"
        
        
      ElseIf Touche = 163
        Touche$ = "Ctrl droite"
        
        
      ElseIf Touche = 165
        Touche$ = "Alt Gr"
        
      ElseIf Touche = 37
        Touche$ = "Flèche gauche"
        
      ElseIf Touche = 38
        Touche$ = "Flèche haut"
        
      ElseIf Touche = 39
        Touche$ = "Flèche droite"
        
      ElseIf Touche = 40
        Touche$ = "Flèche bas"
        
      ElseIf Touche = 110
        Touche$ = "Pad Suppr"
        
      ElseIf Touche = 13
        Touche$ = "Entrer"
        
      ElseIf Touche = 106
        Touche$ = "Pad Multiplication"
        
      ElseIf Touche = 107
        Touche$ = "Pad Addition"
        
      ElseIf Touche = 109
        Touche$ = "Pad soustraction"
        
      ElseIf Touche = 111
        Touche$ = "Pad Division"
        
      ElseIf Touche = 144
        Touche$ = "Verr num"
        
      ElseIf Touche = 172
        Touche$ = "Internet"
        
      ElseIf Touche = 180
        Touche$ = "Mail"
        
      ElseIf Touche = 174
        
        
        Touche$ = "Sons -"
        
      ElseIf Touche = 175
        Touche$ = "Sons +"
        
      ElseIf Touche = 177
        Touche$ = "Lecture reculer"
        
      ElseIf Touche = 178
        Touche$ = "Lecture stop"
        
      ElseIf Touche = 179
        Touche$ = "Lecture / pause"
        
      ElseIf Touche = 176
        Touche$ = "Lecture avencer"
        
        
      EndIf
      
      If Touche <> 16 And Touche <> 17 And Touche <> 18 And Touche <> 1 And Touche <> 2 And Touche <> 4        
        If Buffer$ <> "17|18|162|"
          If Mode = 1
            Touche_presser$ = Touche$
          ElseIf Mode = 2
            Touche_presser$ =  Touche$ + " | " + Str(Touche)
          ElseIf Mode = 3
            Touche_presser$ =  Touche$ + " | " + "$" + RSet(Hex(Touche), 2, "0")
          ElseIf Mode = 4
            Touche_presser$ =  Str(Touche)
          ElseIf Mode = 5
            Touche_presser$ = "$" + RSet(Hex(Touche), 2, "0")
          Else
            Touche_presser$ = Touche$
          EndIf
        ElseIf Buffer$ = "17|18|162|"
          If Mode = 1
            Touche_presser$ = "Alt Gr"
          ElseIf Mode = 2
            Touche_presser$ =  "Alt Gr" + " | " + Str(165)
          ElseIf Mode = 3
            Touche_presser$ =  "Alt Gr" + " | " + "$" + RSet(Hex(165), 2, "0")
          ElseIf Mode = 4
            Touche_presser$ =  Str(165)
          ElseIf Mode = 5
            Touche_presser$ = "$" + RSet(Hex(165), 2, "0")
          Else
            Touche_presser$ = "Alt Gr"
          EndIf
        EndIf
      EndIf
      
    EndIf
    
  Next Touche
  
  
  ProcedureReturn Touche_presser$
EndProcedure

Procedure.s GetMouseKeyPressed(Mode)
  
  For Clique = 0 To 10
    Cle_Clique = GetAsyncKeyState_(Clique)
    
    If Cle_Clique = - 32767
      
      If Clique = 1
        Clique$ = "Clique droit"
        
      ElseIf Clique = 2
        Clique$ = "Clique gauche"
        
      ElseIf Clique = 4
        Clique$ = "Clique centre"
        
      ElseIf Clique = 5
        Clique$ = "Clique Précédent"
        
      ElseIf Clique = 6
        Clique$ = "Clique Suivent"
        
      EndIf
      
      If Mode = 1
        Clique_Souris$ = Clique$
        
      ElseIf Mode = 2
        Clique_Souris$ = Clique$ + " | " + Str(Clique)
        
      ElseIf Mode = 3
        Clique_Souris$ = Clique$ + " | " + "$" + RSet(Hex(Clique), 2, "0")
        
      ElseIf Mode = 4
        Clique_Souris$ = Str(Clique)
        
      ElseIf Mode = 5
        Clique_Souris$ = "$" + RSet(Hex(Clique), 2, "0")
        
      Else
        Clique_Souris$ = Clique$
      EndIf
      
    EndIf
    
  Next
  
  ProcedureReturn Clique_Souris$
EndProcedure

Global Taille_carrer = 5

CreateImage(#Carrer_1, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_2, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_3, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_4, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_5, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_6, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_7, Taille_carrer, Taille_carrer)
CreateImage(#Carrer_8, Taille_carrer, Taille_carrer)

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 505, 363, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ButtonGadget(#Button_1, 100, 90, 100, 50, "Bouton")
    StringGadget(#String_1, 225, 90, 200, 20, "String")
    ListIconGadget(#Liste_Icon_1, 100, 165, 200, 100, "Liste Icon", 100)
    OptionGadget(#Option_Gadget_1, 320, 165, 100, 15, "Option_Gadget_1")
    
    ImageGadget(#image_gadget_Carrer_1, 0, 0, 0, 0,  ImageID(#Carrer_1))
    ImageGadget(#image_gadget_Carrer_2, 0, 0, 0, 0,  ImageID(#Carrer_2))
    ImageGadget(#image_gadget_Carrer_3, 0, 0, 0, 0,  ImageID(#Carrer_3))
    ImageGadget(#image_gadget_Carrer_4, 0, 0, 0, 0,  ImageID(#Carrer_4))
    ImageGadget(#image_gadget_Carrer_5, 0, 0, 0, 0,  ImageID(#Carrer_5))
    ImageGadget(#image_gadget_Carrer_6, 0, 0, 0, 0,  ImageID(#Carrer_6))
    ImageGadget(#image_gadget_Carrer_7, 0, 0, 0, 0,  ImageID(#Carrer_7))
    ImageGadget(#image_gadget_Carrer_8, 0, 0, 0, 0,  ImageID(#Carrer_8))
    
    HideGadget(#image_gadget_Carrer_1, 1)
    HideGadget(#image_gadget_Carrer_2, 1)
    HideGadget(#image_gadget_Carrer_3, 1)
    HideGadget(#image_gadget_Carrer_4, 1)
    HideGadget(#image_gadget_Carrer_5, 1)
    HideGadget(#image_gadget_Carrer_6, 1)
    HideGadget(#image_gadget_Carrer_7, 1)
    HideGadget(#image_gadget_Carrer_8, 1)
    
  EndIf
EndProcedure

Open_Window_0()

Interupteur_image = 0

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent(1) ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ; 
  ; MouseKeyPressed$ = GetMouseKeyPressed(4)
  ; 
  ; KeyboardKeyPressed$ = GetKeyboardKeyPressed(4)
  ; 
    
  ForEach ListeGadget()

    If IsMouseOverGadget(ListeGadget(), Taille_carrer) And MouseLeft = 0
    
    Gadget_X = GadgetX(ListeGadget())
    Gadget_Y = GadgetY(ListeGadget())
    Gadget_W = GadgetWidth(ListeGadget())
    Gadget_H = GadgetHeight(ListeGadget())
    
    If Interupteur_image = 0
      
      ImageGadget(#image_gadget_Carrer_1, Gadget_X - Taille_carrer, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_1))
      ImageGadget(#image_gadget_Carrer_2, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_2))
      ImageGadget(#image_gadget_Carrer_3, Gadget_X + Gadget_W, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_3))
      ImageGadget(#image_gadget_Carrer_4, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_4))
      ImageGadget(#image_gadget_Carrer_5, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_5))
      ImageGadget(#image_gadget_Carrer_6, Gadget_X + Gadget_W, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_6))
      ImageGadget(#image_gadget_Carrer_7, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_7))
      ImageGadget(#image_gadget_Carrer_8, Gadget_X + Gadget_W, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_8))
      
      SetClassLong_(GadgetID(ListeGadget()),#GCL_HCURSOR,Cursseur_deplacer)
      Interupteur_image = 1
      Gadget = ListeGadget()
    EndIf
    
  ElseIf Not IsMouseOverGadget(Gadget, Taille_carrer) And Interupteur_image = 1 And MouseLeft = 0
    If IsGadget(Gadget) And IsGadget(#image_gadget_Carrer_1) And IsGadget(#image_gadget_Carrer_2) And IsGadget(#image_gadget_Carrer_3) And IsGadget(#image_gadget_Carrer_4) And IsGadget(#image_gadget_Carrer_5) And IsGadget(#image_gadget_Carrer_6) And IsGadget(#image_gadget_Carrer_7) And IsGadget(#image_gadget_Carrer_8)
    HideGadget(#image_gadget_Carrer_1, 1)
    HideGadget(#image_gadget_Carrer_2, 1)
    HideGadget(#image_gadget_Carrer_3, 1)
    HideGadget(#image_gadget_Carrer_4, 1)
    HideGadget(#image_gadget_Carrer_5, 1)
    HideGadget(#image_gadget_Carrer_6, 1)
    HideGadget(#image_gadget_Carrer_7, 1)
    HideGadget(#image_gadget_Carrer_8, 1)
    
    SetClassLong_(GadgetID(Gadget),#GCL_HCURSOR,Cursseur_Normale)
    Interupteur_image = 0
  EndIf
  
Else
  
  If IsMouseOverGadget(#image_gadget_Carrer_1, 1)
    If interupteur_image_carrer = 0
    interupteur_image_carrer = 1
      SetClassLong_(GadgetID(#image_gadget_Carrer_1),#GCL_HCURSOR,Cursseur_fleche_diagonnale_haut_droite)
    EndIf
    
  ElseIf IsMouseOverGadget(#image_gadget_Carrer_2, 1)
    If interupteur_image_carrer = 0
      interupteur_image_carrer = 1
      SetClassLong_(GadgetID(#image_gadget_Carrer_2),#GCL_HCURSOR,Cursseur_fleche_haut_et_bas)
    EndIf
    
  ElseIf IsMouseOverGadget(#image_gadget_Carrer_3, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_3),#GCL_HCURSOR,Cursseur_fleche_diagonnale_haut_gauche)
      EndIf
      
    ElseIf IsMouseOverGadget(#image_gadget_Carrer_4, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_4),#GCL_HCURSOR,Cursseur_fleche_diagonnale_haut_gauche)
      EndIf
      
    ElseIf IsMouseOverGadget(#image_gadget_Carrer_5, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_5),#GCL_HCURSOR,Cursseur_fleche_haut_et_bas)
      EndIf
      
    ElseIf IsMouseOverGadget(#image_gadget_Carrer_6, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_6),#GCL_HCURSOR,Cursseur_fleche_diagonnale_haut_droite)
      EndIf
      
    ElseIf IsMouseOverGadget(#image_gadget_Carrer_7, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_7),#GCL_HCURSOR,Cursseur_fleche_gauche_et_droite)
      EndIf
      
    ElseIf IsMouseOverGadget(#image_gadget_Carrer_8, 1)
      If interupteur_image_carrer = 0
        interupteur_image_carrer = 1
        SetClassLong_(GadgetID(#image_gadget_Carrer_8),#GCL_HCURSOR,Cursseur_fleche_gauche_et_droite)
      EndIf
      
    Else
      interupteur_image_carrer = 0
    EndIf
    
  EndIf
  
Next ListeGadget()


If MouseLeft = 1
  
  l = (spl - WindowMouseX(#Window_0))
  h = (sph - WindowMouseY(#Window_0))
  
  If image_gadget_Carrer_1 = 1
    If WindowMouseX(#Window_0) <> Sauvegarde_WindowMouseX Or WindowMouseY(#Window_0) <> Sauvegarde_WindowMouseY
      SetClassLong_(GadgetID(Gadget),#GCL_HCURSOR,Cursseur_fleche_diagonnale_haut_droite)
      Gadget_X = GadgetX(Gadget)
      Gadget_Y = GadgetY(Gadget)
      Gadget_W = GadgetWidth(Gadget)
      Gadget_H = GadgetHeight(Gadget)
      ImageGadget(#image_gadget_Carrer_1, Gadget_X - Taille_carrer, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_1))
      ImageGadget(#image_gadget_Carrer_2, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_2))
      ImageGadget(#image_gadget_Carrer_3, Gadget_X + Gadget_W, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_3))
      ImageGadget(#image_gadget_Carrer_4, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_4))
      ImageGadget(#image_gadget_Carrer_5, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_5))
      ImageGadget(#image_gadget_Carrer_6, Gadget_X + Gadget_W, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_6))
      ImageGadget(#image_gadget_Carrer_7, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_7))
      ImageGadget(#image_gadget_Carrer_8, Gadget_X + Gadget_W, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_8))
      ResizeGadget(Gadget, WindowMouseX(#Window_0),  WindowMouseY(#Window_0), l, h)
      Sauvegarde_WindowMouseX = WindowMouseX(#Window_0)
      Sauvegarde_WindowMouseY = WindowMouseY(#Window_0)
    EndIf
  ElseIf image_gadget_Carrer_2 = 1
    
  ElseIf image_gadget_Carrer_3 = 1
    
  ElseIf image_gadget_Carrer_4 = 1
    
  ElseIf image_gadget_Carrer_5 = 1
    
  ElseIf image_gadget_Carrer_6 = 1
    
  ElseIf image_gadget_Carrer_7 = 1
    
  ElseIf image_gadget_Carrer_8 = 1
    
  EndIf
  
EndIf


  If Event = #PB_Event_Gadget
    
    If GadgetID = #image_gadget_Carrer_1
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_1 = 1
        spl = GadgetX(Gadget) + GadgetWidth(Gadget)
        sph = GadgetY(Gadget) + GadgetHeight(Gadget)
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_2
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_2 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_3
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_3 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_4
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_4 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_5
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_5 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_6
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_6 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_7
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_7 = 1
      EndIf
    ElseIf GadgetID = #image_gadget_Carrer_8
      If EventType = #PB_EventType_LeftClick
        MouseLeft = 1
        image_gadget_Carrer_8 = 1
      EndIf
    EndIf
    
  Else
    
    Select Event
        
      Case 512 ; déplacement de la souris sur la fenêtre
        
      Case 513 ; bouton gauche appuiler avec la souris sur la fenêtre
        
      Case 514 ; bouton gauche relacher avec la souris sur la fenêtre
        Gadget_X = GadgetX(Gadget)
        Gadget_Y = GadgetY(Gadget)
        Gadget_W = GadgetWidth(Gadget)
        Gadget_H = GadgetHeight(Gadget)
        ImageGadget(#image_gadget_Carrer_1, Gadget_X - Taille_carrer, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_1))
        ImageGadget(#image_gadget_Carrer_2, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_2))
        ImageGadget(#image_gadget_Carrer_3, Gadget_X + Gadget_W, Gadget_Y - Taille_carrer, Taille_carrer, Taille_carrer,  ImageID(#Carrer_3))
        ImageGadget(#image_gadget_Carrer_4, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_4))
        ImageGadget(#image_gadget_Carrer_5, Gadget_X + Gadget_W / 2 - Taille_carrer / 2, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_5))
        ImageGadget(#image_gadget_Carrer_6, Gadget_X + Gadget_W, Gadget_Y + Gadget_H, Taille_carrer, Taille_carrer,  ImageID(#Carrer_6))
        ImageGadget(#image_gadget_Carrer_7, Gadget_X - Taille_carrer, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_7))
        ImageGadget(#image_gadget_Carrer_8, Gadget_X + Gadget_W, Gadget_Y + Gadget_H / 2 - Taille_carrer / 2, Taille_carrer, Taille_carrer,  ImageID(#Carrer_8))
        MouseLeft = 0
        image_gadget_Carrer_1 = 0
        image_gadget_Carrer_2 = 0
        image_gadget_Carrer_3 = 0
        image_gadget_Carrer_4 = 0
        image_gadget_Carrer_5 = 0
        image_gadget_Carrer_6 = 0
        image_gadget_Carrer_7 = 0
        image_gadget_Carrer_8 = 0
        
        If Not IsMouseOverGadget(Gadget, Taille_carrer)
          
          If Not IsMouseOverGadget(#image_gadget_Carrer_1, 0)
            SetClassLong_(GadgetID(Gadget),#GCL_HCURSOR,Cursseur_Normale)
          Else
            
          EndIf
          
        Else
          SetClassLong_(GadgetID(ListeGadget()),#GCL_HCURSOR,Cursseur_deplacer)
        EndIf
        
      Case 515 ; double clique gauche avec la souris sur la fenêtre
        
      Case 516 ; bouton droit appuiler avec la souris sur la fenêtre
        
      Case 517 ; bouton droit relacher avec la souris sur la fenêtre
        
      Case 518 ; double clique droit avec la souris sur la fenêtre
        
      Case 519 ; bouton centrale appuiler avec la souris sur la fenêtre
        
      Case 520 ; bouton centrale relacher avec la souris sur la fenêtre
        
      Case 521 ; double clique centrale avec la souris sur la fenêtre
        
      Case 522 ; déplacement de la molètte de la souris sur la fenêtre"
        
    EndSelect
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop
 
; jaPBe Version=3.10.9.849
; FoldLines=00070025002700340050005300550058005A00640066008C008E0194019601C6
; Build=0
; Language=0x0000 Language Neutral
; FirstLine=293
; CursorPosition=733
; EnableOnError
; ExecutableFormat=Windows
; DontSaveDeclare
; EOF

Re: ResizemouseGadget

Publié : sam. 09/avr./2011 12:40
par dayvid
Sa va je plaisentais :roll:

C'étais de l'humour quoi, de l'ironie :?

Ah je me doutais bien que sa le ferais pas ce foutue message :x

Bon et bien a votre bon coeur et a plus :)

Re: ResizemouseGadget

Publié : dim. 10/avr./2011 3:22
par Kwai chang caine
Bon comme je te l'avais dit, c'est un peu long à lire.
Pour le resizing de gadget, je pense que le mieux et le plus fluide, c'est de passer par la constante #WM_SIZE dans une callback.
L'avantage dans les callbacks, c'est que c'est extrêmement rapide, et si tu utilises en plus directement les messages de windows, sans passer par ceux de PB, (WM_ sont les "Windows messages") c'est encore plus rapide.

Voici aussi un tout petit code de DANILO qui peut te donner une piste et tres bon exemple de l'utilisation des callbacks :wink:

Code : Tout sélectionner

Procedure WinCallback(Win,Msg,wParam,lParam) 
  Select Msg 
    Case #WM_SIZE 
      ResizeGadget(1,5,5,WindowWidth(0)-10,WindowHeight(0)-10) 
  EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 

OpenWindow(0,0,0,200,30,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget) 
  CreateGadgetList(WindowID(0)) 
  ButtonGadget(1,5,5,190,20,"Button") 
  
SetWindowCallback(@WinCallback()) 

Repeat 
Until WaitWindowEvent() = #PB_Event_CloseWindow 
Sinon SROD avait créé un include, comme il en a le secret pour le resizing sans flikering, et la ...c'est fait par un PRO de chez PRO :mrgreen:

La demo

Code : Tout sélectionner

;*********************************************************************************
;nxResize demo program (Purebasic 4.3).
;*********************************************************************************

XIncludeFile "nxResize.pbi"

If OpenWindow(0, 100, 200, 300, 300, "nxResize demo.", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  ContainerGadget(0, 20,20,260,260, #PB_Container_Raised)
    ButtonGadget(1,40,40,180,180, "TOGGLE DYNAMIC SIZING!")
  CloseGadgetList()
  state = #nxResize_AnchorAll
  nxResize_SetResize(0, state)
  nxResize_SetResize(1, state)

  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            state!#nxResize_AnchorAll
            nxResize_SetResize(0, state)
;            nxResize_SetResize(1, state)
        EndSelect
    EndSelect

  Until EventID = #PB_Event_CloseWindow
EndIf
End 
L'include

Code : Tout sélectionner

CompilerIf Defined(INCLUDE_NXRESIZE, #PB_Constant)=0
#INCLUDE_NXRESIZE=1
;/////////////////////////////////////////////////////////////////////////////////
;***nxResize***
;*
;*©nxSoftWare 2008  (www.nxSoftware.com)
;*======================================
;*   Stephen Rodriguez (srod)
;*   Created with Purebasic 4.3 for Windows.
;*
;*   Platforms:  NT/2000/XP/VISTA.
;*               No promises with 'early' versions of Windows!
;/////////////////////////////////////////////////////////////////////////////////


EnableExplicit

;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;-DECLARES \ PROTOTYPES.
  Declare.i nxResize_GetResize(gadget)
  Declare.i nxResize_SetResize(gadget, flags)

  Declare.i nxResize_ParentProc(hwnd, uMsg, wParam, lParam)
  Declare.i nxResize_Proc(hwnd, uMsg, wParam, lParam)
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;-CONSTANTS \ STRUCTURES.

  #nxResize_PROPOldProc = "nxResize_OldProc"
  #nxResize_PROP = "nxResize_ptr"

  Enumeration
    #nxResize_AnchorLeft = 1
    #nxResize_AnchorTop = 2
    #nxResize_AnchorRight = 4
    #nxResize_AnchorBottom = 8
    #nxResize_AnchorAll = #nxResize_AnchorLeft + #nxResize_AnchorTop + #nxResize_AnchorRight + #nxResize_AnchorBottom
  EndEnumeration

  ;The following structure is used by each gadget being resized dynamically. 
  ;On top of this a gadget being dynamically sized can also be a container for
  ;other gadgets being dynamically sized.
  ;We thus need to subclass carefully.
    Structure _nxResize
      flags.i               ;Combinations of #nxResize_AnchorLeft etc.
      leftmargin.i
      topmargin.i
      rightmargin.i
      bottommargin.i
      oldProc.i
    EndStructure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;-LIBRARY FUNCTIONS.

;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;The following function returns a gadget's dynamic resizing attributes.
;It returns a combination of #nxResize_AnchorLeft, #nxResize_AnchorTop, #nxResize_AnchorRight
;#nxResize_AnchorBottom and #nxResize_AnchorAll.
;Returns zero if no attributes are set.
Procedure.i nxResize_GetResize(gadget)
  Protected result, *ptr._nxResize
  If IsGadget(gadget)
    *ptr = GetProp_(GadgetID(gadget), #nxResize_PROP)
    If *ptr
      ProcedureReturn *ptr\flags
    EndIf
  EndIf
  ProcedureReturn 0
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;The following function sets a gadget for auto resizing.
;If flags = 0 then the resizing is cancelled.
;Returns zero if an error.
ProcedureDLL.i nxResize_SetResize(gadget, flags)
  Protected result, hwnd, parenthWnd, *ptr._nxResize
  Protected rc.RECT
  If IsGadget(gadget)
    hwnd = GadgetID(gadget)
    ;If flags = 0 then the dynamic resizing is to be cancelled.
    ;However, we can only remove the #nxResize_PROP if this gadget is not a container
    ;to others being dynamically sized because of the possible 'chained' subclassing.
      If flags = 0
        *ptr = GetProp_(hwnd, #nxResize_PROP)
        If GetProp_(hwnd, #nxResize_PROPOldProc) = 0 ;Not a container to other gadgets being resized.
          RemoveProp_(hwnd, #nxResize_PROP)
          If *ptr
            SetWindowLongPtr_(hwnd, #GWL_WNDPROC, *ptr\oldProc)
            FreeMemory(*ptr)
          EndIf
        ElseIf *ptr
          *ptr\flags = 0
        EndIf
        result = 1
      Else ;Some form of dynamic resizing is to be enabled.
        ;Has dynamic resizing already been enabled for this gadget?
        *ptr = GetProp_(hwnd, #nxResize_PROP)
        If *ptr = 0 ;No!
          *ptr = AllocateMemory(SizeOf(_nxResize))
          If *ptr
            ;Create a property in which to store a pointer to this structure.
              If SetProp_(hwnd, #nxResize_PROP, *ptr) = 0
                FreeMemory(*ptr)
                ProcedureReturn 0
              EndIf
            ;Subclass the gadget.
              *ptr\oldProc = SetWindowLongPtr_(hwnd, #GWL_WNDPROC, @nxResize_Proc())
          Else
            ProcedureReturn 0
          EndIf
        EndIf
        ;Set the remaining fields of the structure.
          parenthWnd = GetParent_(hwnd)
          GetClientRect_(parenthWnd, rc)
          With *ptr
            \flags = flags
            \leftmargin = GadgetX(gadget)
            \topmargin = GadgetY(gadget)
            \rightmargin = rc\right - \leftmargin - GadgetWidth(gadget)
            \bottommargin = rc\bottom - \topmargin - GadgetHeight(gadget)
          EndWith
        ;Subclass the parent window if not already done through another call to this function.
          If GetProp_(parenthWnd, #nxResize_PROPOldProc) = 0
            SetProp_(parenthWnd, #nxResize_PROPOldProc, SetWindowLongPtr_(parenthWnd, #GWL_WNDPROC, @nxResize_ParentProc()))
          EndIf
        result = 1
      EndIf
  EndIf
  ProcedureReturn result
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;-INTERNAL FUNCTIONS.

;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;The following function is the EnumChildProc callback.
Procedure.i nxResize_EnumChilds(hwnd, parenthWnd)
  Protected *ptr._nxResize, ctrlID, l, t, r, b
  Protected parentrc.RECT
  ;Check that the control is an 'immediate child' of the parent.
  If GetParent_(hwnd) = parenthWnd
    ;Check if the child window is set for dynamic resizing.
      *ptr = GetProp_(hwnd, #nxResize_PROP)
      If *ptr And *ptr\flags
        ctrlID = GetDlgCtrlID_(hwnd)
        l = GadgetX(ctrlID) : t = GadgetY(ctrlID) : r = l + GadgetWidth(ctrlID) : b = t + GadgetHeight(ctrlID)
        GetClientRect_(parenthWnd, parentrc)
        If *ptr\flags & #nxResize_AnchorRight
          r = parentrc\right - *ptr\rightmargin
        EndIf
        If *ptr\flags & #nxResize_AnchorLeft = 0
          l = r - GadgetWidth(ctrlID)
        EndIf
        If *ptr\flags & #nxResize_AnchorBottom
          b = parentrc\bottom - *ptr\bottommargin
        EndIf
        If *ptr\flags & #nxResize_AnchorTop = 0
          t = b - GadgetHeight(ctrlID)
        EndIf
        ResizeGadget(ctrlID, l, t, r-l, b-t)
      EndIf
  EndIf
  ProcedureReturn 1
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;The following function is the subclass procedure for the parents of all gadgets being dynamically resized.
Procedure.i nxResize_ParentProc(hwnd, uMsg, wParam, lParam)
  Protected result, oldProc
  oldproc = GetProp_(hwnd, #nxResize_PROPOldProc)
  Select uMsg
    Case #WM_NCDESTROY
      RemoveProp_(hwnd, #nxResize_PROPOldProc)
    Case #WM_SIZE
      ;Here we loop through all immediate child windows and resize where appropriate.
        EnumChildWindows_(hwnd, @nxResize_EnumChilds(), hwnd)
  EndSelect
  If oldproc
    result = CallWindowProc_(oldproc, hwnd, uMsg, wParam, lParam)
  EndIf
  ProcedureReturn result
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////


;//////////////////////////////////////////////////////////////////////////////////////////////////////////
;The following function is the subclass procedure for all gadgets being dynamically resized.
Procedure.i nxResize_Proc(hwnd, uMsg, wParam, lParam)
  Protected result, *ptr._nxResize, parenthWnd, rc.RECT, gadget, OldProc
  *ptr = GetProp_(hwnd, #nxResize_PROP)
  If *ptr
    oldProc = *ptr\oldproc
    Select uMsg
      Case #WM_NCDESTROY
        RemoveProp_(hwnd, #nxResize_PROP)
        FreeMemory(*ptr)
      Case #WM_MOVE, #WM_SIZE
        gadget = GetDlgCtrlID_(hwnd)
        ;This takes care of the user repositioning\resizing the gadget through ResizeGadget() etc.
        ;In such cases we do not prevent the move but reset the dynamic resizing properties.
        If *ptr\flags And GadgetWidth(gadget) And GadgetHeight(gadget)
          parenthWnd = GetParent_(hwnd)
          GetClientRect_(parenthWnd, rc)
           With *ptr
            \leftmargin = GadgetX(gadget)
            \topmargin = GadgetY(gadget)
            \rightmargin = rc\right - \leftmargin - GadgetWidth(gadget)
            \bottommargin = rc\bottom - \topmargin - GadgetHeight(gadget)
          EndWith
        EndIf
    EndSelect
    result = CallWindowProc_(oldproc, hwnd, uMsg, wParam, lParam)
  Else
    result = DefWindowProc_(hwnd, uMsg, wParam, lParam)
  EndIf  
  ProcedureReturn result
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////////////

DisableExplicit
CompilerEndIf

Re: ResizemouseGadget

Publié : lun. 11/avr./2011 13:24
par dayvid
merci, je ne sais pas a quoi sa sert mais je vais regarder sa cher moi
grand merci a toi KCC :D