AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Zinsrechner

Ein Thema von Siggy · begonnen am 13. Nov 2008 · letzter Beitrag vom 15. Nov 2008
Antwort Antwort
Seite 2 von 3     12 3      
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#11

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 16:28
So... Ersteinmal vielen Dank für die vielen Antworten.
Hat mir sehr geholfen muss ich sagen =)


Zitat von Sir Rufo:
Zitat von Siggy:
Unser Lehrer hat gemeint, ist halt so aber irgendwie kann ic das nicht glauben. Deswegen meine 1. Frage:
Wie kann man das verbessern??
Den Leerkörper wechseln! ... eine andere Möglichkeit sehe ich da nicht ...
Mh geht nicht, da unser Lehrer der einzige an der Schule ist der Informatik anbietet.
Bin an nem normalen Gymnasium und wie schon gesagt ist so ne art AG. Ohne den Lehrer würde es gar nicht angeboten werden.


Zitat von Sir Rufo:
[...]
Statt
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
  Edit2.SetFocus;
end;
würde ich das eher in OnShow platzieren
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  Edit2.SetFocus;
end;
Habe das 1. gestern abend noch gelesen und so gemacht. Hat wunderbar funktioniert. Was ist nun der unterschied zwischen:

FormActivate und OnShow ?

Zu meinem 2. Problem:
Das habe ich nun so gelöst:

[code=delphi]
if code = 0 then
begin
Endkapital :=
(Round(100*(Anfangskapital * exp (Jahre * ln (1+ Zinssatz/100))))/100) ; // V erarbeitung
Label2.Caption := FloatToStr (Endkapital)
end //end if code = 0

else // A usgabe
Showmessage ('Eingabefehler:' +#13+
'Variable = Laufzeit' +#13+
'Stelle =' +intToStr(code) +#13+
'Falsches Zeichen=' + Edit3.text
Code:
+#13#13+
               'Bitte Eingabe wiederholen...');
end; //end else
Klappt auch einwandfrei. Mit einer Ausnahme: Es wird mir nur der Fehler angezeigt, wenn bei der Variablen 'Laufzeit' ein Fehler gemacht wurde. Allerdings will ich ja auch,dass wenn jemand bei der Variable 'Anfangskapital' eine falsche Eingabe macht eine Nachricht erhält.

Unser Lehrer hat das so gemacht:

[code=delphi]
begin

try
Anfangskapital := StrToFloat (edit1.text) ;
Laufzeit.SetFocus ;

except
Val (edit1.text, wert, code);
ShowMessage (‘Eingabefehler!’ +#13#13+
'Variable = Anfangskapital' +#13+
'Stelle = ' +IntToStr(code) +#13+
'Falsches Zeichen=' + Edit1.text
Code:
            +#13#13+
        'Bitte Eingabe wiederholen...')

   Edit1.text := ’’ ;     // oder Edit1.clear;
   Shortint(key) := 0 ;    

// EDIT!!!: Hier hat unser Lehrer gemeint, er weiss nicht wieso man das hier reinschreiben muss, damit es funktioniert. Naja ich denke mal dass es hier einige geben wird, die das wissen. Deshalb wäre ich sehr verbunden wenn mir das jemand erklären könnte ;) Also das " ShortInt(key) = 0; " meine ich.

   Edit1.SetFocus;
end;
Und dann einfach auch noch für die Laufzeit das gleiche mit der anderen Variable und dem anderen Editfeld.
Ich finde das allerdings umständlicher als es mit
[delphi]
if code = 0 then
begin
[...]

else

[...]

end;
[/delhpi]
zu machen. Ist es zu kompliziert das bei mir jetz auch noch für die Variable 'Anfangskapital' einzubinden oder kann das ein Anfänger wie ich es bin verstehen?
Falls ja dann wäre ich über weitere Vorschläge sehr dankbar!
Noch einmal vielen Dank an das was bis jetzt vorgeschlangen wurde. Und ich hoffe niemand ist sauer dass ich nicht auf alle Vorschläge eingegangen bin

Mfg Siggy
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 16:37
OnShow wird aufgerufen wenn der Befehl Form1.Show ausgeführt wird.
Dieses passiert z.B. automatisch mit dem MainForm wenn die Anwendung startet.
Wird das Formual versteckt (Form1.Hide) oder geschlossen (Form1.Close), dann kann ich es nur mit Form1.Show wieder zeigen und OnShow wird gefeuert.

OnActivate wird immer dann gefeuert, wenn das Formular aktiviert wird. Also man wechselt zu einer anderen Anwendung und wechselt dann wieder zu dieser zurück, schupps wird OnActivate gefeuert.

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#13

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 16:40
Ah ok vielen Dank. Habe verstanden. Hätte ich auch drauf kommen können

Siggy
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 16:50
[code=delphi]begin

try
Anfangskapital := StrToFloat (edit1.text) ;
Laufzeit.SetFocus ;

except
Val (edit1.text, wert, code);
ShowMessage (‘Eingabefehler!’ +#13#13+
'Variable = Anfangskapital' +#13+
'Stelle = ' +IntToStr(code) +#13+
'Falsches Zeichen=' + Edit1.text
Code:
            +#13#13+
        'Bitte Eingabe wiederholen...')

   Edit1.text := ’’ ;     // oder Edit1.clear;
   Shortint(key) := 0 ;    

// EDIT!!!: Hier hat unser Lehrer gemeint, er weiss nicht wieso man das hier reinschreiben muss, damit es funktioniert. Naja ich denke mal dass es hier einige geben wird, die das wissen. Deshalb wäre ich sehr verbunden wenn mir das jemand erklären könnte ;) Also das " ShortInt(key) = 0; " meine ich.

   Edit1.SetFocus;
end;
Sagte ich schon mal was zum Lehrer tauschen ... (Hildesheimer, da vergisst man nur die Hälfte) ...

Also ein try except end nehme ich eigentlich nur dann, wenn ich vorher keine Chance habe zu prüfen, ob denn auch alles richtig laufen wird (z.B. Abfrage eines Datenbank-Servers, der könnte während der Abfrage auch abrauchen)

Für diesen speziellen Fall würde ich aber wie folgt prüfen
Delphi-Quellcode:
if ( StrToFloatDef( Edit1.Text, -1 ) < 0 )
then
  begin
    ShowMessage( '' );
    ...
  end;
und schöne Grüße an den Lehrer, ist wie im Deutsch, da gibt es Duden, das mich auch ganz doll helft ...

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 16:57
Zitat:
Es wird mir nur der Fehler angezeigt, wenn bei der Variablen 'Laufzeit' ein Fehler gemacht wurde
Es wird mit der Abfrage If code = 0 abgefragt ob ein Fehler
bei der Umwandlung von dem Text im Edit1 Feld in eine Zahl gemacht wurde.

Der Ausdruck 'Varible = Laufzeit' ist ein String, also feststehend

[EDIT] Ach er meint wohl damit die Varible, der der Wert aus dem Edit Feld zugewiesen wurde. Ich hab es unten mal angepasst.

Ich glaube ich bin jetzt etwas verwirrt


Jedenfalls solltest du bei 2 Edit Feldern auch zwei unterschiedliche Fehlercodes benutzen also das ganze sollte ungfähr so aussehen:

[code=delphi]
var
Form1: TForm1;
code,code2: Integer;
[.....]


procedure TForm1.Button1Click(Sender: TObject);
begin
try
val (edit1.text, anfangskapital, code); // E ingabe
val (edit3.text, Jahre, code2);
[.....]


if (code = 0) and (code2 = 0) then
begin
Endkapital :=
(Round(100*(Anfangskapital * exp (Jahre * ln (1+ Zinssatz/100))))/100) ;
Label2.Caption := FloatToStr (Endkapital)
end //end if code = 0

else Showmessage
('Eingabefehler:'+#13+
'Variable = Anfangskapital' +#13+
'Stelle im ersten Eingabefeld =' +FloatToStr(code) +#13+
'Variable = Jahre' +#13+
'Stelle im zweiten Eingabefeld =' +FloatToStr(code2) +#13+
'Falsches Zeichen im ersten Eingabefeld=' + Edit1.text
Code:
+#13+
               'Falsches Zeichen im zweiten Eingabefeld=' + Edit3.text[code2]+#13+
               'Bitte Eingabe wiederholen...');
end;
Vielleicht hilft dir das etwas, es ist natürlich noch ausbaufähig ...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#16

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 17:00
Zitat von Sir Rufo:
Für diesen speziellen Fall würde ich aber wie folgt prüfen
Delphi-Quellcode:
if ( StrToFloatDef( Edit1.Text, -1 ) < 0 )
then
  begin
    ShowMessage( '' );
    ...
  end;
