Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Focus setzen (https://www.delphipraxis.net/8699-focus-setzen.html)

Micha 10. Sep 2003 14:36


Focus setzen
 
In mehreren Edit-Feldern sollen nur Zahlen kleiner als 15 eingegeben werden dürfen.

Wird im ersten Edit-Feld nun eine Zahl über 15 eingegeben, so soll eine Fehlermeldung erscheinen.
Soweit so gut.
Nun soll aber natürlich der Focus auf eben dieses Edit-Feld gelegt werden.

Mein bisherige Quelltext sieht folgendermaßen aus:

Delphi-Quellcode:
procedure TStunden.StdExit(Sender: TObject);
var
Tmp: TEdit;
Edit : String;
begin
// keine Angabe über 15 Stunden möglich
 Tmp:= Sender As TEdit;
 Edit := Tmp.Text;
begin
if Edit <> '' then
 begin
  if strtoint(Edit) > 15 then
    begin
      showmessage('Bitte nur Stundenangaben im Bereich {0,0 ... 15,0}');
// hier Edit.SetFocus funktioniert nicht
      ModalResult := 0;
      exit;
    end;
  end;
end;
end;
Die Edit-Felder sind durch eine Variable abgebildet. Dies soll auch nicht geändert werden. Da mir sonst der Quelltext zu lang werden würde.

Kann mir wer helfen?

Es geht also nur darum, dass eben der Cursor bei Falscheingabe wieder auf das "falsche" Feld gesetzt wird.

Vielen Dank im Voraus.

Stanlay Hanks 10. Sep 2003 14:40

Re: Focus setzen
 
Hallo. In diesem Fall könntest du mit Tmp.SetFocus dem Edit seinen Focus zurückgeben. Oder hattest du etwas anderes gemeint?
Wenn ja, dann frag einfach nochmal :wink:

Man liest sich, Stanlay :hi:

Christian Seehase 10. Sep 2003 14:40

Re: Focus setzen
 
Moin Micha,

bei Deinem Code müsste das schlicht

Delphi-Quellcode:
Tmp.SetFocus;
heissen.

Christian Seehase 10. Sep 2003 14:42

Re: Focus setzen
 
Moin Micha,

Zitat:

Zitat von Micha
Wird im ersten Edit-Feld nun eine Zahl über 15 eingegeben, so soll eine Fehlermeldung erscheinen.

warum verhinderst Du nicht gleich, dass ungültige Werte eingegeben werden.
Mir für meinen Teil gefallen solche Meldungen nicht sonderlich ;-)

@Stanlay:
Vordrängler :mrgreen:

Stanlay Hanks 10. Sep 2003 14:47

Re: Focus setzen
 
@Christian
1. Hast du natürlich recht, dass man das verhindern sollte. Allerdings könnte es dann theoretisch sein, dass der Anwender nicht weiß, wie viel er eingeben darf und dann "e[delphi]ig" vor dem Edit hockt und probiert. Wenn dann sollte man vielleicht noch zusätzlich einen Hinweis in einer Statusbar oder so anzeigen, wo drin steht, dass man nicht mehr als 15,0 eingeben darf.

2. :tongue: (=> Vordrängler)

Man liest sich, Stanlay :hi:

Micha 10. Sep 2003 14:57

Re: Focus setzen
 
1. Ja, ich habe das mit "tmp.SetFocus" gemeint.
Ich habs die ganze Zeit mit "Edit.SetFocus" probiert.
Optimal.

2. @christian: Wie stelle ich das mit dem Verhindern an? Geht das auch ohne MaskEdit?

Stanlay Hanks 10. Sep 2003 15:00

Re: Focus setzen
 
Hi. Ich bin zwar nicht Christian...:wink: aber im OnChange des/eines Edits einfach eingeben: IF StrToInt(Tmp.Text) > 15 THEN Tmp.Text := ''.
Das löscht bei einer falschen Eingabe den Inhalt des Edits.

Man liest sich, Stanlay :hi:

Christian Seehase 10. Sep 2003 15:02

Re: Focus setzen
 
Moin Micha,

MaskEdit hab' ich noch nie verwendet ;-)
Im OnKeyDown/OnKeyUp/OnKeyPress kannst Du auf gültige Zeichen prüfen, und ungültige löschen (hatten wir schon öfter). Ausserdem könntest Du da dann, bei gültigem Zeichen, auch gleich prüfen, ob der Wert noch korrekt ist.
Sinnvoll wäre auch eine Prüfung im OnChange, da ja jemand die Daten auch per Copy & Paste einfügen könnte.

Was, wie Stanlay ja schon sagte, auf jeden Fall sein muss, ist ein Hinweis (z.B. StatusBar, Label zum Edit) in dem der zulässige Wertebereich angezeigt wird.

Micha 10. Sep 2003 15:05

Re: Focus setzen
 
Erstmal sorry an Stanlay Hanks.

Dann ein rießen Dank an alle, die meine Frage(n) beantwortet haben. Echt super.

Danke, ihr habt mir sehr geholfen.


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