Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Timer einstellen (https://www.delphipraxis.net/140355-timer-einstellen.html)

Flemichin 16. Sep 2009 20:03


Timer einstellen
 
Omg, ich hoffe, dass ich in diesem Forum richtig bin...

Folgendes Problem: Ich will über den Edit den Intervall des Timers einstellen lassen. Habe mir gedacht, ich benutze VAR, wie bei einem Währungsrechner etc. Leider ist meine Idee Müll, oder ich mache etwas falsch.
Bisher habe ich das da stehen:

procedure TMyForm.Ed1Change(Sender: TObject);

var zahl1: Integer;

begin

zahl1 := StrToInt (Ed1.text);
timer.interval := IntToStr (zahl1.text);

Mein Edit heißt Ed1

DeddyH 16. Sep 2009 20:06

Re: Timer einstellen
 
Hallo und Willkommen in der DP :dp:,

erst wandelst Du den String in eine Zahl (richtig), dann willst Du diese Zahl bzw. ihr nicht vorhandenes Attribut Text (falsch) in einen String wandeln und dem Timer-Intervall zuweisen (ganz falsch).

Flemichin 16. Sep 2009 20:13

Re: Timer einstellen
 
Ok, wäre dann nur noch dankbar, wie ich das dann richtig eingeben muss

himitsu 16. Sep 2009 20:19

Re: Timer einstellen
 
Zahl1 ist ein Integer
.Interval ist auch ein Integer

IntToStr erzeugt einen String und verlangt als Parameter einen Integer
.Text ist schon ein String Zahl1 kennt kein .Text :oops:

und was sagt und das?

DeddyH 16. Sep 2009 20:21

Re: Timer einstellen
 
Das sagt uns, dass himitsu nicht aufgepasst hat. Ein Variable vom Typ Integer besitzt keine Text-Eigenschaft :tongue:

Flemichin 16. Sep 2009 20:23

Re: Timer einstellen
 
ich bin aber trotzdem noch blöd wie ne auster ^^

himitsu 16. Sep 2009 20:28

Re: Timer einstellen
 
statt IntToStr(zahl1.text) einfach NUR zahl1, welches ein Integer ist, was auch .Interval haben möchte :angel2:

Flemichin 16. Sep 2009 20:30

Re: Timer einstellen
 
jau es klappt ich danke euch =)

DeddyH 17. Sep 2009 08:08

Re: Timer einstellen
 
Es wäre aber besser, wenn Du auch auf Fehleingaben reagieren würdest.
Delphi-Quellcode:
procedure TMyForm.Ed1Change(Sender: TObject);
var zahl1: Integer;
begin
  if TryStrToInt(Ed1.text, zahl1) then
    timer.interval := zahl1;
end;

himitsu 17. Sep 2009 09:24

Re: Timer einstellen
 
Zitat:

Zitat von DeddyH
Es wäre aber besser, wenn Du auch auf Fehleingaben reagieren würdest.

OK, bei einer direkten Eingabeprüfung isses schon besser, da sonst wärend des Eingebens und z.B. bei einem leerem Editfelt, das StrToInt eine Exception wirft.

Aber es sollte dennoch eine Meldung ausgegeben werden, da ein TryStrToInt einfach jeden Fehler unterdrückt und man sich dann wundert, warum die Zeit nicht gesetzt wird.


Meine Lösung wäre:
In OnExit die Werte prüfen und erst zulassen, also enn man aus dem Edit rausgeht.
Ind dann entweder mit StrToInt, denn dann würde der User eine Exception bekommen und weiß, daß sein Wert falsch ist oder via TryStrToInt, aber damm mit einer eigenen Meldung.

wenn es sofort ausgewertet werden soll, dann wärend der Eingabe im OnChange nur via TryStrToInt und mit einem dezenzen Fehlerhinweis.

Persönlich mische ich gerne Beides (also wärenddessen z.B. in einem Label oder mit einer anderen Hintergrundfarbe des Edits auf den Fehler hinweisen) und im OnExit dann streng prüfen und im Fehlerfall eine Exception werfen, welche der User promt serviert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 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