Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Fortlaufende Eingabe in mehrere Edits


gin2309 - Do 08.09.05 14:37
Titel: Fortlaufende Eingabe in mehrere Edits
Hallo,
ich möchte in drei edits jeweils zwei ziffern eintragen lassen!
Weiß jemand, wie ich das so hinkriege dass nach eingeben der zweiten ziffer ins nächste edit gesprungen wird?
Also so wie beim eingeben eines key..


Christian S. - Do 08.09.05 14:38

Hallo!

Ich würde im OnChange-Ereignis eines jeden Edits abfragen, ob die Länge der Eingabe Zwei beträgt und dann mittels edit2.focus() (z.B.) ins nächste Feld springen.

Grüße
Christian


gin2309 - Do 08.09.05 14:44

Schon mal ein guter ansatz!
Das Problem ist, dass die edits immer mit zwei ziffern gefüllt sind (weil Zeitangabe).
Kann ich herausbekommen an welcher stelle der cursor im edit ist?
Und kann ich irgendwie einstellen, dass man in den edits überschreiben kann?


Heiko - Do 08.09.05 14:47

Eine Überschreibefunkltion gibt es meines Wissens nicht, aber die kann man sich selber programmieren, in dem man das OnKeyPress-ereignis abfängt. Und zur Cursorpopition habe ich bisher auch nix funktionierendes gefunden, was ich oft schade finde ;).


Christian S. - Do 08.09.05 15:01

Hallo!

So bekommst Du sowohl das Springen als auch das Überschreiben hin:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  cursorPos : Integer;
  temp : String;
begin
  cursorPos := edit1.SelStart;
  inc(cursorPos);

  if Length(edit1.Text) = 2 then
  begin
    temp := edit1.Text;
    temp[cursorPos] := Key;
    edit1.Text := temp;
    Key := #0;
  end;

  if cursorPos = 2 then
    edit2.SetFocus
  else
    edit1.SelStart := cursorPos;
end;


Grüße
Christian

P.S.: Kann man vielleicht noch verfeinern. Ich weiß z.B. gerade nicht, wie sich obiger Code verhält, wenn Text markiert ist, SelLength also nicht Null ist.


gin2309 - Do 08.09.05 15:35

Super geil!
Genau das isses!!!
Vielen Dank!


gin2309 - Fr 09.09.05 16:16

Mir ist noch aufgefallen, dass es mit der backspace -taste probleme gibt. Es wird als weiteres Zeichen eingegeben.
Für alle die, die den obigen Code benutzen, hier noch die kleine Änderung die gemacht werden muss:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  cursorPos := edit1.SelStart;
  inc(cursorPos);

  if (Length(edit1.Text) = 2)and(key<>#8then
  begin
    temp := edit1.Text;
    temp[cursorPos] := Key;
    edit1.Text := temp;
    Key := #0;
  end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.