IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Calculatrice et opération


Sujet :

Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut Calculatrice et opération
    Bonjour,

    je veux faire une calculatrice . Je suis sous delphi 2005.
    J'ai 1 seul label qui doit me permettre d'effectuer les opérations comme la calculatrice standard de Windows!
    Mon problème est que je ne vois pas comment faire,

    Lorsque j'appuie sur le bouton "2" , je dois choisir l'opération "+,-,/,*," et j'appuie sur le bouton "3", le résultat doit me s'afficher dans le label !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    unit cal5;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        Button8: TButton;
        Button9: TButton;
        Button10: TButton;
        Button11: TButton;
        Button12: TButton;
        Button13: TButton;
        Button14: TButton;
        Button15: TButton;
        Label1: TLabel;
        Button16: TButton;
        procedure Button10Click(Sender: TObject);
        procedure Button9Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button16Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     label1.caption:=Button1.caption;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
              label1.caption:=Button2.caption;
    end;
     
    procedure TForm1.Button16Click(Sender: TObject);
    begin
    close();
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
        label1.Caption:= button3.Caption ;
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
                 label1.Caption:= button4.Caption ;
    end;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
              label1.Caption:= button5.Caption ;
    end;
     
    procedure TForm1.Button6Click(Sender: TObject);
    begin
          label1.Caption:= button6.Caption ;
    end;
     
    procedure TForm1.Button7Click(Sender: TObject);
    begin
                label1.Caption:= button7.Caption ;
    end;
     
    procedure TForm1.Button8Click(Sender: TObject);
    begin
              label1.Caption:= button8.Caption ;
    end;
     
    procedure TForm1.Button9Click(Sender: TObject);
    begin
               label1.Caption:= button9.Caption ;
    end;
     
    procedure TForm1.Button10Click(Sender: TObject);
    begin
              label1.Caption:= button10.Caption ;
    end;
     
    end.
    Je ne vois pas comment faire sa lorsque je cliques sur le bouton "+" et à la fin le bouton "=" qui doit me rendre le résultat?

    Ce que je cherche c'est comment on procède au niveau conception ?

  2. #2
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Bonjour, avant tout je te propose de regrouper toutes les procédures onClick sur les chiffres en une seule, puisqu'elles font toute le même traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.ButtonClick(Sender: TObject);
    begin
     label1.caption:=Sender.caption;
    end;
    Il suffit alors d'attacher cette procédure à l'évenement onClick de chaque bouton dans l'inspecteur d'objet. Ainsi à chaque fois qu'on cliquera sur un bouton ce sera cette procédure qui sera appelée.

    Ensuite il faudrait déclarer au moins 3 variables pour stocker les opérandes et l'opérateur des calculs, et éventuellement une 4e pour stocker le résultat à afficher.

  3. #3
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Tes phrases ne sont pas claires (essaye sujet+verbe+complément).
    Le principe c'est d'avoir des variables intermédiaires qui stockent tes saisies.
    SI tu pars sur un principe simple 2 valeurs + 1 opération tu as un variable qui staocke la 1ere valeur, une qui stocke l'opération et une qui stocke la 2 eme valeur.
    Dans tes évenements 'onClick' tu gères où tu en es de ton calcul (saisie de la valeur 1, de l'opération, de la valeur 2).
    Commences par des choses simples style calculs à 1 chiffre puis après tu gères les autres cas de figures.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    Je veuxécrir la procédure associée à l'événement OnClick qui ajoute le chiffre à la droite de la valeur déjà présente dans la zone d'édition.
    Voila ce que je veux faire,

    Merci pour ta répense mais pour l'instant je ne cherche pas à optimiser le programme, ( je suis débutant, mais à prés avoir réussi cette étape j'optimiserai )

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    Tes phrases ne sont pas claires (essaye sujet+verbe+complément).
    Le principe c'est d'avoir des variables intermédiaires qui stockent tes saisies.
    SI tu pars sur un principe simple 2 valeurs + 1 opération tu as un variable qui staocke la 1ere valeur, une qui stocke l'opération et une qui stocke la 2 eme valeur.
    Dans tes évenements 'onClick' tu gères où tu en es de ton calcul (saisie de la valeur 1, de l'opération, de la valeur 2).
    Commences par des choses simples style calculs à 1 chiffre puis après tu gères les autres cas de figures.
    Le plus simple serait de passer par un Tedit, comme sa je rentre directement les chiffres que je veux pui je les stock dans une autre variable.
    Cependant je ne veux pas procéder comme sa, j'ai un exo à faire qui m'impose de faire comme ce que j'ai décrit au préalable .

  6. #6
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Tu devras ajouter dans l'evenement onClick des boutons une instruction d'affectation.
    En gros, quand tu cliques sur un chiffre, ça doit stocker ce chiffre dans une variable chiffre1, ou dans chiffre2. Pour savoir dans laquelle le chiffre doit etre stocké tu peux tester la valeur de la variable qui stocke l'opérateur.
    Si cette variable contient un operateur c'est qu'il faut stocker le prochain chiffre dans chiffre2.
    Bien sur pour que ça marche il faudra réinitialiser la variable qui stocke l'opérateur après chaque calcul.

    A toi de réfléchir à la manière de représenter les opérateurs en mémoire (string, caractère, constante entière qui représente l'opération...).

    C'est déjà un début de réflexion.

  7. #7
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Je veuxécrir la procédure associée à l'événement OnClick qui ajoute le chiffre à la droite de la valeur déjà présente dans la zone d'édition.
    Voila ce que je veux faire,
    Donc en résumé tu souhaite pouvoir écrire "32" dans ton label si au préalable tu avais "3" et que tu tape sur la touche 2?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label1.Caption:=label1.Caption + sender.Caption;
    A+.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    oui c'est "3 + 2" que je veux afficher !

    sinon "sender.Caption;" il sert à quoi ici ?

  9. #9
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Relit plus haut (la première réponse que tu as reçu)...
    Sender c'est une sorte de pointeur qui te permet de savoir lequel de tes composants à appeler la procédure OnClick (ainsi tu peux regrouper toutes tes procédures OnClick de tes TButton sous une seule).
    En gros sender vaudra button1 si tu click sur button1, button2 si tu click sur button2...

    A+.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    donc je dois enlevé toutes mes procédures concernant le onclick pour mes boutons !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Buttonclick(Sender: TObject);[Erreur] cal5.pas(143): E2003 Identificateur non déclaré : 'ButtonClick'
    var
    
    begin
     label1.caption:=Sender.caption;[Erreur] cal5.pas(145): E2003 Identificateur non déclaré : 'Sender'
    end;

    Il faut les déclarer buttonclick , oui ok mais comment ??

  11. #11
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Le plus simple:
    Tu gardes ta procédure pour un de tes boutons (le 1 par exemple).
    Puis dans "inspecteur d'objet" => "Evenement => "OnClick" de tous tes boutons tu selectionnes la procedure de ton bouton1.

    A+.

  12. #12
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Il y à un bout de temps déjà, j'ai réalisé une calculatrice (très basique).
    Afin de mieux comprendre le fonctionnement, je te mets à disposition les sources ...
    J'espère que celà t'aidera ...
    Fichiers attachés Fichiers attachés

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Pour compléter l'info de 11h58 de PadawanDuDelphi sur l'utilisation de "inspecteur d'objet" ne pas oublier de remplacer dans le code l'instruction label1.caption := Sender.caption; par label1.caption := (Sender as TButton).caption;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    hola , j'ai toutes informations que je voulais ?

    Merci beaucoup , je vais pouvoir faire m'amuser comme un petit fou looool !

Discussions similaires

  1. [TPW] Calculatrice effectuant des opérations sur les entiers longs
    Par forum dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 04/12/2011, 11h36
  2. Nouvelles opérations pour ma calculatrice.
    Par ariuss dans le forum Débuter
    Réponses: 3
    Dernier message: 12/10/2009, 15h59
  3. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  4. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45
  5. opération en XSL
    Par rastapopulos dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo