calcul surface d'un rectangle pour me familiariser avec pb .

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message par Ollivier »

Bienvenu à toi Micheao.

@Marc56

J'ajoute une petite remarque sur les polices : la fonction native FontID() est nécessaire.

@Klystron

Ce n'était pas une consigne (je ne suis pas habilité!) : c'est pour dire qu'on se rend bien compte que ce n'est pas extrêmement compliqué d'ajouter un paramètre.
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

Bonjour Olivier,
concernant le bout de code de Falsam, oui c'est super propre :D
je vais regardé cela .
A+
*************************************
me voila revenu, mais je ne sais pas ou placer la ligne setgadgetFont ( ... ) apres openwindow... element d'un triangle rectangle ?.ou avant cette ligne ?

mon code actuellement :

Code : Tout sélectionner


; exemple de programme code pour initiation au purebasic.
;---------------------------------------------------------------------------------------

Enableexplicit  ; pour messages d'erreur des varables.

Enumeration Fonts
  #FontGlobal
  #FontBold
  #FontTitre
EndEnumeration

Enumeration Window
  #MaFenetre
EndEnumeration

Enumeration Gadget
  #Longueur
  #Largeur
  #Surface
  #Hypotenuse
  #Perimetre
  #Bouton_Calculer                  ; Déclarer l'ID du bouton Calculer
EndEnumeration


Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget


;-------------------Création de la fenetre et des différents gadgets-------------------------

Procedure Open_MainForm()
  OpenWindow(#MaFenetre, 100, 100, 800, 600, " -Elements d'un triangle rectangle- ")

  TextGadget(#PB_Any, 10, 35, 100, 22, "Longueur")
  StringGadget(#Longueur, 120, 30, 80, 22, "")

  TextGadget(#PB_Any, 10, 65, 100, 22, "Largeur")
  StringGadget(#Largeur, 120, 60, 80, 22, "")

  TextGadget(#PB_Any, 10, 100, 100, 22, "Surface")
  StringGadget(#Surface, 120, 100, 80, 22, "", #PB_String_ReadOnly)    ;Ce gadget sera en lecture seule
  

  TextGadget(#PB_Any, 10, 135, 100, 22, "Hypotenuse")
  StringGadget(#Hypotenuse, 120, 135, 80, 22, "", #PB_String_ReadOnly)  ;Ce gadget sera en lecture seule


  TextGadget(#PB_Any, 10, 170, 100, 22, "Perimetre")
  StringGadget(#Perimetre, 120, 170, 80, 22, "", #PB_String_ReadOnly)   ;Ce gadget sera en lecture seule


  ButtonGadget(#Bouton_Calculer, 10, 220, 100, 25, "Calculer")          ; Le bouton Calculer
EndProcedure

;-----------------Calcul de la surface d'un triangle rectangle-------------------------

Procedure CalculSurface(Longueur.f, largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f

  Resultat = (AB * AC)/2              ;Inutile de repeter le typage .f (float) à résultat car déja déclaré

  SetGadgetText(#Surface, StrF(Resultat, 3)) ;Affichage du résultat avec 3 décimales
EndProcedure

;-------------------------Calcul de l'Hypotenuse---------------------------------
 
Procedure Calculhypotenuse(Longueur.f, Largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f
  
  Protected BC.f                            ;C'est la longueur de l'hypotenuse à retrouver
  
  Resultat = Pow(AB,2) + Pow(AC,2)          ; puissances 2
  
  BC = Sqr(Resultat)                        ; racine carree
  
  SetGadgetText(#Hypotenuse,StrF(BC,3))     ;affichage du resultat avec 3 decimales
EndProcedure

;------------------------------calcul du perimetre du triangle------------------------------

Procedure Calculperimetre(Longueur.f, Largeur.f,BC.f)
  Protected AB.f = longueur
  Protected AC.f = largeur 
  Protected Resultat.f
  
  Resultat = AB + AC + BC
 
  SetGadgetText(#perimetre,StrF(Resultat,3))     ;affichage du resultat avec 3 decimales
EndProcedure

;----------------------Le programme commence ici : On ouvre la fenêtre--------------------------
 
Open_MainForm()

;---------------------------------Boucle événementielle---------------------------------------
 
Repeat
  Select WaitWindowEvent()       ;Un événement est arrivé
    Case #PB_Event_Gadget        ;Est ce un gadget qui a provoqué l'événement ?
      Select EventGadget()       ;Apparemment oui : On cherche qui

           
        Case #Bouton_Calculer      ; Je provoque le déclenchement par le bouton Calculer

;------------------------- on appelle les procedures:------------------------------------

          CalculSurface(ValF(GetGadgetText(#Longueur)),
                        ValF(GetGadgetText(#Largeur))) 
  
          Calculhypotenuse(ValF(GetGadgetText(#Longueur)),
                           ValF(GetGadgetText(#Largeur)))

          Calculperimetre(ValF(GetGadgetText(#longueur)),
                          ValF(GetGadgetText(#largeur)),
                          ValF(GetGadgetText(#hypotenuse))) 
         
      
       EndSelect 
             
      
    Case #PB_Event_CloseWindow      ;Est ce une fermeture de la fenêtre ?

      End                           ;Apparemment oui : Fermeture de la fenêtre.
     
  EndSelect

ForEver


; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 81
; FirstLine = 83
; Folding = -
; EnableUnicode
; EnableXP
; Executable = triangle_ecole.exe
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

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

Message par Micheao »

merci klystron

je suis entrain d'etudié ton code pour apprendre

merci beaucoup à tous
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

je pense que dans global il y a des mots non déclarés ?

salut Gaétan, je suis comme toi j'essaye de comprendre , pas évident :D
mais petit a petit ca va , faut pas tout faire en meme temps si non on est saturé ...
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message par Marc56 »

falsam a écrit :Bonjour Marc. Non il est possible d'affecter une font à l'ensemble des gadgets d'une fenêtre en une seule fois avec : SetGadgetFont(#PB_Any, FontID(#Fontglobal))
:o Super.
J'aurais dû lire plus attentivement l'aide dès le début (et pourtant c'était sur la première ligne)

Si la valeur de #Gadget est #PB_Default, alors la police par défaut utilisée par les nouveaux gadgets est changée par la nouvelle valeur.

Merci pour ce rappel :wink:
Ça va grandement me simplifier la vie. Dire que j'ai tartiné une ligne de trop pour presque tous mes gadgets :roll: :mrgreen:
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

salut Marc56,
je ne sais pas si en debut de programme ( enumeration fonts) est bon alors ?
comme la ligne ( global ) , y'a peut-être plus simple ?.
je verrais avec Falsam mon maitre .
a+

PS/ la derniere fenetre que Falsam a faites est réglable en dimensions , je viens de voir cela .
Dernière modification par klystron le dim. 07/déc./2014 14:47, modifié 1 fois.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message par Marc56 »

klystron a écrit :je pense que dans global il y a des mots non déclarés ?

Code : Tout sélectionner

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Regarde bien cette ligne, c'est juste « l'externalisation » des paramètres optionnels de la fenêtre (OpenWindow)
(ça permet de soulager le code et de ne l'écrire qu'une seule fois si on fait plusieurs fenêtres)

(Mais il été oublié dans la suite. Je pense que la ligne OpenWindow aurait dû être)

Code : Tout sélectionner

OpenWindow(#MaFenetre, 100, 100, 800, 600, " -Elements d'un triangle rectangle- ", WindowStyle)
Ce qui est équivalent à

Code : Tout sélectionner

OpenWindow(#MaFenetre, 100, 100, 800, 600, " -Elements d'un triangle rectangle- ", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
:wink:

PS. N'oublie pas que Global n'est pas une commande, mais une qualification qui indique que la variable qui suit est accessible partout y compris dans une procédure.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

@klystron: Tu as bien déclaré tes identifiant de fonts mais je ne vois aucune ligne permettant de charger les fonts.

J'ai du allé trop vite dans le code que j'ai fourni. !

Allez c'est parti pour un petit tutoriel.

[ Comment changer la police de caractère d'une application ]

■ Un code basic affichant une fenêtre.
Reprenons depuis le début : Voici un code trés simple qui pour le moment utilise la police de caractére par défaut de ton ordinateur.

Code : Tout sélectionner

Enumeration Windows
  #Mainform
EndEnumeration

Enumeration Gadgets
  #Nom
  #Adresse
  #Valider
EndEnumeration

Procedure Open_MainForm()
    
  ;Ouverture de la fenêtre
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form")
  
  TextGadget(#PB_Any, 20, 80, 100, 22, "Nom")
  StringGadget(#Nom, 150, 80, 200, 22, "")
  
  TextGadget(#PB_Any, 20, 105, 100, 22, "Adresse")
  EditorGadget(#Adresse, 150, 105, 200, 100)
  
  ButtonGadget(#Valider, 400, 80, 80, 22, "Valider")
  
  SetActiveGadget(#Nom)
EndProcedure

Open_MainForm()

Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
:arrow: Tu peux le tester avant de passer la suite.

■ On souhaite ajouter une police globale.
Insère ce code au début du code précédent

Code : Tout sélectionner

Enumeration Fonts
  #FontGlobal
EndEnumeration
On déclare ici comme une sorte de variable qui va recevoir l'identifiant de la police de caractére qu'on va charger plus loin.

Justement chargeons cette police: Insére ce code au début de la procédure Open_MainForm()

Code : Tout sélectionner

;Chargement font global
  LoadFont(#FontGlobal, "Arial", 12) 
On charge ici la police "Arial" avec une taille de 12 pixels.

et c'est pas fini :mrgreen:

Maintenant tu va affecter cette font à l'ensemble de ton application.

Insére ce code juste avant l'ouverture de la fenêtre.

Code : Tout sélectionner

  ;Affectation de la font global à l'ensemble de la fenetre
  SetGadgetFont(#PB_Default, FontID(#Fontglobal))
■ Pour finir.
A l’exécution de ton code, l'ensemble des gadgets s'affiche avec la police Arial et une taille de 12 pixels.

Allez à toi de jouer et montre nous ce code exemple avec les modifications permettant de changer la taille de la police de caractére. :)
Dernière modification par falsam le dim. 07/déc./2014 15:21, modifié 3 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

ok merci Marc56 pour les infos.
je vais essayé de ne pas me trompé :D
******************************************
bonjour Falsam ,
je viens de voir ton tuto je me penche dessus ...

j'ai une erreur a la ligne 20 en rouge 8O

voici mon code :

Code : Tout sélectionner



Enumeration Fonts
  #FontGlobal
EndEnumeration

Enumeration Windows
  #Mainform
EndEnumeration

Enumeration Gadgets
  #Nom
  #Adresse
  #Valider
EndEnumeration

Procedure Open_MainForm()
    ;Affectation de la font global à l'ensemble de la fenetre
  SetGadgetFont(#PB_Default, FontID(#Fontglobal))

  ;Ouverture de la fenêtre
;Chargement font global

  LoadFont(#FontGlobal, "Arial", 12) 
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  
  TextGadget(#PB_Any, 20, 80, 100, 22, "Nom")
  StringGadget(#Nom, 150, 80, 200, 22, "")
  
  TextGadget(#PB_Any, 20, 105, 100, 22, "Adresse")
  EditorGadget(#Adresse, 150, 105, 200, 100)
  
  ButtonGadget(#Valider, 400, 80, 80, 22, "Valider")
  
  SetActiveGadget(#Nom)
EndProcedure

Open_MainForm()

Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
Dernière modification par klystron le dim. 07/déc./2014 15:06, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message par Ollivier »

Effectivement, c'est une jolie "feinte" falsam! C'est élégant!

Autrement dit, "SetGadgetFont(#PB_Any, FontID(Police) )" est à placer juste avant le prochain gadget à créer dans la police souhaitée.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Ollivier a écrit :Autrement dit, "SetGadgetFont(#PB_Any, FontID(Police) )" est à placer juste avant le prochain gadget
Si tu places cette ligne avant l'ouverture de ta fenêtre, c'est l'ensemble des gadgets que tu crées dans cette fenêtre qui auront cette même police.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

@
klystron a écrit :'ai une erreur a la ligne 20 en rouge
Tu as cette erreur parce que tu fais ton SetGadgetFont(#PB_Default, FontID(#Fontglobal)) avant de charger la police. Lis bien à nouveau le mini tutoriel :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

la ca passe ...

Code : Tout sélectionner

Enumeration Fonts
  #FontGlobal
EndEnumeration

Enumeration Windows
  #Mainform
EndEnumeration

Enumeration Gadgets
  #Nom
  #Adresse
  #Valider
EndEnumeration

Procedure Open_MainForm()
  
  ;Ouverture de la fenêtre
;Chargement font global

  LoadFont(#FontGlobal, "Arial", 12) 
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  
    ;Affectation de la font global à l'ensemble de la fenetre
  SetGadgetFont(#PB_Default, FontID(#Fontglobal))

  TextGadget(#PB_Any, 20, 80, 100, 22, "Nom")
  StringGadget(#Nom, 150, 80, 200, 22, "")
  
  TextGadget(#PB_Any, 20, 105, 100, 22, "Adresse")
  EditorGadget(#Adresse, 150, 105, 200, 100)
  
  ButtonGadget(#Valider, 400, 80, 80, 22, "Valider")
  
  SetActiveGadget(#Nom)
EndProcedure

Open_MainForm()

Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 14
; FirstLine = 2
; Folding = -
; EnableUnicode
; EnableXP
*******************************************
bon je l'ai essayé en test .
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Et bien voila c'est pas mal. Tu n'as plus qu'à faire la même chose sur ton code :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

pour mon code triangle c'est la meme chose ?
donc le texte que j'ai mis enumaration font ... il n'y en a qu'un seul a mettre ?

par defaut il mettera la font windows classique en final ?
Dernière modification par klystron le dim. 07/déc./2014 15:31, modifié 2 fois.
Répondre