Dann doch lieber Delphi-Referenz durchsuchenTryStrToInt
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 17:05
Zitat von NamenLozer:
Dann doch lieber Delphi-Referenz durchsuchenTryStrToInt
wenn ich einen Float-Wert haben möchte ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#18

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 17:34
Ach und die Fehlerabfrage sollt gleich zu anfag beginnen und nicht wenn schon mit Werten
gerechnet wurde, also so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
    val (edit1.text, anfangskapital, code); // Eingabe
    val (edit3.text, Jahre, code2);
    
    if (code = 0) and (code2 = 0) then
     begin
     if Jahre <=4 then
       begin
         Zinssatz := 3;
         Label4.Caption := 'mit einem Zinssatz von 3%';
       end
[............]
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#19

Re: Delphi Zinsrechner

  Alt 14. Nov 2008, 18:10
Zitat von Sir Rufo:
Zitat von NamenLozer:
Dann doch lieber Delphi-Referenz durchsuchenTryStrToInt
wenn ich einen Float-Wert haben möchte ...
Sorry, da hab ich mich wohl verlesen. Ich gehe aber mal davon aus, dass eine entsprechende Funktion auf für Floats existiert. (oder?)
  Mit Zitat antworten Zitat
Siggy

Registriert seit: 25. Okt 2008
20 Beiträge
 
#20

Re: Delphi Zinsrechner

  Alt 15. Nov 2008, 11:38
So ich bins mal wieder =)

Habe jetz zuerst mal das hier probiert, da es mir am einfachsten erschien:

[code=delphi]
var
Form1: TForm1;
code: Integer;
code2: Integer;
Anfangskapital: Integer;
Jahre: Integer;
Endkapital: real;
Zinssatz : real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
val (edit1.text, anfangskapital, code); // E ingabe
val (edit3.text, Jahre, code2);

if (code = 0) and (code2 = 0) then
begin
if Jahre <=4
then
begin
Zinssatz := 3;
Label4.Caption :=
'mit einem Zinssatz von 3%';
end //end Jahre <=4

else
begin
Zinssatz := 5;
Label4.Caption :=
'mit einem Zinssatz von 5%' ;
end; //end Jahre >4

if Jahre >= 10
then
begin
Zinssatz := 7 ;
Label4.Caption :=
'mit einem Zinssatz von 7%' ;
end; //end Jahre >= 10

begin
Endkapital :=
(Round(100*(Anfangskapital * exp (Jahre * ln (1+ Zinssatz/100))))/100) ; // V erarbeitung
Label2.Caption := FloatToStr (Endkapital)
end //end if code = 0
end

else // A usgabe
MessageDlg ('Eingabefehler:' +#13#13+
'Variable = Anfangskapital' +#13+
'Stelle im ersten Eingabefeld = ' +intToStr(code) +#13#13+
'Variable = Laufzeit' +#13+
'Stelle im zweiten Eingabefeld = ' +intToStr(code2) +#13#13+
'Falsches Zeichen im ersten Eingabefeld = ' + Edit1.text
Code:
+#13+
               'Falsches Zeichen im zweiten Eingabefeld = ' + Edit3.text [code2]+#13#13+
               'Bitte Eingabe wiederholen...' +#13+
               'Nur ganze Zahlen (0-9) erlaubt!',
               mtWarning,[mbOK],0);
except
MessageDlg ('Felder dürfen nicht leer sein!'+#13+
             'Falls alle Felder ausgefüllt wurden bitte kleinere Werte benutzen',mtWarning,[mbOk],0);
end;//end try - except

end;//end procedure
Also das mit den 2 Codes. Habe dann aber als ich die .exe gestartet hab feststellen müssen, dass es bis jetzt nicht die beste Lösung ist.

Es gibt leider das Problem, dass wenn NUR im Edit3 Feld ein Fehler auftritt und im Edit1 alles i.O. ist, dann wird nicht angezeigt wo der Fehler in Feld3 liegt.
Ist jetz n bisschen kompliziert, deswegen hänge ich mal die .exe an.
Ausserdem wird der letzte Teil der Fehlermeldung

Delphi-Quellcode:
               'Bitte Eingabe wiederholen...' +#13+
               'Nur ganze Zahlen (0-9) erlaubt!',
auch nur dann angezeigt, wenn in beiden Edit Feldern ein Fehler gemacht wurde.
Ihr könnt euch das ja mal anscheun, falls jemand Zeit dazu findet. Is ja auch nicht unbedingt das wichtigste.
Werde mich dann auch mal an den anderen 2 Vorschlägen versuchen wenn ich Zeit dazu finde und die Vorschläge verstehe

Mfg Siggy

[edit=Admin]Beitragscache aktualisiert. Mfg, Daniel[/edit]
Angehängte Dateien
Dateityp: exe captainzins_131.exe (486,0 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:49 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