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 10-10-2008
gushynet gushynet is offline
Miembro
 
Registrado: ago 2008
Posts: 26
Poder: 0
gushynet Va por buen camino
acceso a las propiedades de un objeto

Hola a todos, tengo una duda a ver si me podeis orientar un poco:

supongamos que tengo una función que pretende comparar dos objetos pasados por parámetro.

La función tiene además un tercer parámetro que es una cadena que indica el nombre de la propiedad común a los objetos en función de la cual se hará la comparación. Sería algo asi:


Código Delphi [-]
function Comparar(Obj1:TObjeto;Obj2:TObjeto;propiedad:AnsiString);
begin      
   if Obj1.propiedad = Obj2.propiedad then         
       result := true      
   else          
       result := false; 
end;


La duda es simplemente si hay alguna manera en delphi de acceder a los campos de un objeto de esta manera.

Gracias de antemano por la ayuda.
Un saludo

Última edición por gushynet fecha: 10-10-2008 a las 03:37:48.
Responder Con Cita
  #2  
Antiguo 10-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola gushynet,
Hay una manera. La solución es que dichas propiedades sea publicadas, es decir que sean declaradas published. De este modo mediante RTTI se puede acceder a dichas propiedades.

Para saber más sobre RTTI sugiero una búsqueda, hay hilos que tratan el tema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 10-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Hay otro método que quizás te sirva:

Lo primero es definir una función de comparación, tal y como hace la VCL de delphi:
Código Delphi [-]
type TObjetoComp = function (obj1:Tobjeto; obj2:Tobjeto):integer;
esto viene a decir que eso será una función que recibe 2 objetos y devuelve un número enteronormalmente:
-1 si obj1 < obj2
0 si obj1 = obj2
1 si obj1 = obj2

Ahora se trataría de crear tantas funciones como posibilidades tengas (este es el rollo y puede que sea demasiado... no lo sé):
Código Delphi [-]
function OrdenaNombreAsc(obj1:Tobjeto; obj2:Tobjeto):integer;
begin
    Result := compareText (obj1.nombre, obj2.nombre);
end;

function OrdenaCliente(obj1:Tobjeto; obj2:Tobjeto):integer;
begin
  if obj1.idcliente < obj2.idcliente then
      Result := -1
 else if obj1.idlciente > obj2.idcliente then
     Result := 1
 else Result := 0;
end;

Estas funciones son muy fáciles de implementar y muy rápido, ahora tu algoritmo de ordenación pregunta al usuario cómo quiere ordenarla y llama a la función concreta:
Código Delphi [-]
procedure Tobjeto.Sort;
var fun: TobjetoComp;
begin
  if OrdenaNombre then
     fun := OrdenaNombreAsc
  else if ordenaPorCliente then
      fun := OrdenaCliente;
  while i < listaObjetos.count-2 do
  begin
     res :=  fun(listaObjetos[i], listaObjetos[i+1]);
     mover_objetos_de_sitio
    inc(i);
  end;
end;

Así es como funciona el método Sort del TObjectList, y si usas un TObjectList para almacenar tus objetos, sólo necesitas implementar las funciones de ordenación y llamar a ObjectList1.Sort.

Espero te sirva.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 17-10-2008
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
¡Hola!

No sé si aún es tiempo, pero mi sugerencia sería apoyarte en la función GetPropValue, si es que las propiedades a comparar son publicadas.

Código Delphi [-]
Uses
  TypInfo;

procedure TForm1.Button4Click(Sender: TObject);
begin
  If GetPropValue (Button1, 'Caption') =
  GetPropValue (Button2, 'Caption') Then
    ShowMessage ('Button1 y Button2 tienen el mismo texto.');

  If GetPropValue (Button2, 'Caption') <>
  GetPropValue (Button3, 'Caption') Then
    ShowMessage ('Button2 y Button3 tienen textos diferentes.');
end;

Anexé un archivo con el ejemplo completo.

Saludos.

Al González.

Última edición por Al González fecha: 08-01-2013 a las 05:26:17.
Responder Con Cita
  #5  
Antiguo 19-10-2008
gushynet gushynet is offline
Miembro
 
Registrado: ago 2008
Posts: 26
Poder: 0
gushynet Va por buen camino
Question

gracias por la ayuda, es lo que he hecho, como me sugirio Delphius he mirado documentacion sobre rtti, concretamente el fichero TypInfo.

Lo que estoy intentando es realizar una operacion de asignacion generica. Ahora estoy intentandolo con las propiedades que son objetos a su vez, cosa que veo bastante compleja pero todo es ponerse.

Por cierto, en tiempo de ejecucion solo puedo obtener informacion de las propiedades publicadas como he leido en la documentacion que he encontrado? o hay alguna manera de obtener informacion de las variables declaradas en la seccion private de una clase?


Gracias. Un saludo.
Responder Con Cita
  #6  
Antiguo 19-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
solo published.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
acceso a propiedades con nombre de control almacenado en string Byfed OOP 2 24-07-2007 20:29:55
¿Como creo una lista de checkbox y luego acceso a sus propiedades?!!! NovatoEnObjetos OOP 10 16-07-2007 21:44:26
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 12:58:22
controlar acceso a un objeto desde diferentes threads derteo OOP 2 07-02-2006 19:16:36
Problema acceso propiedades de un componente de otro formulario mguixot OOP 3 01-11-2004 01:40:09


La franja horaria es GMT +2. Ahora son las 07:40:49.


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