• Domingo 22 de Diciembre de 2024, 09:31

Autor Tema:  Cast Para Controles  (Leído 1507 veces)

senzao18

  • Miembro HIPER activo
  • ****
  • Mensajes: 553
    • Ver Perfil
Cast Para Controles
« en: Jueves 3 de Marzo de 2005, 03:53 »
0
Hola tengo lo siguiente
 
     form1.Components[1] <----Esa linea hace referencia a un control en un form como le hago para poder aplicar un cast o algo por el estilo para poder manejar las propiedades de ese control.


        if form1.Components[5].ClassName = 'TLabel' then
                showmessage(form1.Components[1].Name)

Con el codigo anterior comaro si el control es un TLabel y posteriormente muestor su nombre, pero lo que ocupo es sacar las propiedades de ese control sin tener que poner Label1.Caption sino algo asi ---> form1.Components[5].Caption <--- Eso no funciona.

Espero y puedan ayudarme.

Gracias.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo -->

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Cast Para Controles
« Respuesta #1 en: Jueves 3 de Marzo de 2005, 13:42 »
0
esta la palabra reservada "is" que se usa tal como se traduce...
si El Componente es TLabel entonces......
Código: Text
  1.  
  2.  if Form1.Components[1] is TLabel then
  3.  with TLabel(Form1.Component[1]) do
  4.  begin
  5.   ........
  6. end
  7. ///o
  8. TLabel(Form1.Component[1]).Text := 'Algo';
  9.  
  10.  

Otra de las palabras reservadas utilies es "as"...
Con Componente como TButton hacer...
Código: Text
  1.  
  2. with Form1.Components[1] as TButton do
  3. begin
  4. ...
  5.  
  6.  
El problema esta si el componente dicho, no es un TButton, delphi lanzara una excepcion.

ALGO QUE NUNCA SE DEBE HACER
Código: Text
  1.  
  2. if sender is TComboBox then
  3. with sender as TComboBox do
  4. begin
  5. .....
  6.  
  7.  
Para que se quiere pasar al sender como TComboBox sabiendo que si es combobox.
Para eso se usa la manera de ariba de todo.

senzao18

  • Miembro HIPER activo
  • ****
  • Mensajes: 553
    • Ver Perfil
Re: Cast Para Controles
« Respuesta #2 en: Jueves 3 de Marzo de 2005, 16:33 »
0
Gracias lo probaré , pero al ver el código me suena muy lògico casi estoy seguro que funcionara.


hasta pronto.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo -->

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Cast Para Controles
« Respuesta #3 en: Jueves 3 de Marzo de 2005, 17:11 »
0
Código: Text
  1.  
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. begin
  4.   if Form1.Components[0] is TLabel then
  5.      TLabel(Form1.Components[0]).Caption := 'Funciona';
  6. end;
  7.  
  8.  
Pues si funciona.

Aunque no creo que sea la forma de hacerlo.
Lo mejor es que definas tu propio procedimiento para el evento especifico y se lo asignes a los compontes que necesites y luego hagas un Cast con el parametro Sender.
Te paso el codigo completo....
Necesitaras tener en tu form un label1 y un button1....
Código: Text
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     Label1: TLabel;
  13.     procedure FormCreate(Sender: TObject);
  14.   private
  15.     procedure MyClick(Sender: TObject);
  16.   public
  17.     { Public declarations }
  18.   end;
  19.  
  20. var
  21.   Form1: TForm1;
  22.  
  23. implementation
  24.  
  25. {&#036;R *.dfm}
  26.  
  27. procedure TForm1.MyClick(Sender: TObject);
  28. begin
  29.   if Sender is TLabel then ShowMessage('Presionaste un Label')
  30.   else if Sender is TButton then ShowMessage('Presionaste un boton');
  31. end;
  32.  
  33. procedure TForm1.FormCreate(Sender: TObject);
  34. begin
  35.   Button1.OnClick := MyClick;
  36.   Label1.OnClick := MyClick;
  37. end;
  38.  
  39. end.
  40.  
  41.