Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TEdit: Eingabe an nächstes Editfeld weitergeben (https://www.delphipraxis.net/125637-tedit-eingabe-naechstes-editfeld-weitergeben.html)

Mike_on_Tour 9. Dez 2008 11:52


TEdit: Eingabe an nächstes Editfeld weitergeben
 
Hallo,

ich habe mehrere Edit-Felder. In jedes Feld kann eine maximale Anzahl Zeichen eingegeben werden. Wir die maximale Zeichenanzahl erreicht, wird automatisch das nächste Edit-Feld selektiert. Ähnlich verfahre ich mit der Backspace-Taste. Wir die Backspace-Taste an der ersten Position eines Feldes gedrückt, wird das vorherige Edit-Feld selektiert und die Eingabemarke an die letzte Stelle gesetzt. Dafür benutze ich die Events 'Edit.OnKeyPress' und 'Edit.OnEnter'.

Wenn in diesem Edit-Feld aber schon die maximale Anzahl Zeichen steht und ich jetzt eine Eingabe mache, dann wird zwar das nächste Feld selektiert, aber die Eingabe ist weg. Wie kann ich diese Eingabe an das nächste Edit-Feld übergeben ?

Mike

nachti1505 9. Dez 2008 12:44

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
Code:
procedure OnKeyPress(...)
var NextEdt: TEdit;
begin
  if length(Edit.Text) = Edit.MaxLength then begin
    NextEdt := LocateNextEdit;
    NextEdt.SelStart := length(NextEdt.Text);
    NextEdt.Text := NextEdt.Text + Key;
  end;
end;
Wobei noch darauf zu achten wäre, ob NextEdt auch schon maximal gefüllt ist.

Mike_on_Tour 17. Dez 2008 12:06

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
Zitat:

Zitat von nachti1505
Code:
procedure OnKeyPress(...)
var NextEdt: TEdit;
begin
  if length(Edit.Text) = Edit.MaxLength then begin
    NextEdt := LocateNextEdit;
    NextEdt.SelStart := length(NextEdt.Text);
    NextEdt.Text := NextEdt.Text + Key;
  end;
end;

Sorry, das ich nicht gleich geantwortet habe. Das Prinzip ist mir klar, aber mit dem 'LocateNextEdit' komme ich nicht weiter. Da könnte ich noch etwas Hilfe gebrauchen.

uligerhardt 17. Dez 2008 12:25

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
Zitat:

Zitat von Mike_on_Tour
Das Prinzip ist mir klar, aber mit dem 'LocateNextEdit' komme ich nicht weiter. Da könnte ich noch etwas Hilfe gebrauchen.

Vielleicht WM_NEXTDLGCTL?

DeddyH 17. Dez 2008 12:27

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
An die Message hatte ich auch gedacht, aber das nächste Control in der Tabulatorreihenfolge muss ja kein TEdit sein, das müsste man also ggf. etwas ausbauen.

Mike_on_Tour 17. Dez 2008 12:45

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
[quote="uligerhardt"]
Zitat:

Zitat von Mike_on_Tour
Vielleicht WM_NEXTDLGCTL?

OK, das mache ich ja schon. Zum besseren Verständnis hier mal etwas Code:
Delphi-Quellcode:
iLaenge := Length (Trim (TEdit(Sender).Text));
// Länge der vorhandenen Eingabe (!) auf Maximum prüfen
if (iLaenge > (TEdit(Sender).MaxLength - 1))
  then begin
    // hier nächstes Editfeld ermitteln und Wert aus 'Key' übergeben
    // z.B. so
    //tNextEdit.SelStart := Length (tNextEdit.Text);
    //tNextEdit.Text := tNextEdit.Text + Key;
  end
  else begin
    // Länge der vorhandenen Eingabe entspricht Maximum minus 1,
    // deshalb nächstes Feld auswählen
    // der Wert von Key wird noch ins Editfeld eingetragen
    if (iLaenge = (TEdit(Sender).MaxLength - 1))
      then begin
        Perform (WM_NEXTDLGCTL, 0, 0);
      end;
  end;
Mir fehlt also der Ansatz, wie ich das nächste Feld ermitteln kann (für tNextEdit).

hoika 18. Dez 2008 06:44

Re: TEdit: Eingabe an nächstes Editfeld weitergeben
 
Hallo,

Aus der Hilfe:
Die Eigenschaft TabOrder gibt die Position des Steuerelements in der Tabulatorreihenfolge der übergeordneten Komponente an.

geg: TabOrder des aktuellen TEdit -> TabOrder1
ges: TEdit mit TabOrder > TabOrder1


Heiko


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