hmm.. i dont understand what u just wrote, but i found a solution to my problem:

[pascal]
procedure FieldInput(input: Char);
var
i: Integer;
Fields: TFieldList;
begin

case GameState of
gsLogin: Fields:= TheLoginFields;
end;

for i := 0 to Length(Fields) - 1 do
begin
if Fields[i].GotFocus then
begin
if Length(Fields[i].Text) < Fields[i].MaxLen then
Fields[i].Text:= Fields[i].Text+input;
end;
Exit;
end;
end;
[/pascal]
no need to make it more complicated than needed...