Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Taschenrechner Problem: Record, Objekt oder Klassentyp

  Alt 22. Aug 2009, 22:29
Du hast doch beschrieben, was du machen musst

Als erstes gibt der Benutzer ein, was die erste Zahl ist.

Also machst du da einfach ganz am Anfang (du meintest Button2 würde das Zurücksetzen?) "FErsteZahl" oder wie du das genannt hattest" auf 0.
Wenn jetzt jemand auf die 1 drückt, dann willst du ja das in FErsteZahl statt 0 jetzt 1 steht. Nun könntest du einfach sagen: FErsteZahl := 1. Aber was ist, wenn man 11 haben will? Deshalb musst du das etwas erweitern Und zwar kommt eine Stelle hinzu und das macht man im Dezimalsystem mit einer Multiplikation.

So jetzt wird es etwas kompilizierter. Und zwar wenn du auf einem Button (0-9) drückst dann wird im "OnClick"-Ergebnis das aufgerufen:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
  // In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
  // ob darin ein Button steht
  if Sender is TButton then
  begin
    // Jetzt nehmen wir die Zahl mal 10
    // Also wenn wir vorher 1 hatten und jetzt die 2 gedrückt haben wollen wir ja 12
    // Und 12 ist ja: 1 * 10 + 2 also 10 * WasVorherWar + WasJetztGedrücktWurde
    FErsteZahl := FErsteZahl * 10;
    // Und ganz zum schluss musst du ja das neue Ergebnis hinzufügen
    // Dazu gucken wir, welcher Text im übergebenen Button stand (dafür das if da oben)
    FErsteZahl := FErsteZahl + StrToInt(TButton(Sender).Caption);
  end;
end;
So als nächstes solltest du noch ein Operator hinzufügen. Damit du nachher auch weißt was gedrückt wurde.
Also du hast die Buttons "+", "-", "*" und "/". Wenn man darauf klickt wird jetzt folgende Methode ausgeführt:
Delphi-Quellcode:
procedure TForm1.ButtonOperatorClick(Sender : TObject);
begin
  // In Sender steht die Komponente drinne die das ausgelöst hat. Hiermit teste ich
  // ob darin ein Button steht
  if Sender is TButton then
  begin
    // Jetzt speichern wir einfach den Operator
    FOperator := TButton(Sender).Caption[1];
    // Dazu nehme ich das erste Zeichen aus dem Text.

    // Dann die zweite Zahl zurücksetzen
    FZweiteZahl := 0;
  end else
    // Wenn im Sender kein Button stand dann den Operator "ungültig" setzen
    FOperator := #0;
end;
Damit sind wir schon fast fertig. Jetzt müssen wir den Inhalt aus ButtonZifferClick verbessern. Bisher haben wir da ja nur die erste Zahl gesetzt. Jetzt wollen wir da auch die zweite Zahl setzen. Dazu modifizieren wir den Code:
Delphi-Quellcode:
procedure TForm1.ButtonZifferClick(Sender : TObject);
begin
  if Sender is TButton then
  begin
    // NEU: Wenn der Operator "ungültig" ist, dann ändern wir die erste Zahl, ansonsten die zweite
    if FOperator = #0 then
    begin
      FErsteZahl := FErsteZahl * 10 + StrToInt(TButton(Sender).Caption);
    end else
    begin
      FZweiteZahl := FZweiteZahl * 10 + StrToInt(TButton(Sender).Caption);
    end;
  end;
end;
Ich habe dazu den Code etwas optimiert und die Kommentare raus genommen. Als letzten Schritt müssen wir dann nur noch etwas Code ausführen, wenn der "="-Button gedrückt wird:
Delphi-Quellcode:
procedure TForm1.ButtonGleichClick(Sender : TObject);
begin
  // Jetzt überprüfen wir welcher Operator gewählt wurde
  case FOperator of
    '+' : LErgebnis.Caption := IntToStr(FErsteZahl + FZweiteZahl);
    '-' : LErgebnis.Caption := IntToStr(FErsteZahl - FZweiteZahl);
    '*' : LErgebnis.Caption := IntToStr(FErsteZahl * FZweiteZahl);
    '/' : LErgebnis.Caption := FloatToStr(FErsteZahl / FZweiteZahl);
    else LErgebnis.Caption := 'Unvollständige Eingabe';
  end;
  FErsteZahl := 0;
  FZweiteZahl := 0;
  FOperator := #0
end;
So das ist jetzt nicht 100% zu übernehmen. Aber versuche bitten den Code erst zu verstehen.

MfG
xZise

PS: Anfangs war das Problem, dass du "Button.Text" hattest und auch ein Self hat da nicht geholfen Aber die Codevervollständigung (Strg+Leerzeichen) hilft dir da gerne!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat