Sin duda alguna, la forma mas fácil para solucionar este problema, es crear el campo TEdit el primero de todos, inmediatamente después de crear el formulario
Código Delphi
[-]
...
FModal:= TForm.Create(Application);
FModal.Caption:= 'Recoger Nº EDIFIL';
FModal.BorderStyle:= bsDialog;
FModal.Position:= poScreenCenter;
Edito:= TEdit.Create(FModal);
With Edito do
begin
Edito.Text:= '9999'; Edito.Font.Size :=18;
Edito.Left := 85; Edito.Top := 80 ;
Parent:= FModal;
end;
Boton := TButton.Create( FModal);
...
Otra forma un poco mas rebuscada es asignar al evento OnShow al formulario para que asigne el foco al componente deseado una vez se muestre la ventana, esto complica un poco el tema, por que el evento tiene que ser un procedimiento dentro de una clase, no vale con un simple procedimiento suelto y tiene que tener accesible la variable donde se guarda el componente que va a coger el foco. Si dicho procedimiento se introduce a la clase TForm1 que es la que llama a esta ventana tendría que quedar algo así:
Código Delphi
[-]
var
Edito: TEDit;
procedure TForm1.OnShow(Sender: TObject);
begin
if Edito.CanFocus then
Edito.SetFocus;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FModal: TForm;
Boton: TButton;
Lbl: TLabel;
begin
FModal := TForm.Create(Application);
...
try
FModal.OnShow := OnShow;
FModal.ShowModal; finally
Edifil := Copy(Edito.Text, 1, 5);
FModal.Free;
end;
end;