Ver Mensaje Individual
  #12  
Antiguo 21-03-2010
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Reputación: 20
ElDuc Va por buen camino
Smile Solucionado

Colegas, muchas gracias por vuestra colaboración, por fin lo he conseguid.

Pongo el código y mis comentarios para revertir en aquellos que, como yo hasta ahora, puedan necesitarlo.

Icono del componente:
Lo he solucionado utilizando un archivo *.DCR en lugar de *.RES.
Ya sabéis, si vuestro archivo de código en el que se declara el componente se llama Componentes.PAS, vuestro paquete de recursos debe llamarse Componentes.DCR (igual que el *.PAS, pero cambiando la extensión) y si dentro del archivo Componentes.PAS hay la declaración de dos componentes Componente1 y Componente2, deberéis crear dos bitmaps de 24x24 pixels con los nombre COMPONENTE1 y COMPONENTE2 (TODO EN MAYÚSCULAS), Lo compilais todo y a correr.

Propiedades desplegables (Conjuntos / Record)
Aqií os pongo el código completo de mi unidad:
Código Delphi [-]
unit _ieApplication;
 
interface
 
uses
  SysUtils, Classes, JfMain;
 
type
  TieData=Class(TPersistent)
    Private
    vA:Integer;
    vB:String;
    Function rA:Integer;
    Procedure wA(Value:Integer);
    Function rB:String;
    Procedure wB(Value:String);
    Published
    // Normalmente no son necesarios estos métodos a no ser que se quiera ejercer
    // algún control, pero esto limitará las posibilidades de los descendientes
    Property A:Integer Read rA Write wA;
    Property B:String Read rB Write wB;
    End;

  TieApplication = class(TJfCApplication)
    private
    { Private declarations }
    vieData:TieData;
    Procedure wieData(V:TieData);
    protected
    { Protected declarations }
    public
    { Public declarations }
    Constructor Create(AOwner:TComponent); Override;
    Destructor Destroy; Override;
    published
    { Published declarations }
    // No me acepta una función de lectura cuando el tipo es una clase,
    // pero no es una limitación muy importante
    Property ieData:TieData Read vieData Write wieData;
  end;
 
procedure Register;
 
implementation
 
Function TieData.rA:Integer;
Begin
Result:=vA;
End;
 
Procedure TieData.wA(Value:Integer);
Begin
vA:=Value;
End;
 
Function TieData.rB:String;
Begin
Result:=vB;
End;
 
Procedure TieData.wB(Value:String);
Begin
vB:=Value;
End;
 
Constructor TieApplication.Create(AOwner:TComponent);
Begin
Inherited Create(AOwner);
vieData:=TieData.Create;
// Default
vieData.A:=123;
vieData.B:='Vacia';
End;
 
Destructor TieApplication.Destroy;
Begin
vieData.Free;
Inherited;
End;
 
Procedure TieApplication.wieData(V:TieData);
Begin
vieData.A:=V.A;
vieData.B:=V.B;
End;
 
procedure Register;
begin
  RegisterComponents('ieCRON', [TieApplication]);
end;
 
end.

Cuando quieres crear un conjunto de propiedades (las que en el inspector de objetos se pueden replegar y desplegar con el icono +desplegar y -replegar)
Debes crear una clase con sus propiedades, como en mi código en el cual creo una propiedad ieData que contiene dos propiedades:
A:Integer y B:String;

Espero que esta información pueda ser de utilidad para los que andéis perdidos como estaba yo.
Responder Con Cita