Squelette PureGosaure pour les débutants ....

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Squelette PureGosaure pour les débutants ....

Message par Kwai chang caine »

Bonjour à tous.

Voila pour tout dire, je progresse pas mal, grace à tous vos supers codes, mais je suis allé plus vite que la musique et maintenant je me rend compte que les bases mêmes de pure, je ne les ai pas toutes comprises. :oops:

Comme je viens de VB, ou les evenements sont machés, si bien que l'on ne se pose pas la question lorsque l'on appuie sur un bouton si on a d'abord appuyé sur la fenetre avant d'avoir appuyé sur le bouton.
On met le code derriere la procedure bouton et basta (Enfantin)

La c'est super dur pour un debutant comme moi, car je ne comprend pas toujours l'ordre des evenements.

Alors une idée m'est venue grace au poste de DROOPY :

http://purebasic.hmt-forum.com/viewtopi ... =squelette

Je me suis dit pourquoi ne pas faire un mega squelette optimisé par des gens comme vous (Les CAID de la prog en pure), afin que les burnes comme moi, et je pense que je ne doit pas etre le seul, qui viennent de VB ou autre language assisté ne se sente pas perdu et découragé devant leur code. :(

En fait, j'arrive à pas mal de chose mais à la fin le code est en vrac au milieu des windowevent() ou bien dans des procedures à droite à gauche. :oops:

En ressenssant toutes les actions possibles ou du moins les plus connues, click, Dbleclick, Mouse, DragDrop, Key, sur les gadgets ET les fenetres nous partirions d'une structure bien droite et ce serait bien plus facile pour retrouver les evenements lorsque les codes deviennent trop long.
Il suffirait alors d'effacer à la fin du programme les procedures qui ne nous ont pas servie.

En attendant, j'ai commencé avec mes premieres connaissances, a mettre quelques os du squelette, en récupérant des morceaux de codes par ci par la.

J'aimerais connaitre votre avis, bonne ou mauvaise idée :idea:

Si quelqu'un pouvais me le redresser et voir meme, chacun le completer au fur et à mesure, nous aurions un bon début pour tous les futurs PUREBASICIEN.

Cela continuerais la bonne idée de DROOPY qui ne traite que les fonctions simples.

Le super pied serait de le simplifier au point qu'il n'y ai qu'une procedure qui réponde à un evenement précis, comme ça y'a qu'a mettre le code dedans et roule ma poule.

Comme je l'ai dit, c'est un des avantages natifs de VB, avec les textgadgets transparent, les boutons couleurs, les retours à la ligne de code et quelques autres qui sont pas le sujet.
Et si on pouvait lui enlever celui la, qui à mon avis de debutant n'est pas une paille, il n'en resterais pas beaucoup avec quelques modifs de FRED dans les versions futures.(Enfin je l'espere)

Pure est tellement un super language qui pourrait aussi bien combler les pros comme vous, sans pour autant dégouter les debutants comme moi.

Donnez moi aussi aussi votre avis sur l'idée qui en fait n'est pas vraiment la mienne.

Code : Tout sélectionner

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;                                 DECLARATION DES FENETRES
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Enumeration
 
 #Form = 1
 ; etc 
 ; etc 
 ; etc 
 #FormXXX = 99
   
EndEnumeration

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;                                 DECLARATION DES GADGETS
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Enumeration
 
 #Texte = 100 
 ; etc 
 ; etc 
 ; etc 
 #TexteXXX = 199
 
 #ListViewXX = 200
 ; etc 
 ; etc 
 ; etc 
 #ListeXXX = 299
  
 #BouttonXX = 300
 ; etc 
 ; etc 
 ; etc 
 #BoutonXXX = 299
 
 #LabelXX = 400
 ; etc 
 ; etc 
 ; etc 
 #LabelXXX = 499
  
 #FontXX = 500
 ; etc 
 ; etc 
 ; etc 
 #FontXXX = 599
 
 #ImageXX = 600
 ; etc 
 ; etc 
 ; etc 
 #ImageXXX = 699
 
EndEnumeration

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;                                 DECLARATION DES MENUS
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Enumeration
 
 #MenuXX = 700
 ; etc 
 ; etc 
 ; etc 
 #MenuXXX = 799
 
EndEnumeration
  
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;                                DECLARATION DES VARIABLES
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Global Touche
Global Evenement
Global Cursor.POINT ; Variable pour stocker la position du curseur 
Global IdGadgetSurvoler 

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;                                     PROCEDURES
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Procedure EvenementFenetreDragAndDrop() 
 
 GetCursorPos_(@point.POINT) 
 Handle = WindowFromPoint_(point\X,point\Y) 
 IdGadget = GetDlgCtrlID_(Handle) ; Id du gadget survolé
 Dropped.l = EventwParam() 
 Num.l = DragQueryFile_(dropped, -1, "", 0) 
 
 For Index = 0 To Num - 1 
 
  Size.l = DragQueryFile_(Dropped, Index, 0, 0) 
  Filename.s = Space(size) 
  DragQueryFile_(Dropped, Index, Filename, Size + 1) 
  
  Select IdGadget
 
   Case #Texte
    SetGadgetText(#Texte, Filename ) 
    Debug "Dépot d'un objet dans le champ texte"
;   Case #NomduGadget2
  ;  SetGadgetText(#NomduGadget2, Filename ) 
   
  EndSelect
     
 Next 
 
 DragFinish_(dropped) 

EndProcedure 

Procedure EvenementFenetreSimpleClicGauche()
 Debug "Simple clic gauche sur fenetre"
EndProcedure

Procedure EvenementFenetreSimpleClicDroit()
 Debug "Simple clic droit sur fenetre"
EndProcedure

Procedure EvenementFenetreDoubleClicGauche()
 Debug "Double clic gauche sur fenetre"
EndProcedure

Procedure EvenementFenetreDoubleClicDroit()
 Debug "Double clic droit sur fenetre"
EndProcedure

Procedure EvenementFenetreBouge()
 Debug "La fenetre bouge"
EndProcedure

Procedure EvenementClavierTouche()
 Debug "Caractère : " + Str(EventwParam()) + " = '" + Chr(EventwParam()) + "'"
EndProcedure

Procedure EvenementClavierToucheSpeciale()
 Debug "Touche : " + Str(Touche)
EndProcedure

Procedure EvenementSystray()
 
 If EventType() = #PB_EventType_RightClick  ; Un click droit fait apparaître le menu          
 
  Debug "Simple clic droit sur la systray"
  
 ElseIf EventType() = #PB_EventType_LeftClick
    
  Debug "Simple clic gauche sur la systray"

 EndIf
 
EndProcedure

Procedure EvenementGadgetSimpleClickGauche()
 
 Debug "Simple clic gauche sur gadget" 
 
 Select EventGadget()  
        
  ;Case #GadgetXXX
  
  ;Case #GadgetXXX
     
 EndSelect
 
 EndProcedure  

Procedure EvenementGadgetDoubleClickGauche()
 
 Debug "Double clic gauche sur gadget" 
 
 Select EventGadget()  
        
  ;Case #GadgetXXX
  
  ;Case #GadgetXXX
     
 EndSelect
      
EndProcedure

Procedure EvenementGadgetSimpleClicDroit()
 
 Select IdGadgetSurvoler
  
  Case #Texte
  
   Debug "Simple clic droit sur le gadget texte"
  
 EndSelect
   
EndProcedure

Procedure Evenements()
 
 Temps_DoubleClic = GetDoubleClickTime_ () 
 Double = -1 
  
 Repeat 
  
  GetCursorPos_(@Cursor) 
  Evenement = WaitWindowEvent () 
    
  Select Evenement
   
   Case #WM_DROPFILES 
   
    EvenementFenetreDragAndDrop() 
   
   Case #WM_LBUTTONDBLCLK  
   
    EvenementFenetreDoubleClicGauche()
   
   Case #WM_RBUTTONDBLCLK 
   
    EvenementFenetreDoubleClicDroit()
   
   Case #WM_LBUTTONDOWN
   
    EvenementFenetreSimpleClicGauche()
      
   Case #WM_RBUTTONDOWN
    
    HandleGadget = WindowFromPoint_(Cursor \ x, Cursor \ y)             
    IdGadgetSurvoler = GetDlgCtrlID_(HandleGadget)
   
    If IdGadgetSurvoler >= 100 And IdGadgetSurvoler =< 699
     EvenementGadgetSimpleClicDroit()
    Else
     EvenementFenetreSimpleClicDroit()       
    EndIf
      
   Case #PB_Event_Gadget
    
    If EventGadget() =  #Texte
     EvenementGadgetSimpleClickGauche()
    EndIf 
   
   Case #WM_KEYDOWN
    
    Debug "Une touche a été préssée"  
    Touche = EventwParam() ; On enregistre le numéro de la touche tapée 
    Evenement = WindowEvent()
    
    If Evenement = #WM_CHAR ; Si on a pu récupérer le texte tapé
     EvenementClavierTouche()
    Else ; Sinon, on a enfoncé une touche spéciale comme les flèches par exemple
     EvenementClavierToucheSpeciale()
    EndIf
    
   Case #PB_Event_SysTray 
   
    EvenementSystray()
   
   Case #PB_Event_Gadget
        
    Double = 0 
    Temps = GetTickCount_ () 
 
    Repeat 
 
     Event = WindowEvent () 
 
     If Event = #WM_LBUTTONDBLCLK 
      Double = 1 
     EndIf 
 
    Until GetTickCount_ () - Temps >= Temps_DoubleClic Or DoubleClic = 1 
 
    If Double = 1 
     EvenementGadgetDoubleClickGauche()
    ElseIf Double = 0 
     EvenementGadgetSimpleClickGauche()
    EndIf 
   
   Default 
   
    Delay(1)
  
  EndSelect
       
 Until Evenement = #PB_Event_CloseWindow 
  
EndProcedure

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

;                                     PROGRAMME

; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

OpenWindow(#Form, GetSystemMetrics_(#SM_CXSCREEN) / 3, GetSystemMetrics_(#SM_CYSCREEN) / 3, 200, 50, "Test des evenements")
CreateGadgetList(WindowID(#Form))
StringGadget(#Texte, 10, 10, 150, 30, "Texte")
DragAcceptFiles_(GadgetID(#Texte), #True) ; Pour l'acceptation du glisser/deposer
AddKeyboardShortcut(#Form, #PB_Shortcut_Return, 13)  ; Attribution de l'evenement 13 à la touche "RETURN"
Evenements()


C'est du boulot mais y aura t'il quelqu'un pour relever le défi de la conquete de JURASSIC PURE. :lol:

Merci de votre attention.
Bonne journée à tous.
Dernière modification par Kwai chang caine le sam. 18/nov./2006 18:39, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci de ta reponse droopy

Bah, ya vachement de code......ça doit etre utile, mais je ne suis pas sur que ce soit beaucoup plus simple que les fonctions natives de PURE :lol:

En fait, j'avais trouvé que t'avais eu une super bonne idée, dommage qu'elle ne parlait pas des evenements un peu plus compliqué.

Mais alors la au niveau compliqué, ça parait compliqué le lien que tu m'a donné, et je ne suis pas sur que cela en apprenne mieux sur les fonctions de base de pure.

En plus le probleme des anglais c'est qui parlent pas français :lol:
Et quand le code est pas bien simple, leur langue ne facilite pas les choses.

Bon c'est pas grave, je vois que ta/mon idée est peut etre pas si utille que ça...si ça embale pas grand monde.

Quoi qu'il en soit encore merci.
Dur dur d'etre un BB, mais je ne désespere pas de grandir. :roll:

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

PureBasic Forum Officiel - Site PureBasic
Répondre