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

Langage Delphi Discussion :

Problème de stack overflow


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut Problème de stack overflow
    Salut a tous, je dois vréer une calculatrice mais voila, lorsque je la lance, j'ai un problème de stack overflow et je ne comprends pas les raisons, pourriez vous m'aider en analysant mon code :

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    unit Unit1;
     
    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;
        Button16: TButton;
        Button17: TButton;
        Edit1: TEdit;
        procedure Button2Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button15Click(Sender: TObject);
        procedure Button14Click(Sender: TObject);
        procedure Button9Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
        procedure Button13Click(Sender: TObject);
        procedure Button12Click(Sender: TObject);
        procedure Button11Click(Sender: TObject);
        procedure Button10Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button16Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button17Click(Sender: TObject);
        procedure initialisation();
        procedure calculsuite();
     
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      res,nbr1,nbr2 : integer;
      operateur : byte;
      temp : String;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.initialisation();
    begin
    res:=0;
    nbr1:=0;
    nbr2:=0;
    temp:='';
    operateur:=0;
    end;
     
    procedure TForm1.calculsuite();
    begin
    nbr2:=StrToInt(Edit1.Text);
      case operateur of
        1 : res:=res+nbr1+nbr2;
        2 : res:=res-nbr1-nbr2;
        3 : res:=res*nbr1*nbr2;
        4 : if (nbr1<>0) and (nbr2<>0) then res:=res div nbr1 div nbr2
            else if (nbr1=0) xor (nbr2=0) then Edit1.Text:='division par zero impossible';
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'1';
    end;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'2';
    end;
     
    procedure TForm1.Button6Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'3';
    end;
     
    procedure TForm1.Button15Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'4';
    end;
     
    procedure TForm1.Button14Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'5';
    end;
     
    procedure TForm1.Button9Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'6';
    end;
     
    procedure TForm1.Button8Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'7';
    end;
     
    procedure TForm1.Button13Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'8';
    end;
     
    procedure TForm1.Button12Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'9';
    end;
     
    procedure TForm1.Button11Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'0';
    end;
     
    procedure TForm1.Button10Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=1;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    Button10Click(Sender);
    Button4Click(Sender);
    Button3Click(Sender);
    Button16Click(Sender);
    Button1Click(Sender);
    Button7Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=2;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    Button10Click(Sender);
    Button4Click(Sender);
    Button3Click(Sender);
    Button16Click(Sender);
    Button1Click(Sender);
    Button7Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=3;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    Button10Click(Sender);
    Button4Click(Sender);
    Button3Click(Sender);
    Button16Click(Sender);
    Button1Click(Sender);
    Button7Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button16Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=4;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    Button10Click(Sender);
    Button4Click(Sender);
    Button3Click(Sender);
    Button16Click(Sender);
    Button1Click(Sender);
    Button7Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    temp:=Edit1.Text;
    Edit1.Clear;
    nbr1:=0;
    end;
     
    procedure TForm1.Button7Click(Sender: TObject);
    begin
    Edit1.Text:=temp;
    nbr1:=StrToInt(temp);
    end;
     
    procedure TForm1.Button17Click(Sender: TObject);
    begin
     
      nbr2:=StrToInt(Edit1.Text);
      temp:='';
     
      case operateur of
        1 : begin
                res:=res+nbr1+nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        2 : begin
                res:=res-nbr1-nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        3 : begin
                res:=res*nbr1*nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        4 : begin
                if (nbr1<>0) and (nbr2<>0) then
                begin
                   res:=res div nbr1 div nbr2;
                   Edit1.Text:=IntToStr(res);
                end
                else if (nbr1=0) xor (nbr2=0) then Edit1.Text:='division par zero impossible'
                else if (nbr1=0) and (nbr2=0) then Edit1.Text:='résultat non défini';
            end;
     
      end;
     
      res:=0;
      nbr1:=0;
      nbr2:=0;
     
    end;
     
    end.
    merci a tous.

  2. #2
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    dans les trois ou quatre evenement de ce type :
    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
    procedure TForm1.Button10Click(Sender: TObject); 
    begin 
    nbr1:=StrToInt(Edit1.Text); 
    Edit1.Clear; 
    operateur:=1; 
    Button2Click(Sender); 
    Button5Click(Sender); 
    Button6Click(Sender); 
    Button15Click(Sender); 
    Button14Click(Sender); 
    Button9Click(Sender); 
    Button8Click(Sender); 
    Button13Click(Sender); 
    Button12Click(Sender); 
    Button11Click(Sender);
     
    Button10Click(Sender);    < ====== LA !
     
    Button4Click(Sender); 
    Button3Click(Sender); 
    Button16Click(Sender); 
    Button1Click(Sender); 
    Button7Click(Sender); 
    calculsuite(); 
    end;
    A chaque fois tu rappel l'evenement OnClick du meme bouton dans sur lequel est declencher cet evenement

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button10Click(Sender: TObject); 
    begin
       Button10Click(Sender);
    end;
    C'est de la recursivité infinie la !!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut
    oups, j'ai pas assez réfléchis avant de coder ... lol.
    y aurait t-il une solution pour résoudre mon problème de récursivité?

  4. #4
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Bah heu virer chaque ligne comme celle que je viens de te donner deja...
    A moins qu'il y est une utilité evidemment ...

    MAis la comme ca je vois pas trop ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut
    j'ai voulu aller trop vite, a la place d'inclure uniquement les évènements pour les nombre, j'ai inclu aussi les opération :p ca y est :p
    lol
    merci pour ton aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut
    le problème maintenant est qu'il me donne directement les nombre de 0..9 dans mon Edit alors que je n'ai pas cliqué sur un boutton... encore besoin de ton aide :p si ce n'est pas trop abusé :p

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    unit Unit1;
     
    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;
        Button16: TButton;
        Button17: TButton;
        Edit1: TEdit;
        procedure Button2Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button15Click(Sender: TObject);
        procedure Button14Click(Sender: TObject);
        procedure Button9Click(Sender: TObject);
        procedure Button8Click(Sender: TObject);
        procedure Button13Click(Sender: TObject);
        procedure Button12Click(Sender: TObject);
        procedure Button11Click(Sender: TObject);
        procedure Button10Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button16Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button7Click(Sender: TObject);
        procedure Button17Click(Sender: TObject);
        procedure initialisation();
        procedure calculsuite();
     
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      res,nbr1,nbr2 : integer;
      operateur : byte;
      temp : String;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.initialisation();
    begin
    res:=0;
    nbr1:=0;
    nbr2:=0;
    temp:='';
    operateur:=0;
    end;
     
    procedure TForm1.calculsuite();
    begin
    nbr2:=StrToInt(Edit1.Text);
    Edit1.Clear;
      case operateur of
        1 : res:=res+nbr1+nbr2;
        2 : res:=res-nbr1-nbr2;
        3 : res:=res*nbr1*nbr2;
        4 : if (nbr1<>0) and (nbr2<>0) then res:=res div nbr1 div nbr2
            else if (nbr1=0) xor (nbr2=0) then Edit1.Text:='division par zero impossible';
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'1';
    end;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'2';
    end;
     
    procedure TForm1.Button6Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'3';
    end;
     
    procedure TForm1.Button15Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'4';
    end;
     
    procedure TForm1.Button14Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'5';
    end;
     
    procedure TForm1.Button9Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'6';
    end;
     
    procedure TForm1.Button8Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'7';
    end;
     
    procedure TForm1.Button13Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'8';
    end;
     
    procedure TForm1.Button12Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'9';
    end;
     
    procedure TForm1.Button11Click(Sender: TObject);
    begin
    Edit1.Text:=Edit1.Text+'0';
    end;
     
    procedure TForm1.Button10Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=1;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=2;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=3;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button16Click(Sender: TObject);
    begin
    nbr1:=StrToInt(Edit1.Text);
    Edit1.Clear;
    operateur:=4;
    Button2Click(Sender);
    Button5Click(Sender);
    Button6Click(Sender);
    Button15Click(Sender);
    Button14Click(Sender);
    Button9Click(Sender);
    Button8Click(Sender);
    Button13Click(Sender);
    Button12Click(Sender);
    Button11Click(Sender);
    calculsuite();
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    temp:=Edit1.Text;
    Edit1.Clear;
    nbr1:=0;
    end;
     
    procedure TForm1.Button7Click(Sender: TObject);
    begin
    Edit1.Text:=temp;
    nbr1:=StrToInt(temp);
    end;
     
    procedure TForm1.Button17Click(Sender: TObject);
    begin
     
      nbr2:=StrToInt(Edit1.Text);
      temp:='';
     
      case operateur of
        1 : begin
                res:=res+nbr1+nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        2 : begin
                res:=res-nbr1-nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        3 : begin
                res:=res*nbr1*nbr2;
                Edit1.Text:=IntToStr(res);
            end;
        4 : begin
                if (nbr1<>0) and (nbr2<>0) then
                begin
                   res:=res div nbr1 div nbr2;
                   Edit1.Text:=IntToStr(res);
                end
                else if (nbr1=0) xor (nbr2=0) then Edit1.Text:='division par zero impossible'
                else if (nbr1=0) and (nbr2=0) then Edit1.Text:='résultat non défini';
            end;
     
      end;
     
      res:=0;
      nbr1:=0;
      nbr2:=0;
     
    end;
     
    end.

  7. #7
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    J'ai pas bien compris. Quand est ce qu'il te donne ce nombre de 0..9 ?
    Dans le create ... ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut
    non, dans le Edit1.Text, quand j'appuye sur l'opérateur, il met dans Edit1.text :"1234567890"

  9. #9
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Bonjour,

    Pourrais tu renommer tes boutons s'il te plait dans le code que tu proposes ? je n'arrive toujours pas à comprendre l'utilité d'appeler tous ces onClick. Alors si je voyais un B_Plus, B_Moins, B_Multiplier, B_Diviser, B_1, B_2, B_3 etc... je crois que le code serait beaucoup plus clair et tout le monde pourrait tenter de t'aider !

    Courage tu vas y arriver à faire une zoulie calculatrice !

    Edit :
    non, dans le Edit1.Text, quand j'appuye sur l'opérateur, il met dans Edit1.text :"1234567890"
    As tu mis des points d'arrêt sur tes procédures pour essayer de comprendre ton erreur ?
    As tu griffoné une petite analyse avec un crayon et un papier avant de te lancer dans le code ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 158
    Points : 103
    Points
    103
    Par défaut
    ok ok merci, je vais faire ca en vitesse

  11. #11
    bjl
    bjl est déconnecté
    Membre averti Avatar de bjl
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : Brésil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 263
    Points : 338
    Points
    338
    Par défaut
    bonjour,

    lorsque tu appuies sur ton opérateur, tu rappelles les

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Button2Click(Sender); 
    Button5Click(Sender); 
    Button6Click(Sender); 
    Button15Click(Sender); 
    Button14Click(Sender); 
    Button9Click(Sender); 
    Button8Click(Sender); 
    Button13Click(Sender); 
    Button12Click(Sender); 
    Button11Click(Sender);
    ce qui a pour effet de réécrire tous les chiffres dans ton edit1

    comme en plus, ta procédure calculsuite ne remet pas à jour edit1.......

  12. #12
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Je me suis amuser à faire une calculatrice mode très light
    à savoir qu'elle n'a que 5 boutons :

    1, 2, +, -, =

    Mais le fonctionnement est bien là, et je n'ai pas eu besoin d'appeler tous ces OnClick, ça me paraissait louche aussi !

    Voici le code dont tu peux t'inspirer pour continuer ton exercice, amuse toi bien !

    NB : C'est la version Light, il manque des tests, des boutons etc, c'est juste pour l'exemple.

    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
     
     
    type
      TForm1 = class(TForm)
        TxtResultat: TEdit;
        B1: TButton;
        B2: TButton;
        BPlus: TButton;
        BMoins: TButton;
        BEgal: TButton;
        procedure FormCreate(Sender: TObject);
        procedure B1Click(Sender: TObject);
        procedure B2Click(Sender: TObject);
        procedure BPlusClick(Sender: TObject);
        procedure BMoinsClick(Sender: TObject);
        procedure BEgalClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    Const
      AUCUN : Integer = 0;
      PLUS : Integer = 1;
      MOINS : Integer = 2;
    var
      Form1: TForm1;
     
      Operateur : Integer;
      DerniereSaisie : Integer;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.B1Click(Sender: TObject);
    begin
      TxtResultat.text:=TxtResultat.text+'1';
    end;
     
    procedure TForm1.B2Click(Sender: TObject);
    begin
      TxtResultat.text:=TxtResultat.text+'2';
    end;
     
    procedure TForm1.BPlusClick(Sender: TObject);
    begin
      If TxtResultat.text='' then
        exit;
      //Lancement du calcul précédent
      BEgal.Click;
      Operateur := PLUS;
      DerniereSaisie:=StrToInt(TxtResultat.text);
      TxtResultat.text:='';
    end;
     
    procedure TForm1.BMoinsClick(Sender: TObject);
    begin
      If TxtResultat.text='' then
        exit;
      //Lancement du calcul précédent
      BEgal.Click;
      Operateur := MOINS;
      DerniereSaisie:=StrToInt(TxtResultat.text);
      TxtResultat.text:='';  
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //Initialisation de l'opérateur
      Operateur := AUCUN;
      DerniereSaisie := 0;
      TxtResultat.text:='';
    end;
     
    procedure TForm1.BEgalClick(Sender: TObject);
    begin
      If TxtResultat.text='' then
        exit;
      case Operateur of
      0 :    //AUCUN
        begin
          exit;
        end;
      1 :   //PLUS
        begin
          TxtResultat.text:=IntToStr(DerniereSaisie+StrToInt(TxtResultat.text));
          DerniereSaisie:=0;
          Operateur := AUCUN;
        end;
      2 :  //MOINS
        begin
          TxtResultat.text:=IntToStr(DerniereSaisie-StrToInt(TxtResultat.text));
          DerniereSaisie:=0;
          Operateur := AUCUN;
     
        end;
      end;
    end;

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par heider
    ok ok merci, je vais faire ca en vitesse
    C'est peut être là que le bât blesse
    Si je peux me permettre un conseil, tu devrais revoir l'utilisation d'une procédure/méthode et celle d'un gestionnaire d'événements.

    Cordialement.

  14. #14
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    on sent que 'expérience parle ;-)

    e-ric

Discussions similaires

  1. Problème stack overflow
    Par Diabolikjo dans le forum Langage
    Réponses: 0
    Dernier message: 31/07/2011, 18h54
  2. Problème stack overflow
    Par chuko dans le forum Assembleur
    Réponses: 1
    Dernier message: 07/11/2009, 16h50
  3. Problème de stack overflow
    Par tnarol dans le forum Visual C++
    Réponses: 1
    Dernier message: 08/06/2007, 21h07
  4. Stack OverFlow
    Par Goundy dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2005, 21h35
  5. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16

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