Io ho fatto questa prova: ho disposto sul forum 3 controlli Edit e ho associato loro lo stesso evento OnKeyUp definendolo in questo modo:
codice:
procedure TForm1.EditsKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
Edit: TEdit;
begin
Edit := (Sender as TEdit);
if (Length(Edit.Text) = Edit.MaxLength) and (Edit.SelStart = Edit.MaxLength) then
Perform(CM_DIALOGKEY, VK_TAB, 0);
end;
Il codice identifica l'Edit che ha il focus e riceve l'evento di pressione del tasto. Quando la lunghezza del testo contenuto (che va limitata tramite la proprietà MaxLength) raggiunge la lunghezza massima consentita e il cursore si trova nella posizione terminante del testo, viene simulata la pressione del tasto TAB per passare al controllo successivo.
Se modifichi parte del testo che non si trovi alla fine dello stesso, non accade nulla, a meno che non premi il pulsante Fine e allora verrai automaticamente trasportato alla casella di testo successiva.
Il meccanismo può essere ovviamente migliorato e ampliato.
Ciao!