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 12-05-2008
hexxa hexxa is offline
Miembro
 
Registrado: jun 2005
Posts: 11
Poder: 0
hexxa Va por buen camino
Question Modificar propiedad del un componente

Amigos, tengo el siguiente problema, necesito armar en tiempo de ejecucion, de acuerdo al componente que elija el usuario, el nombre del componente y concatenarle la propiedad que quiero modificar. Por ej, tendria que poder armar lo siguiente cuando hago click sobre un componente:

TControl(Sender).Top

La propiedad que tendria que modificar del componente seleccionado la obtengo de un archivo ini. Lo que no encuentro la forma de resolver es si por ej, hice click sobre un Label y en el archivo ini lei que tengo que modificarle la propiedad Top y Left, es como armo lo siguiente

TControl(Sender) + .Top donde 'Top' lo lei del archivo ini
TControl(Sender) + .Left donde 'Left' lo lei del archivo ini

Espero haber sido claro en la explicacion, desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
Código Delphi [-]
var
   ob : TObject;
begin
   ob := FindComponent(nombre_del_objeto);  // p.e. : nombre_del_objeto := 'ListBox1'
   if ob = nil then begin ShowMessage('No existe ese objeto'); exit; end;

   SetOrdProp(ob,propiedad_a_cambiar,valor_a_poner); // p.e. : propiedad_a_cambiar := 'Top'
end;

como ves, la funcion SetOrdProp sirve solo para establecer propiedades integer, existe tb las SetStrProp, SetMethodProp, etc... (y sus correspondientes GetStrProp, GetOrdProp,... todas indocumentadas :/ ) deberás encontrar el tipo de la propiedad a modificar antes de usar una u otra. Investigando he encontrado que se puede hacer de manera general, pero se usan punteros directos al objeto y parece bastante mas complicado.

Te pongo tb una funcion para encontrar toda la lista de propiedades de un objeto. Desde esta funcion, seguro que puedes determinar el tipo de la propiedad que buscas

Código Delphi [-]
procedure GetPropertyList(Obj:TObject ;List: TStrings;Filter: TTypeKinds);
var PropListPropList;
    count,i : Integer;
begin
  List.Clear;
  Count := GetPropList(Obj.ClassInfo, Filter, nil);
  GetMem(PropList,Count * SizeOf(PPropInfo));
  GetPropList(Obj.ClassInfo, Filter, PropList);
  for i:=0 to Count -1 do
    List.Add(Proplist[i].Name);
end;

Venga, espero q te sirva

PD : links a Free Pascal, http://www.freepascal.org/docs-html/...bjectprop.html

Última edición por coso fecha: 12-05-2008 a las 14:42:30.
Responder Con Cita
  #3  
Antiguo 12-05-2008
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Caso deberías informar que para usar estas funciones hay que declarar la unit TypInfo en el uses.

Saludos.
Responder Con Cita
  #4  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
cierto es xEsk
Responder Con Cita
  #5  
Antiguo 12-05-2008
hexxa hexxa is offline
Miembro
 
Registrado: jun 2005
Posts: 11
Poder: 0
hexxa Va por buen camino
Thumbs up

Gracias a ambos, es lo que estaba necesitando!!!!!
Responder Con Cita
  #6  
Antiguo 12-05-2008
hexxa hexxa is offline
Miembro
 
Registrado: jun 2005
Posts: 11
Poder: 0
hexxa Va por buen camino
Question

La info que me pasaron me vino de maravillas, pero tengo otro problema, cuando la propiedad que deseo modificar/leer es una subpropiedad de una propiedad no lo puedo hacer. Por ej si lo que quiero es modificar la propiedad 'size' de la propiedad 'font' de un tlabel, las funciones SetOrdProp, GetOrdProp no encuentran esa propiedad, o bien me estoy equivocando en como le paso el parametro. He probado con

SetStrProp(TControl(Sender), 'size', 10);

y con

SetStrProp(TControl(Sender), 'font.size', 10);

y no me reconoce ese nombre de propiedad.

Tambien estoy usando GetPropInfo y no la encuentra.

GetPropInfo(TControl(Sender).ClassInfo,'size');

Alguna idea de como debo referenciarla???
Responder Con Cita
  #7  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Código Delphi [-]
var
   ob : TObject;
   ft : TFont;
begin
   ob := FindComponent(nombre_del_objeto);  // p.e. : nombre_del_objeto := 'Edit1'
   if ob = nil then begin ShowMessage('No existe ese objeto'); exit; end;

   ft := (GetObjectProp(ob,'Font') as TFont); //GetObjectProp recoge las propiedades que son un objeto, como en este caso, la fuente
   SetOrdProp(ft,'size',18); // cambiamos ahora el size del objeto que es propiedad del Edit1, su Font
end;
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
Modificar propiedad Table de un ADOTable en tiempo de ejecución Albano Conexión con bases de datos 8 05-03-2007 21:55:22
Modificar propiedad Delta de CDS alucardo Conexión con bases de datos 0 04-10-2006 19:36:41
Alguna propiedad en algunos registros que no me los deje MODIFICAR? Patricio Conexión con bases de datos 2 18-08-2005 15:39:19
Cambiar la propiedad a un componente JefeNet Varios 6 23-11-2004 12:05:45
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24-03-2004 19:46:39


La franja horaria es GMT +2. Ahora son las 19:32:56.


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