Cursor soll automtisch weiter springen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Marv2906
Beiträge: 2
Registriert: Fr 19. Dez 2008, 22:32

Cursor soll automtisch weiter springen

Beitrag von Marv2906 »

Hallo,

wie die Überschrift schon sagt will ich, dass der Cursor vom Edit Feld zum nächsten springt, wenn es voll ist. In jedem Feld soll nur ein Zeichen sein, also hab ich die maxlength auf 1 gestellt. Nun hab ich mir gedacht, da das nur ein zeichen ist, mach ich was mit onkeypress, sodass automatisch die tab taste gedrückt wird. Wie sag ich dem Programm das aber?? Oder hat jemande eine bessere Idee?? Es sei dazugesagt, ich arbeite noch nicht lange mit Lazarus oä.

Gruß

Marv2906

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Cursor soll automtisch weiter springen

Beitrag von monta »

Herzlich Willkommen im Forum.

Den Cursor kannst du mit Editxy.SetFocus entsprechend platzieren.

Jetzt musst du nur einen geeigneten Weg finden, zum abfragen, je nach Editmenge könnte man die bspw. auch durchnummerieren und sie so fortlaufend ansprechen.

Generell würd ich wohl das OnChange nehmen, da KeyPressed nicht zwangsläufig eine Eingabe sondern bspw. auch ein löschen sein kann.

Ganz einfach bspw. so:

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Length(Edit1.Text) >= 1 then
    Edit2.SetFocus;
end;
Du kannst bei den Edits übrigens direkt MaxLength (im OI) setzen, damit erlaubt das Edit keine längeren Eingaben, Cursor weitersetzen musst du allerdings wohl oder übel von Hand.
Johannes

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Cursor soll automtisch weiter springen

Beitrag von shokwave »

In einem meiner Projekte verwende ich folgende Funktion

Code: Alles auswählen

SelectNext( FindComponent(TEdit(Sender).Name) as TWinControl , true, true);
Im OI kann man dann für alle Editfelder das selbe Ereignis verwenden. Man muss nur auf die Tabulatorreihnfolge der Editfelder achten.
Das spart u.U 'ne Menge Schreibaufwand.
mfg Ingo

Marv2906
Beiträge: 2
Registriert: Fr 19. Dez 2008, 22:32

Re: Cursor soll automtisch weiter springen

Beitrag von Marv2906 »

Vielen Dank für die Antworten, klappt super!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Cursor soll automtisch weiter springen

Beitrag von pluto »

monta's Vorschlag könnte man auch so umschreiben das er für alle Edit Komponenten gilt bzw. für eine bestimmte Gruppe von Edit Feldern:
Alle Edit Komponenten mit dem Edit1Change verbinden.

Code: Alles auswählen

 
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Length(TEdit(Sender).Text) >= 1 then  TEdit(Sender).SetFocus;
end; 
 
MFG
Michael Springwald

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Cursor soll automtisch weiter springen

Beitrag von shokwave »

Ich dachte er wollte zum nächsten Edit springen... :shock:

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Cursor soll automtisch weiter springen

Beitrag von pluto »

hast recht... dass habe ich übersehen.

Dazu braucht jede Edit Komponente ein Tag Index der eindeutig zum TEdit Passt:

Code: Alles auswählen

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if (Length(TEdit(Sender).Text) >= 1) and (TEdit(Sender).Tag+1 <=Count) then  Edit(FindComponent('Edit'+IntTostr(TEdit(Sender).Tag+1)).SetFocus;
end;
Naja, ist zwar kein besonders schöner Code müsste aber auch gehen..
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cursor soll automtisch weiter springen

Beitrag von Christian »

Pluto halt sich doch ein mal an mein Motto, Shockwave hat doch schon längst eine Optimale Lösung gepostet ohne Sinnloscode deines ersten Posts und ohne jeder Komponente einen Tag zuzuordnen wie in deinem 2. Post.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Cursor soll automtisch weiter springen

Beitrag von pluto »

Ich wollte halt nur noch eine Lösung Präsidieren. Mehr nicht. Optimal ist meine Lösung nicht. Das gebe ich zu.
Allerdings hat meine Lösung den Vorteil das man die Edits in Gruppen einteilen kann. Das durchaus Vorteilhaft sein kann.
Oder siehst du das jetzt wieder anders ?

Shockwave mag zwar einfacher sein, aber hier bezweifel ich das man die Edits in Gruppen einteilen kann. Wenn es Erforderlich wird.

PS:
Außerdem finde ich es nicht gerade toll wenn du ständig sinnlos Antworten gibt. Das kannst du auch per PM machen.
Deine Antworten haben nichts mit den Thread zu tun.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cursor soll automtisch weiter springen

Beitrag von Christian »

Wie und wozu willst du was in gruppen einteilen ? Das macht im Zusammenhang mit der Problemstelung 0 Sinn.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Cursor soll automtisch weiter springen

Beitrag von pluto »

Weil du nicht weit genug siehst. Für die Problemstellung mag es 0 sinn ergeben. Aber evtl. macht das ja für ein anders Problem schon mehr sin.
Auch wenn DU es dir nichts vorstellen kannst.
MFG
Michael Springwald

Antworten