Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Localizar un componente y darle el foco (https://www.clubdelphi.com/foros/showthread.php?t=65197)

GerTorresM 26-11-2009 23:32:22

Localizar un componente y darle el foco
 
Hola a Todos:

Me encuentro escibiendo un procedimiento mediante el cual pueda darle el foco a un control ej boton, edit; el código que utilizo es el siguiente

Código Delphi [-]
procedure EstablecerFoco(Formulario : TForm; Control : TWinControl);
begin
   Try
     Formulario.FindComponent('Control') as TWinControl;
     Formulario.Control.SetFocus;
   Except
     MessageDlg('No se lozalizo el control ' + Control.Name, mtInformation,[mbOk], 0);
   End;
end;

al intentar correr queda en la cuarta linea y me envia los siguientes mensajes

[Error] UProcedimientos.pas(425): Statement expected, but expression of type 'TWinControl' found
[Error] UProcedimientos.pas(426): Undeclared identifier: 'Control'
[Error] UProcedimientos.pas(426): Not enough actual parameters

Y la verdad no tengo ni idea que debio hacer, agradezco su colaboración


gertorresm

white_zombie 27-11-2009 10:42:00

Hola, prueba de esta forma.

Código Delphi [-]
procedure EstablecerFoco(Formulario : TForm; Control : TWinControl);
begin
   Try
     TWinControl(Formulario.FindComponent(Control.Name)).SetFocus;
   Except
     MessageDlg('No se lozalizo el control ' + Control.Name, mtInformation,[mbOk], 0);
   End;
end;

Un Saludo.

krlox31416 27-11-2009 11:14:05

uso del tag
 
si configuras en las propiedad del button o edit el tag deberias condicionar con un if el button a tag 1 quedaria condicionado de esta manera si button tiene el tag a 1 hacer de lo contrario que pase el foco al edit sin usar funciones.

Código Delphi [-]
begin 
button1.setfocus;
end
else
begin
edit1.setfocus;
end;


Saludos

coso 27-11-2009 17:55:37

Hola,
tienes un error de concepto. Si le estas pasando el objeto que quieres darle el foco, ¿para que lo vuelves a buscar con findcomponent?

Código Delphi [-]
procedure EstablecerFoco(Formulario : TForm; Control : TWinControl);
begin
   Try
     Formulario.FindComponent('Control') as TWinControl;
     Formulario.Control.SetFocus;
   Except
     MessageDlg('No se lozalizo el control ' + Control.Name, mtInformation,[mbOk], 0);
   End;
end;

aparte que tendrias que usar el control.Name. Ten en cuenta que una cosa es el nombre del objeto, y otra el de la variable con el que tu estas trabajando:

Código Delphi [-]
var 
   o1 : TControl;
   o2 : TControl;
   r : TControl;
   edit1 : TEdit;
begin
   o1 := TControl.Create(self);
   o2 := TControl.Create(self);
   ...
   o1.Name := 'control';
   o2.Name := 'o1';

   r := FindComponent(o2.Name) as Tcontrol; // r sera o2
   r := FindComponent(o1.Name) as Tcontrol; // r sera o1
   r := FindComponent('o1') as Tcontrol // r sera o2
   r := FindComponent('control') as TControl // r sera o1
end;

para lo que quieres hacer, con la funcion que tienes, tansolo debes hacer

Código Delphi [-]
procedure EstablecerFoco(Control : TWinControl);
begin
   if assigned(Control) then Control.SetFocus;
end;

y si quieres encontrar algun objeto por su nombre entonces

Código Delphi [-]
procedure EstablecerFoco(Formulario : TForm; s : string);
begin 
   try
       (Formulario.FindComponent(s) as TWinControl).SetFocus;
   except
    ...
   end;
end;

espero se te haya aclarado algo mas. Un saludo.


La franja horaria es GMT +2. Ahora son las 19:25:39.

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