![]() |
Delphi-Version: 5
Memory Funktion Taschenrechner
Hallo liebe Community,
ich hoffe ihr könnt mir etwas auf die Sprünge helfen, deswegen hier direkt mein Problem: Programm ist ein Taschenrechner. Das Problem dreht sich um die Memory Funktion. Falls jemand damit nichts anfangen kann: MR Taste : Übergibt aktuellen Display Wert an Speicher MC Taste : Setzt Speicher + Display Wert auf 0 M+ Taste : Addiert Speicher Wert zu aktuellem Display Wert M- Taste : Subtrahiert Speicher Wert von aktuellem Display Wert Mein Code:
Code:
Mein Problem besteht in der Übergabe des Display Wert an den Speicher Wert. Es wird kein String übergeben.
procedure TForm1.MemoryFunction(Sender: TObject);
var mem: ansistring; begin if Sender is TSpeedButton then case TSpeedButton(Sender).Name of 'TsbMR': mem := label1.Caption; 'TsbMC': begin mem := '0'; label1.Caption := '0'; end; 'TsbMMinus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) - StrToFloat(mem)); 'TsbMPlus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) + StrToFloat(mem)); end; end; Beim Drücken von M+ und M- kommt Exception EConvertError: "" is an invalid float. Wenn ich mem einen festen Wert z.B mem := '5' zuordne, funktioniert alles ohne Probleme (ausser natürlich die Taste MR zum Setzen des Speicher Werts). (Zeichen werden übrigens auch als ansistring an label1.Caption übergeben, falls das irgendeine Rolle spielen könnte.) Hat jemand von euch zufällig eine Idee bzw. kann mir sagen, wo ich dumm war? :stupid: Vielen Dank für eure Aufmerksamkeit! |
AW: Memory Funktion Taschenrechner
"mem" ist bei dir eine lokale Variable. Beim nächsten Aufruf (M+, M-) ist sie wieder ein leerer String.
|
AW: Memory Funktion Taschenrechner
Denk dir folgende zwei Zeilen hinzu und überleg dir nochmal, was dein Programm wirklich macht, mit so einer lokalen Variable.
Delphi-Quellcode:
[edit]
procedure TForm1.MemoryFunction(Sender: TObject);
var mem: String; begin mem := ''; // <<<<<<<<<< die LOKALE Variable ist zu Beginn leer if Sender is TSpeedButton then case TSpeedButton(Sender).Name of 'TsbMR': mem := label1.Caption; 'TsbMC': begin mem := '0'; label1.Caption := '0'; end; 'TsbMMinus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) - StrToFloat(mem)); 'TsbMPlus': label1.Caption := FloatToStr(StrToFloat(label1.Caption) + StrToFloat(mem)); end; mem := ''; // <<<<<<<<<< die LOKALE Variable wird am Ende der Prozedur gelöscht end; Ich glaube ich hätte zwischendurch mal F5 drücken sollen, wenn die DP schon keine RedBox anzeigt. :cry: |
AW: Memory Funktion Taschenrechner
Oha bin ich dämlich. Vielen Dank! :oops:
|
AW: Memory Funktion Taschenrechner
Sei froh, dass es ein String war ... eine lokale Integer-Variable wird nicht automatisch initialisiert und hat somit zu Beginn potentiel einen "zufälligen" Wert drinnen.
Obwohl, der Compiler würde dich dann darauf hinweisen, dass diese Variable nicht initialisiert wurde, aber wenn man das ignoriert, dann passieren in Programmen komische Dinge. :stupid: |
AW: Memory Funktion Taschenrechner
Zitat:
MR Taste : Übergibt Speicher Wert an Display (MR steht für Memory Recall) M+ Taste : Addiert aktuellen Display Wert zu Speicher Wert M- Taste : Subtrahiert aktuellen Display Wert von Speicher Wert Ist das Absicht, dass das bei dir alles genau anders herum ist? |
AW: Memory Funktion Taschenrechner
die Bezeichnungen rumdehen ginge och :stupid:
MS Taste : Memory Set MC Taste : Memory Clear +M Taste : Add Memory to View -M Taste : Substract Memory from View |
AW: Memory Funktion Taschenrechner
Zitat:
Brighty |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz