Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > OOP
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 12/05/2008
hexxa hexxa is offline
Miembro
 
Join Date: 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.
Reply With Quote
  #2  
Old 12/05/2008
[coso] coso is offline
Miembro Premium
 
Join Date: May 2008
Location: 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

Last edited by coso : 12/05/2008 at 14:42.
Reply With Quote
  #3  
Old 12/05/2008
xEsk's Avatar
[xEsk] xEsk is offline
Miembro Premium
 
Join Date: Feb 2006
Posts: 454
Poder: 21
xEsk Va por buen camino
Caso deberías informar que para usar estas funciones hay que declarar la unit TypInfo en el uses.

Saludos.
Reply With Quote
  #4  
Old 12/05/2008
[coso] coso is offline
Miembro Premium
 
Join Date: May 2008
Location: Girona
Posts: 1,678
Poder: 0
coso Va por buen camino
cierto es xEsk
Reply With Quote
  #5  
Old 12/05/2008
hexxa hexxa is offline
Miembro
 
Join Date: Jun 2005
Posts: 11
Poder: 0
hexxa Va por buen camino
Thumbs up

Gracias a ambos, es lo que estaba necesitando!!!!!
Reply With Quote
  #6  
Old 12/05/2008
hexxa hexxa is offline
Miembro
 
Join Date: 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???
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Modificar propiedad Table de un ADOTable en tiempo de ejecución Albano Conexión con bases de datos 8 05/03/2007 21:55
Modificar propiedad Delta de CDS alucardo Conexión con bases de datos 0 04/10/2006 19:36
Alguna propiedad en algunos registros que no me los deje MODIFICAR? Patricio Conexión con bases de datos 2 18/08/2005 15:39
Cambiar la propiedad a un componente JefeNet Varios 6 23/11/2004 12:05
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24/03/2004 19:46


All times are GMT +2. The time now is 01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi