![]() |
Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Hallo zusammen.
Meine Aufgabestellung ist folgendermaßen: Schreibe ein Programm das die Summe einer Serie von eingegebenen Zahlen rechnet, benutze dafür 2 Edit-Boxen und einen Button zum "nullen" der Summe. Zunächst hab ich es damit probiert: ...Edit1Change... (prozedur) if Edit1.Text <> '' then Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+ StrToInt(Edit1.Text)) und das gleiche mir Edit2. Problem: Mehrstellige Zahlen. Da hab' ich mir gleich gedacht, dass es doch optimal wäre, wenn ich statt der Change-Prozedur eine Prozedur haben würde, die bei einem "Enter"-Drücken in der Edit-Box auslösen würde. Darauf folgend habe ich mir die Events mal angeschaut, und von Namen her hat "OnEnter" gleich danach ausgeschaut, als wäre es exakt das, was ich wollte. Ich hab also de Prozedur beim Event TForm1.Edit1Enter eingetragen, es ist jedoch schlichtwe nichts passiert als ich nach dem Eingeben der Zahlen "Enter" in der Edit-Box gedrückt habe. Aufgrund des Mangels an Ideeen, wie ich es mit "Enter" umsetzen könnte, habe ich also versucht das Problem zu umgehen, was wiederum keine Lösung zum Problem ist:
Delphi-Quellcode:
Hierbei ist natürlich das Problem dass man den Fall von mehr als 2-stelligen Zahlen nicht integriert hat. Hinzüglich hat man ein Problem, wenn man eine 2-stellige Zahl entfernt.
procedure TForm1.Edit1Change(Sender: TObject);
begin if Edit1.Text <> '' then begin if (StrToInt(Edit1.Text)/10) >=1 then Label1.Caption:=FloatToStr(StrToInt(Label1.Caption)+StrToInt(edit2.Text)- StrToInt(edit2.text)/10) else Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+StrToInt(Edit1.Text)); end; end; Beispiel: man möchte 12 durch 7 eretzen: 12 "<-" 1 "<-" 7 Hierbei wird 1 nochmal zur Summe hinzugefügt. Meine Frage ist nun ob es doch eine Möglichkeit gibt, um meine Idee mit Enter umzusetzen, oder ob ich mein bestehendes Programm weiterführen, und für all solche Fälle vorbereiten muss? Grüße |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
onEnter wird ausgelöst wenn das Edit den Focus erhält.
onExit wird ausgelöst wenn das Edit den Focus verliert. (ob das Dein Problem löst?= Einen zusätzlichen Button der die Berechnung startet dürft ihr nicht verwenden? Grüße Klaus |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Man könnte aber auch im OnKeyPress des Edits die ENTER-Taste abfragen (#13).
|
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Ich hätte da noch einen ganz heissen Tipp für Dich:
Benütze Zwischenvariablen! Mit Zwischenvariablen wird der Code besser lesbar und besser zu debuggen. Ausserdem wird es schneller.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var akt_zahl: integer; begin if Edit1.Text <> '' then begin akt_zahl := StrToInt(Edit1.Text); // und ab jetzt wird nur noch mit akt_zahl weitergerechnet if (akt_zahl/10) >=1 then .... end; |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Hallo diavy,
wenn ich die von dir gepostete Aufgabenstellung richtig interpretiere, dann sollen auf der Form 2 Edits und ein Button sein. Zahlen, die in Edit1 eingegeben werden, sollen summiert und die Summe in Edit2 ausgegeben werden. Das könnte man so lösen: In TForm ein Feld fSum:double deklarieren. Dann :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Button1.Click; end; procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var n:double; begin if (key=VK_Return) and (Edit1.Text<>'') then if TryStrToFloat(Edit1.Text,n) then begin fSum:=fSum+n; Edit2.Text:=FloatToStr(fSum); Edit1.Text:=''; end; end; procedure TForm1.Button1Click(Sender: TObject); begin fSum:=0; Edit1.Text:=''; Edit2.Text:=''; end; |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Zitat:
Nein, das sollen wir umgehen. Zitat:
Ich schau mal ob ich was zu dieser Methode finde. Das mit den Zwischenvariablen werde ich mir merken! Amateurprofi: Ja, entweder so, oder dass man sich mit dem Eingeben der Zahlen bei den Edits abwechselt, und dann ein Label für's Resultat verwendet. Danke für die Anregung mit deiner Methode, leider reicht mein Kenntnisstand (noch) nicht aus um sie nachvollziehen zu könne. |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Zitat:
Zitat:
Im Button1.Click werden die Inhalte der beiden Edits gelöscht und die Summe der Zahlen (fSum) auf 0 gesetzt. Im Edit1KeyUp passiert folgendes Prüfung ob die gerade gelöste Taste die Return-Taste ist UND ob Edit1 einen Text enthält. Wenn Nein, dann wird die Prozedur verlassen. Wenn Ja, dann wird versucht den Text aus Edit1 in einen Double umzuwandeln. (Double, weil im Aufgabentext "Zahlen" steht und nicht "Ganzzahlen".) Wenn das TryStrToFloat(Edit1.Text, n) False zurückgibt, dann konnte der Text nicht in eine Zahl umgewandelt werden und die Prozedur wird verlassen. Wenn das TryStrToFloat(Edit1.Text, n) True zurückgibt, dann ist die Umwandlung gelungen und n enthält den Wert. Dann wird 1) dieser Wert zur bisherigen Summe (fSum) addiert 2) Die neue Summe in einen String umgewandelt und in Edit2.Text gestellt 3) Edit1 gelöscht, damit die nächste Zahl eingegeben werden kann Im FormCreate wird ein OnClick des "Lösch-Buttons" ausgelöst, um sicherzustellen dass die Edits leer und fSum = 0 ist. |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Vielen Dank, hat super geklappt. :)
Ein paar Fragen bleiben mir nichtsdestotrotz: 1. Bei Button1.Click schreibst du "fsum:=0", ohne Edit2.Text:=FloatToStr(fsum), wie funktionniert das? 2. "Sender: TObject; var Key: Word; Shift: TShiftState" --> Ist der Inhalt dieser Zeile pauschal gleich und "einfach hinzunehmen", oder sollte ich verstehen weshalb was wo steht? (das tu ich nämlich nicht) 3. kann man ein Event wie KeyUp auch "einfach" in den Code bekommen wie mit Click oder Edit bei Buttons oder Edits? Sprich dass man eine Aktion auf der Form durchführt, und dies dazu führt dass man es gleich im Code hat? 4. wieso benutzt man als var-typ double und nicht real? 5. DeddyH meinte die Enter-Taste sei #13, wieso heißt sie dennoch hier VK_Return? 6. |
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Markier doch einfach einmal Dein Edit und schaue nach, was der Objektinspektor auf dem "Ereignisse"-Reiter so anbietet, damit beantworten sich die meisten Deiner Fragen schon von selbst.
|
AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen
Zitat:
Ich halte es für besser ein leeres Textfeld zu zeigen, denn genau genommen existiert nach dem Zurücksetzen noch keine Summe, und genau das drücke ich durch ein leeres Textfeld aus. Eine Summe=0 könnte auch durch das Summieren von zum Beispiel 5, 3, -8 entstanden sein. Zitat:
Sender ist das Objekt, das das Event ausgelöst hat. Key ist die Taste, die "Up ging". Shiftstate enthält Informationen darüber ob Shift-, Ctrl-, Alt-Taste gedrückt ist oder nicht. Zitat:
Zitat:
Repräsentiert einen Gleitkommawert mit doppelter Genauigkeit. Der Typ Real entspricht in seiner aktuellen Implementierung dem Typ Double. Die Größe in Byte eines Real-Wertes beträgt 8. Beachte Zeile 2 obiger Erklärung "in seiner aktuellen Implementierung". In einer anderen Implementierung mag das anders sein. Es gibt sicherlich gute Gründe warum es Typen gibt, die je nach Implementierung unterschiedliche Bedeutungen haben können, aber ich bevorzuge eine klare und eindeutige Definition. Zitat:
const { Virtual Keys, Standard Set } … vkReturn = 13; Aus Winapi.Windows const { Virtual Keys, Standard Set } … VK_RETURN = vkReturn; {13} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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