Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-05-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Ver el tipo al que pertenece una variable u objeto

Hola a todos, tengo el siguiente inconveniente: necesito determinar el tipo de componente que hay en un form para, luego tomar un camino u otro, me explico mejor, el form tiene varios componentes, tsedit, tslabel, tcombobox, etc, etc, cuando reciben el foco debo determinar que tipo de componente recibe el foco, si es un tsedit hago algo, si es un tslabel hago otra cosa, etc,.
Necesitaría algo parecido a VarType pero para analizar el tipo de componente enfocado.

Gracias y saludos.
Responder Con Cita
  #2  
Antiguo 20-05-2010
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Para saber de que tipo es cierto objeto puedes usar el operador is:

Código Delphi [-]
// Preguntamos si cierto objeto es un descendiente de TCustomEdit:
if Edit1 is TCustomEdit then
  ShowMessage('Desciende de TCustomEdit');

Espero que te sirva para aclarar tu duda.


Saludos...
Responder Con Cita
  #3  
Antiguo 20-05-2010
elarys elarys is offline
Miembro
 
Registrado: abr 2007
Posts: 94
Poder: 18
elarys Va por buen camino
me ganaste de mano apurado
Responder Con Cita
  #4  
Antiguo 21-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tal como dice maeyanes el operador is te permite averiguar que tipo de objeto es el actual,
pero tiene un inconveniente: aceptaría como TButton a un descendiente de él. (Como bién lo
aclara maeyanes en la línea de comentario).
Para saber exactamente cuál es el tipo del componente tendrías que usar ClassType para averiguarlo.

Un ejemplo:
Código:
procedure TForm1.ShowTipoCtrl;
var
  i: Integer;
  TC: TClass;
begin
  for i:= ControlCount -1 downto 0 do
  begin
    TC:= Controls[i].ClassType;
    if TC = TButton  then ShowMessage('TButton');
    if TC = TLabel then  ShowMessage('TLabel');
    if TC = TButtonExt then ShowMessage('TButtonExt')
  end
end;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 21-05-2010 a las 03:22:26.
Responder Con Cita
  #5  
Antiguo 21-05-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Gracias por las respuestas, les comento como estoy manejando esta cuestión, en el post que envié no había aclarado que lo que me interesaba averiguar es el tipo de componente que dispara un evento, en mi caso, el evento es el OnChange, como saben, el manejador del evento recibe el componente que lo convoca por medio de la variable Sender que es del tipo object. Esta variable tiene una propiedad llamada ClassName que devuelve el tipo de objeto, he utilizado esta propiedad y he resuelto el problema que es muy sencillo, lo que necesitaba poner era un msg al operador que indique la cantidad de caracteres que restan entrar en el campo, pero cuando se trata de un campo tsmemo su comportamiento era diferente, les dejo el código para su revisión.

Código Delphi [-]
procedure TfrmABMDatos.VerLargoCadena(Sender: TObject);
begin
  if Sender.ClassName = 'TsMemo' then
    statusForm.Panels[0].Text := 'Caracter [' + IntToStr(Length(TsEdit(Sender).Text)) + ']'
  else
    statusForm.Panels[0].Text := 'Caracter [' + IntToStr(Length(TsEdit(Sender).Text)) + ' de ' + IntToStr(TsEdit(Sender).MaxLength) + ']';
end;

cuando se trata de un tsmemo, la leyenda que aprece es simplemente la cantidad de caracteres que se han tipeado, pero cuando se trata de un campo tsedit, pongo la cantidad de caracteres disponibles restantes del largo máximo aceptado:

Caracter [2000] o bien Caracter [12 de 50]

Saludos y nuevamente, gracias por las respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Variable : Tabla.Objeto... sepuede..? PABECO Conexión con bases de datos 2 08-05-2010 17:40:31
acceder a objeto mediante una variable joanajj Varios 37 12-07-2007 18:02:06
Clase, objeto, tipo? [Gunman] OOP 3 04-01-2006 16:11:32
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
Enlazar una variable a un objeto Nuria Varios 2 20-01-2004 17:00:40


La franja horaria es GMT +2. Ahora son las 08:12:18.


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
Copyright 1996-2007 Club Delphi