Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2004
Aztaroth Aztaroth is offline
Miembro
 
Registrado: dic 2003
Ubicación: Matamoros
Posts: 52
Poder: 21
Aztaroth Va por buen camino
Operador IS

Hay algun sustituto en Builder para el operador "is" de delphi

ej :

if IdMsgSend.MessageParts.Items[idx] is TIdAttachment then

como seria la implementacion en BCpp 6

Gracias.
Responder Con Cita
  #2  
Antiguo 31-07-2004
xeroq xeroq is offline
Registrado
 
Registrado: jul 2004
Posts: 8
Poder: 0
xeroq Va por buen camino
Primero,todos las clases de la VCL en C++ Builder deben crearse exclusivamente como punteros,por compatibilidad con Object Pascal.

Para poder hacer lo mismo sería:

if (dynamic_cast<TButton *>(Sender)!=NULL)
hacer_algo;

Te diria si Sender es un TButton
Responder Con Cita
  #3  
Antiguo 02-08-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 21
barman Va por buen camino
No se si es a lo que te refieres

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Sender ->ClassNameIs("TButton"))
ShowMessage("Boton");
}
Responder Con Cita
  #4  
Antiguo 02-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por barman
No se si es a lo que te refieres

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Sender ->ClassNameIs("TButton"))
ShowMessage("Boton");
}
Pero un TButton es un TControl... y:

Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Sender ->ClassNameIs("TControl"))
        ShowMessage("Control");
nos diría que no lo es... cuando el operador IS en delphi, nos diría (correctamente) que si lo es.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 03-08-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 21
barman Va por buen camino
Lo que quieres saber es la clase padre,

TClass ClassRef;
ClassRef = Sender ->ClassType();
ClassRef = ClassRef->ClassParent();
ShowMessage(String(ClassRef->ClassName()));

Tendrias que hacerte un bucle hasta que ClassRef == NULL y te iria diciendo todos los atecesores, No se me ocurre otra cosa.
Responder Con Cita
  #6  
Antiguo 03-08-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 21
barman Va por buen camino
Gueno, blanco y migao

TClass ClassRef;
ClassRef = Sender ->ClassType();
ClassRef = ClassRef->ClassParent();
while (ClassRef != NULL)
{
ShowMessage(String(ClassRef->ClassName()));
ClassRef = ClassRef->ClassParent();
}
Responder Con Cita
  #7  
Antiguo 03-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
me gusta mas el dynamic_cast...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 04-08-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 21
barman Va por buen camino
A, si , bueno, vale, pero, tal vez, quiza, no se, ¿Cual era la pregunta?,
el codigo es para saber todos los antecesores de un componente, no tengo ni idea de los que hace el is de delphy.
Y ya ta.
Responder Con Cita
  #9  
Antiguo 04-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por barman
¿Cual era la pregunta?


Cita:
Empezado por barman
no tengo ni idea de los que hace el is de delphy
mejor dejo que el propio delphi se explique:

Cita:
Empezado por delphi help
The is operator, which performs dynamic type checking, is used to verify the actual runtime class of an object. The expression

object is class

returns True if object is an instance of the class denoted by class or one of its descendants, and False otherwise. (If object is nil, the result is False.) If the declared type of object is unrelated to class—that is, if the types are distinct and one is not an ancestor of the other—a compilation error results. For example,

if ActiveControl is TEdit then TEdit(ActiveControl).SelectAll;

This statement casts a variable to TEdit after first verifying that the object it references is an instance of TEdit or one of its descendants.
De esta cuenta, que las siguientes operaciones resultarian en:

siendo miGrid un TDBGrid:
Código:
miGrid is TDBGrid          (true)  miGrid si es un TdbGrid
miGrid is TCustomControl   (true)  miGrid si es un TdbGrid
miGrid is TComponent       (true)  miGrid si es un TdbGrid
miGrid is TObject          (true)  miGrid si es un TdbGrid
miGrid is TStringGrid      (falso) miGrid no es un TStringGrid
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 21:33:30.


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