Page 3 sur 10

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:13
par falsam
Concevoir une interface graphique c'est apprendre à manipuler les Objets en Pure Basic.

Qu'est ce qu'un Objet ? C'est par exemple une fenêtre.

La syntaxe d'affichage d'une fenêtre est : OpenWindow(#Fenetre, x, y, LargeurInterne, HauteurInterne, Titre$)

#Fenetre est une variable représentant l'identifiant numérique de cette fenêtre. Le premier identifiant commence à 0

Code

Code : Tout sélectionner

OpenWindow(0, 10, 100, 800, 600, "Surface d'un triangle rectangle")
Si tu testes ce code, la fenêtre va s'ouvrir rapidement et se fermer tout aussi rapidement.

:!: Pourquoi ? Parce qu'il manque la gestion événementielle de cette fenêtre à travers une boucle événementielle .

Il y a plusieurs méthodes pour gérer une boucle événementielle. La plus classique est le couple d'instruction Repeat ... ForEver

Voiçi le nouveau code de création d'une fenêtre et de sa boucle événementielle.

Code : Tout sélectionner

;Ouverture d'une fenêtre
OpenWindow(0, 100, 100, 800, 600, "Surface d'un triangle rectangle")

;Boucle évenementielle
Repeat 
  Select WaitWindowEvent() ;Un évenement est arrivé
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenetre ?
      End ;Apparement oui : Fermeture de la fenêtre.
  EndSelect
ForEver

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:14
par klystron
selec et endselec c'est un contrôle

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:16
par klystron
ok oui une fenetre c'est ouverte

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:18
par falsam
On va créer maintenant un bouton et afficher un message quand on clique dessus.

Code : Tout sélectionner

;Ouverture d'une fenêtre
OpenWindow(0, 100, 100, 800, 600, "Surface d'un triangle rectangle")

;Création d'un bouton 
ButtonGadget(0, 700, 30, 80, 22, "Clique moi")

;Boucle évenementielle
Repeat 
  Select WaitWindowEvent() ;Un événement est arrivé
    Case #PB_Event_Gadget  ;Est un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparemment oui : On cherche qui 
        Case 0
          MessageRequester("Information", "Vous avez cliqué sur le bouton")
      EndSelect
      
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenêtre ?
      End ;Apparement oui : Fermeture de la fenêtre.
  EndSelect
ForEver

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:20
par klystron
oui c'est ok

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:27
par falsam
Référencer ces objets (ou gadgets) Pure Basic[/i] par des numéros n'est pas très pratique. Il est difficile de se rappeler qui est qui.

Les énumérations Enumeration .... EndEnumeration.
Les énumérations sont très pratiques pour déclarer rapidement une série de constantes sans s'occuper de leur valeur numérique.

Nous allons reprendre le code précédent en ajoutant un autre bouton.

Code : Tout sélectionner

Enumeration Fenetre ;Pour le moment il y en a qu'une 
  #MaFenetre
EndEnumeration

Enumeration Gadgets
  #Button1
  #Button2
EndEnumeration


;Ouverture d'une fenêtre
OpenWindow(#MaFenetre, 100, 100, 800, 600, "Surface d'un triangle rectangle")

;Création d'un bouton 
ButtonGadget(#Button1, 700, 30, 80, 22, "Clique moi")
ButtonGadget(#Button2, 700, 60, 80, 22, "Clique moi")

;Boucle évenementielle
Repeat 
  Select WaitWindowEvent() ;Un évenement est arrivé
    Case #PB_Event_Gadget  ;Est un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparement oui : On cherche qui 
          
        Case #Button1 ;Clique sur le bouton 1
          MessageRequester("Information", "Vous avez cliqué sur le bouton")
            
        Case #Button1 ;Clique sur le bouton 2
          MessageRequester("Information", "Vous avez cliqué sur le bouton")
  
      EndSelect
      
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenetre ?
      End ;Apparement oui : Fermeture de la fenêtre.
  EndSelect
ForEver
je te laisse le soin de l'analyser.

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:32
par falsam
Si tu as bien analysé ce code tu as du voir qu'on répétait deux fois

Code : Tout sélectionner

MessageRequester("Information", "Vous avez cliqué sur le bouton")
Les procédure. Procedure .... EndProcedure
Une procédure est une partie du code indépendante du programme principal qui peut avoir des paramètres et ses propres variables.

Reprenons le code précédent dans lequel nous appellerons une procédure pour afficher un message.

Code : Tout sélectionner

Enumeration Fenetre ;Pour le moment il y en a qu'une 
  #MaFenetre
EndEnumeration

Enumeration Gadgets
  #Button1
  #Button2
EndEnumeration

Procedure AfficheMessage()
  MessageRequester("Information", "Vous avez cliqué sur le bouton")
EndProcedure

;Ouverture d'une fenêtre
OpenWindow(#MaFenetre, 100, 100, 800, 600, "Surface d'un triangle rectangle")

;Création d'un bouton 
ButtonGadget(#Button1, 700, 30, 80, 22, "Clique moi")
ButtonGadget(#Button2, 700, 60, 80, 22, "Clique moi")

;Boucle évenementielle
Repeat 
  Select WaitWindowEvent() ;Un évenement est arrivé
    Case #PB_Event_Gadget  ;Est un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparement oui : On cherche qui 
          
        Case #Button1 ;Clique sur le bouton 1
          AfficheMessage()
            
        Case #Button1 ;Clique sur le bouton 2
          AfficheMessage()
 
      EndSelect
      
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenetre ?
      End ;Apparement oui : Fermeture de la fenêtre.
  EndSelect
ForEver

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:32
par klystron
Oui , mais le deuxieme bouton ne sort pas de message .

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:38
par klystron
je ne vois pas pourquoi le bouton du bas ne fonctionne pas

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:38
par falsam
klystron a écrit :Oui , mais le deuxieme bouton ne sort pas de message .
Oui et pourquoi ?
Décortique le code dans la boucle événementielle :)

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:40
par klystron
il faut mettre bouton 2 aulieu de bouton 1

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:41
par klystron
case bouton 1 faut mettre bouton 2

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:48
par klystron
Oui ça marche apres essai :D

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 22:51
par falsam
klystron a écrit :Oui ça marche apres essai :D
Voila un joli débogage de code :)

Effectivement c'était ça: Correction du code

Code : Tout sélectionner

Enumeration Fenetre ;Pour le moment il y en a qu'une 
  #MaFenetre
EndEnumeration

Enumeration Gadgets
  #Button1
  #Button2
EndEnumeration

Procedure AfficheMessage()
  MessageRequester("Information", "Vous avez cliqué sur le bouton")
EndProcedure

;Ouverture d'une fenêtre
OpenWindow(#MaFenetre, 100, 100, 800, 600, "Surface d'un triangle rectangle")

;Création d'un bouton 
ButtonGadget(#Button1, 700, 30, 80, 22, "Clique moi")
ButtonGadget(#Button2, 700, 60, 80, 22, "Clique moi")

;Boucle évenementielle
Repeat 
  Select WaitWindowEvent() ;Un évenement est arrivé
    Case #PB_Event_Gadget  ;Est un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparement oui : On cherche qui 
          
        Case #Button1 ;Clique sur le bouton 1
          AfficheMessage()
            
        Case #Button2 ;Clique sur le bouton 2
          AfficheMessage()
 
      EndSelect
      
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenetre ?
      End ;Apparement oui : Fermeture de la fenêtre.
  EndSelect
ForEver

Re: calcul surface d'un rectangle pour me familiariser avec

Publié : mar. 02/déc./2014 23:00
par falsam
Revenons sur les procédures. (On va oublié 5 secondes les fenêtres)

Comme je l'ai précisé auparavant : Une procédure est une partie du code indépendante du programme principal qui peut avoir des paramètres et ses propres variables.

Image

Nous allons voir comment faire a travers une procédure qui nous permet de calculer la surface d'un triangle rectangle.

Code : Tout sélectionner

Procedure Surface(AB.i, AC.i)
  Protected Resultat.i
  
  Resultat = (AB * AC)/2
  Debug Resultat
EndProcedure

Surface(3,4)
■ La procedure Surface reçoit en paramètres le cotes AB et le cotes AC d'un triangle rectangle.
■ Une variable protégé interne (Resultat.i) à cette procédure recevra ce résultat.
■ Si AB = 3 et AC = 4, L'appel à cette procédure se fera de cette manière Surface(3,4)