Cursor soll automtisch weiter springen
Cursor soll automtisch weiter springen
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
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
-
- 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
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:
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.
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;
Johannes
-
- 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
In einem meiner Projekte verwende ich folgende Funktion
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.
Code: Alles auswählen
SelectNext( FindComponent(TEdit(Sender).Name) as TWinControl , true, true);
Das spart u.U 'ne Menge Schreibaufwand.
mfg Ingo
Re: Cursor soll automtisch weiter springen
Vielen Dank für die Antworten, klappt super!
-
- 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
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.
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
Michael Springwald
-
- 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
Ich dachte er wollte zum nächsten Edit springen... 

-
- 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
hast recht... dass habe ich übersehen.
Dazu braucht jede Edit Komponente ein Tag Index der eindeutig zum TEdit Passt:
Naja, ist zwar kein besonders schöner Code müsste aber auch gehen..
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;
MFG
Michael Springwald
Michael Springwald
-
- 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
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/
-
- 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
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.
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
Michael Springwald
-
- 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
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/
-
- 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
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.
Auch wenn DU es dir nichts vorstellen kannst.
MFG
Michael Springwald
Michael Springwald