Ir al contenido


Foto

Buscar propiedad de un objeto


  • Por favor identifícate para responder
7 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 30 junio 2009 - 07:09

Hola a todos.

Tengo un objeto con una serie de propiedades, estas propiedades deben ser asignadas a un Label dependiendo el nombre del mismo.

El asunto esta en como buscar el nombre de una propiedad teniendo el nombre de un objeto.  algo asi



delphi
  1. if Componente is TLabel then
  2. begin
  3.   TLabel(Componente).Caption := Traductor.*TLabel(Componente).Name*
  4. end;



*TLabel(Componente).Name* aqui seria el nombre del componente.  Es la parte que no se me ocurre como hacerlo  :huh: :grin:
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.282 mensajes
  • LocationMéxico

Escrito 30 junio 2009 - 08:51

Hola

Y esto no te lo hace automáticamente cuando asignas el name del objeto???

Salud OS
  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 30 junio 2009 - 09:13

creo que no me explique, en resumen lo que necesito es buscar en el objeto traductor el valor de la propiedad que se llame igual al Label
  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 30 junio 2009 - 12:10

Puedes hacer uso de la función FindComponent que te devuelve la referencia a un componente por su nombre.
De esa manera podrás tener acceso a sus propiedades.

ejemplo




delphi
  1. procedure TForm2.Button1Click(Sender: TObject);
  2.   Var
  3.     LbControl: TComponent;
  4. begin
  5.   Lbcontrol := Nil;
  6.   LbControl := FindComponent('LabelN');
  7.   IF LbControl <> Nil Then
  8.     With LbControl As TLabel Do
  9.       Caption := 'Algo'
  10. end;


  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 30 junio 2009 - 12:53

asi pero al contrario  :


Yo tengo el nombre del componente u objeto, se llama Traductor, ahora quiero ubicar el valor de la propiedad cuyo nombre sea igual al TLabel que acabo de encontrar con el findcomponent.

Esto con la finalidad de sustituir el caption por el que tenga esa propiedad.

  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 30 junio 2009 - 01:03

:$ sorry me equivoqué amigo. jejeje

esto te servirá entonces, es una función que lista las propiedades de un componente, nombre y valor.

La uso como base para generar un xml de los objetos contenidos en un formulario.

Saludos.




delphi
  1. uses TypInfo
  2.  
  3. procedure CompToDef(PMemProps: TMemo; Comp: TPersistent);
  4. var
  5.   nProps, i: Integer;
  6.   PropList: PPropList;
  7.   Value: Variant;
  8. begin
  9.   nProps := GetTypeData (Comp.ClassInfo)^.PropCount;
  10.   GetMem (PropList, nProps * SizeOf(Pointer));
  11.   try
  12.     GetPropInfos (Comp.ClassInfo, PropList);
  13.     for i := 0 to nProps - 1 do
  14.       begin
  15.         Value := GetPropValue (Comp, PropList [i].Name);
  16.         PMemProps.Lines.Add('    '  + PropList [i].Name + ' =  ' + VarToStr(Value));
  17.         if (PropList [i].PropType^.Kind = tkClass) and (Value <> 0) then
  18.           if TObject (Integer(Value)) is TComponent then
  19.             PMemProps.Lines.Add('    '  + TComponent (Integer(Value)).Name)
  20.           else
  21.             CompToDef(PMemProps, TObject (Integer(Value)) as TPersistent);
  22.       end;
  23.   finally
  24.     FreeMem (PropList);
  25.   end;
  26. end;





  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 30 junio 2009 - 01:29

Amigo esto es RTTI cierto? ahora que sera mas rapido? sabiendo que cada vez que se carga una pantalla deberemos cambiar todos los label por su correspondiente valor.

Tomar ese valor como me lo indicas o consultar un INI???
  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 30 junio 2009 - 01:49

Correcto es RTTI.

Sobre la velocidad, pues en la medida que ahorres las iteraciones sobre todas las propiedades de los controles será mucho mejor. Así­ que si lo almacenas en un INI y te ahorra las búsquedas, me voy por el INI.

Saludos
  • 0