AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

Ein Thema von diavy · begonnen am 24. Aug 2012 · letzter Beitrag vom 26. Aug 2012
Antwort Antwort
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#1

Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 24. Aug 2012, 15:51
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:
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;
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.
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 24. Aug 2012, 15:59
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 24. Aug 2012, 16:09
Man könnte aber auch im OnKeyPress des Edits die ENTER-Taste abfragen (#13).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 24. Aug 2012, 17:01
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;
Andreas
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 24. Aug 2012, 18:58
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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#6

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 25. Aug 2012, 19:16
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
Wenn man sich zum addieren mit den Edits abwechselt und ein Label frs Resultat benutzt klappt's, wenn jedoch alles in 1 Edit eingegeben werden soll nicht. Ein kleines Manko der Methode ist, dass die letzte Zahl (nach der man den Fokus der Edit-Box normalerweise nicht mehr verliert) dann nicht mehr addiert wird, ist aber halt ne Kleinigkeit . Trotzdem guter Tip, danke dir!

Nein, das sollen wir umgehen.


Zitat:
Man könnte aber auch im OnKeyPress des Edits die ENTER-Taste abfragen (#13).
Das klingt nach einer Lösung.
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.

Geändert von diavy (25. Aug 2012 um 19:23 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 25. Aug 2012, 21:42
Zitat:
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.
Das entspräche aber nicht der Aufgabe in der von 2 Edits und einem Button, nicht aber von einem Label die Rede ist.

Zitat:
Danke für die Anregung mit deiner Methode, leider reicht mein Kenntnisstand (noch) nicht aus um sie nachvollziehen zu könne.
Kurze Erklärung

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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#8

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 26. Aug 2012, 10:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 26. Aug 2012, 13:03
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Summe einer Serie von Zahlen mit Hilfe von 2 Edit-boxen

  Alt 26. Aug 2012, 13:50
Zitat von diavy:
1. Bei Button1.Click schreibst du "fsum:=0", ohne Edit2.Text:=FloatToStr(fsum), wie funktionniert das?.
In der Prozedur Button1Click steht nicht nur fSum:=0 sondern zwei Zeilen weiter Edit2.Text:=''. Alternativ könntest du auch schreiben Edit2.Text:='0' oder, wenn es dir besser gefällt Edit2.Text:=FloatToStr(fSum).
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 von diavy:
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)
Das sind nun mal die Parameter, die bei einem KeyUp-Event an die jeweilige Prozedur übergeben werden.
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 von diavy:
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
Im Design-Modus klicke auf der Form das Edit1. Dann Doppelklicke im Objektinspektor unter Ereignisse das Feld "OnKeyUp" (nicht den Text "OnKeyUp" sondern das rechts davon liegende Textfeld). Dann wird die Prozedur "Edit1KeyUp" mit ihren Parametern in den Code eingefügt.


Zitat von diavy:
4. wieso benutzt man als var-typ double und nicht real?
Aus der Delphi-Hilfe:
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 von diavy:
5. DeddyH meinte die Enter-Taste sei #13, wieso heißt sie dennoch hier VK_Return?
Aus System.UITypes
const
{ Virtual Keys, Standard Set }

vkReturn = 13;

Aus Winapi.Windows
const
{ Virtual Keys, Standard Set }

VK_RETURN = vkReturn; {13}
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz