Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como usar SetFocus en un TForm personalizado (https://www.clubdelphi.com/foros/showthread.php?t=92658)

bulc 21-12-2017 14:25:24

Como usar SetFocus en un TForm personalizado
 
Tengo un TForm personalizado para entrada de datos y me gustaría que al abrirlo el Foco se colocara en el Editor. No sé cómo hacerlo. Aquí pongo el código:
Código Delphi [-]
procedure TForm1.BitBtn3Click(Sender: TObject);  // TForm de recogida de datos.
Var
  FModal: TForm;   Boton: TButton;   Lbl : TLabel;   Edito : TEDit;
begin
  FModal:= TForm.Create(Application);   FModal.Caption:= 'Recoger Nº EDIFIL';
  FModal.BorderStyle:= bsDialog;          FModal.Position:= poScreenCenter;
  Boton := TButton.Create( FModal);
  With Boton do
  begin
    Caption:= 'Salir y Guardar';
    Left:= 85;         Top:= 140;     
   Width:= 180;     Parent:= FModal;     
   Default:=True;    ModalResult:= mrClose;
  end;
  Lbl := TLabel.Create( FModal);
  with Lbl do
  begin
     Caption := 'Escribe tu Nº Edifil: ';      Left:= 90;      
    Top:= 60 ;      Parent:= FModal;
  end;
  Edito:= TEdit.Create(FModal);
  With Edito do
  begin
    Edito.Text:= '9999';     Edito.Font.Size :=18;     
    Edito.Left := 85;          Edito.Top := 80 ;     
    Parent:= FModal;
  end;
  try
    FModal.ShowModal; //Soy Modal y me tienes que cerrar.
  finally
    begin
     Edifil:= Copy(Edito.Text, 1, 5);
     FModal.Free;
    end;
       //Libera todo su contenido
  end;
end;

Caminante 21-12-2017 16:42:17

Hola
Puedes probar poniendo en la propiedad taborder del control el valor 0. Asi sera el primero en tener el foco.

Saludos

bucanero 21-12-2017 17:43:03

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);
  ...
  // resto de componentes

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
  // Importante la variable al objeto tiene que estar fuera para que sea accesible por el evento OnShow
  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; //Soy Modal y me tienes que cerrar.
  finally
    Edifil := Copy(Edito.Text, 1, 5);
    FModal.Free;
    //Libera todo su contenido
  end;
end;

cloayza 21-12-2017 22:06:15

Los TForm tienen una propiedad que se llama ActiveControl, en ella puedes indicar el control que tendrá el foco al mostrar el form.

Código Delphi [-]

form1.ActiveControl:=Edit2;

Saludos cordiales


La franja horaria es GMT +2. Ahora son las 21:44:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi