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 31-03-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
Saber si existen propiedades

Existe alguna funcion para saber si existen propiedades en los componentes. Pj. Saber si existe la propiedad visible en un componente
Responder Con Cita
  #2  
Antiguo 31-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Para eso necesitas un poquito de RTTI

Código:
var
  PropInfo  : PPropInfo;
  Component : TComponent;
begin
  for i := 0 to Form.ComponentCount - 1 do
  begin
    Component := Form.Components[i];

    // Miramos si tiene la propiedad CAPTION
    PropInfo := GetPropInfo( Component.ClassInfo, 'Caption' );
    if Assigned(PropInfo) then
      SetStrProp(Component, 'Caption', GetIdioma(GetStrProp(Component, 'Hola')));
  end;
En el ejemplo, recorremos todos los componentes de un Formulario mirando si tienen la propiedad caption y, si la tienen, asignandole 'Hola'

MODIF.: se me habia olvidado comentar que has de añadir en el uses la unit TypInfo en que le encontrarás otras funciones SetXXXX y GetXXXX según la necesidad del tipo de variable

Última edición por __cadetill fecha: 31-03-2004 a las 11:59:12. Razón: Olvido
Responder Con Cita
  #3  
Antiguo 31-03-2004
Roger Roger is offline
Miembro
 
Registrado: mar 2004
Posts: 17
Poder: 0
Roger Va por buen camino
Muchas gracias
Responder Con Cita
  #4  
Antiguo 01-04-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Propiedades publicadas

¡Buen día a todos!

Cabe destacar que la información de tiempo de ejecución que arrojan las funciones de la unidad TypInfo, se aplica básicamente a los elementos publicados de las clases (sección Published), es decir a las propiedades y eventos que normalmente son visibles en el inspector de objetos.

Por lo cual, si una clase de objeto cuenta con una propiedad pública (Public no Published) llamada "Visible", el compilador no generará para ella información de tiempo de ejecución que pueda ser obtenida con las funciones de la unidad TypInfo.

En general, me parecen muy útiles las funciones de la unidad TypInfo. Gracias a ellas, he podido crear algunas funciones que facilitan ciertas operaciones en lote sobre un grupo de componentes.

¡Saludos!

Al González .
Responder Con Cita
  #5  
Antiguo 02-04-2004
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 22
Nuria Va por buen camino
Question Duda...

Hola Al!

A ver si me ha quedado claro, un objecto tiene una propiedad public. Cuando estoy en tiempo de ejecución no puedo saber si ese objeto tiene dicha propiedad... , no hay manera de saberlo?

Un saludillo!
Responder Con Cita
  #6  
Antiguo 02-04-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Buen día a todos! Hola Nuria.


Cita:
Empezado por Nuria
...un objecto tiene una propiedad public. Cuando estoy en tiempo de ejecución no puedo saber si ese objeto tiene dicha propiedad... , no hay manera de saberlo?...
Efectivamente, en tiempo de ejecución no hay forma de saber si un objeto tiene una propiedad pública que lleve cierto nombre. La información RTTI de nombres y tipos de propiedades, se genera sólo para las propiedades publicadas de los objetos.


Esto tiene que ver con la directiva de compilación $TYPEINFO/$M:

The $M switch directive controls generation of runtime type information (RTTI). When a class is declared in the {$M+} state, or is derived from a class that was declared in the {$M+} state, the compiler generates runtime type information for fields, methods, and properties that are declared in a published section. If a class is declared in the {$M-} state, and is not derived from a class that was declared in the {$M+} state, published sections are not allowed in the class. Note that if a class is forward declared, the first declaration of the class must be declared with the $M switch.

When the $M switch is used to declare an interface, the compiler generates runtime type information for all properties and methods. That is, for interfaces, all members are treated as if they were published.

Note: The TPersistent class defined in the Classes unit of the component library is declared in the {$M+} state, so any class derived from TPersistent will have RTTI generated for its published sections. The component library uses the runtime type information generated for published sections to access the values of a component's properties when saving or loading form files. Furthermore, the IDE uses a component's runtime type information to determine the list of properties to show in the Object Inspector.



Código de la función IsPublishedProp (¿Es Propiedad Publicada?), de la unidad TypInfo (Delphi 7):
Código:
function IsPublishedProp(Instance: TObject; const PropName: string): Boolean;
begin
  Result := GetPropInfo(Instance, PropName) <> nil;
end;
Espero esto sea de utilidad. Seguimos en contacto.

Al González .
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 22:42:36.


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