![]() |
Delphi Zinsrechner
Hallo Delhpi-Gemeinde!
Habe dieses Schuljahr mit Delphiangefangen (wird von nem Lehrer als Art Wahlfach angegeben, das ich aber abrechnen kann). Wir sind noch ziemlich am Anfang und bis jetz bin ich überall mitgekommen und habe zuhause meistens schon vorgearbeitet. Letzte Woche haben wir einen Zinsrechner (den wir vorher programmiert haben) versucht noch ein bisschen zu erweitern. Zum einen haben wir eingebaut, dass wenn man das Programm öffnet, dass man automatisch in das Edit1 Fenster springt mit eingabe von Enter kommt man in Edit2 und bei weiterem Drücken von Enter rechnet das Programm. Soweit so gut. Leider kommt bei Start des Programms immer die Nachricht: Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht enthalten! Unser Lehrer hat gemeint, ist halt so aber irgendwie kann ic das nicht glauben. Deswegen meine 1. Frage: Wie kann man das verbessern?? So nun zu meiner 2. Frage: Wir haben dann noch etwas gemacht mit val(Edit1.text, Var, code ) Leider haben wir das nicht "fertig" gemacht und unser Programm dann so stehen lassen: [code=delphi]var Form1: TForm1; code: Integer; Anfangskapital: real; Jahre: real; 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, code); if Jahre <=4 then begin Zinssatz := 3; Label4.Caption := 'mit einem Zinssatz von 3%'; end else begin Zinssatz := 5; Label4.Caption := 'mit einem Zinssatz von 5%' ; end; if Jahre >= 10 then begin Zinssatz := 7 ; Label4.Caption := 'mit einem Zinssatz von 7%' ; end; if code = 0 then Endkapital := (Round(100*(Anfangskapital * exp (Jahre * ln (1+ Zinssatz/100))))/100) ; // V erarbeitung Label2.Caption := FloatToStr (Endkapital); // A usgabe except Showmessage ('Eingabefehler:' +#13+ 'Variable = Laufzeit' +#13+ 'Stelle =' +FloatToStr(code) +#13+ 'Falsches Zeichen=' + Edit3.text
Code:
Ziel ist es (soweit ich weiss) dass wenn man eine falsche Eingabe macht, zum Beispiel bei Jahre: 1a2x
+#13#13+
'Bitte Eingabe wiederholen...'); end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then edit3.SetFocus; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Button1.Click; end; procedure TForm1.FormCreate(Sender: TObject); begin edit1.SetFocus; end; end. , dass dann eine Meldung kommt die dem Benutzer des Programms sagt, wo der Fehler liegt und wie man das besser machen kann. Bis jetzt funktioniert das aber noch nicht. Wenn man eine falsche Eingabe macht bleibt einfach das alte Ergebnis stehen oder es tut sich gar nichts. Nun wüsste ich gerne was noch nicht stimmt und wie man das verbessern kann? Ich weiss ziemlich viel Text, aber ich hoffe dennoch dass mein Problem klar geworden ist und dass ihr mir helfen könnt. Mfg Siggy |
Re: Delphi Zinsrechner
Hallo zu Frage zwei meint er vielleicht das hier:
[code=delphi] if code = 0 then begin Endkapital :=(Round(100*(Anfangskapital * exp (Jahre * ln (1+ Zinssatz/100))))/100) ; Label2.Caption := FloatToStr (Endkapital); end else showmessage ('Eingabefehler:' +#13+ 'Variable = Laufzeit' +#13+ 'Stelle =' +FloatToStr(code) +#13+ 'Falsches Zeichen=' + Edit1.text
Code:
Die Messages nach except werden ja glaubig nur beim arbeiten mit der .exe angezeigt.
+#13#13+
'Bitte Eingabe wiederholen...'); Also wenn du die .exe Datei deines Programmes ausführst, müsste die Fehlerabfrage auch ohne meine Änderung klappen. Zu Frage 1 hab ich aber jetzt keine Idee... |
Re: Delphi Zinsrechner
Zitat:
Lösung:
Delphi-Quellcode:
Zur zweiten Frage sagt mir die Delphi-Hilfe folgendes:
procedure TForm1.FormActivate(Sender: TObject);
begin Edit2.SetFocus; end;
Delphi-Quellcode:
Val unterstützt bereits eine Fehlerbehandlung, daher ist ein Try-Except-Block absolut überflüssig. ;)
uses Dialogs;
var I, Code: Integer; begin { Get text from TEdit control } Val(Edit1.Text, I, Code); { Error during conversion to integer? } if Code <> 0 then MessageDlg('Error at position: ' + IntToStr(Code), mtWarning, [mbOk], 0, mbOk); else Canvas.TextOut(10, 10, 'Value = ' + IntToStr(I)); end; |
Re: Delphi Zinsrechner
Zitat:
Delphi-Quellcode:
Übrigens ist es sinnvoll seine Codezeilen einzurücken.
OnActivate := nil;
MfG xZise |
Re: Delphi Zinsrechner
Zitat:
Zitat:
Der Event OnCreate wird _nach_ dem kompletten Erzeugen des Formulars gefeuert. Sonst würde eine andere Fehlermeldung kommen Statt
Delphi-Quellcode:
würde ich das eher in OnShow platzieren
procedure TForm1.FormActivate(Sender: TObject);
begin Edit2.SetFocus; end;
Delphi-Quellcode:
und wenn das wirklich ausschließlich nach dem Erzeugen passieren soll, dann einen Timer nehmen, den Interval auf 1 setzen und
procedure TForm1.FormShow(Sender: TObject);
begin Edit2.SetFocus; end;
Delphi-Quellcode:
cu
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Sender is TTimer then TTimer( Sender ).Enabled := False; Edit2.SetFocus; end; Oliver [edit]sorry xZise, da habe ich wohl beim Zitieren zuviel weggelöscht[/edit] |
Re: Delphi Zinsrechner
Zitat:
1. Wie schon gesagt wurde: Lehrer austauschen. Sollte im Zeitalter der Objekte kein Problem mehr darstellen :twisted: 2. Kann es sein, dass Du das Eingabefeld, auf welches Du den Fokus setzen willst im Objektinspektor auf Visible = False oder Enabled = False stehen hast?!? Zitat:
mfg Michael |
Re: Delphi Zinsrechner
Zitat:
|
Re: Delphi Zinsrechner
@Luckie: ok ... :-) ... aber es tut auf jeden Fall :mrgreen:
Zitat:
Hier der Abschnitt aus den Unit Forms.pas:
Delphi-Quellcode:
Also beim Event OnCreate sind alle Elemente im Formular erzeugt, aber dort ist halt noch kein Leben.
procedure TCustomForm.AfterConstruction; // <-- After Construction ;-)
begin if not OldCreateOrder then DoCreate; // Der feuert das Event OnCreate if fsActivated in FFormState then begin Activate; // Hier wird alles aktiviert und dann OnActivate gefeuert Exclude(FFormState, fsActivated); end; end; Erst ab dem ersten Event OnActivate, sind die Elemente aktiviert und dann verstehen wir auch die Fehlermeldung. cu Oliver |
Re: Delphi Zinsrechner
Zitat:
Und ist eine Form in OnCreate schon sichtbar? Generell nicht. Deshalb das mit Activate! MfG xZise |
Re: Delphi Zinsrechner
@xZise: you're totally right ... sorry 4 that ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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