Einzelnen Beitrag anzeigen

daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bei Properties Untermenüs erzeugen

  Alt 21. Feb 2008, 10:46
Hm, hab also den Code so übernommen und mal testweise drei "UnterEigenschaften" eingefügt:

Delphi-Quellcode:
TPhongProperties = class(TPersistent)
  private
    /// vector which points towards the light source
    FPhongLightVectorX: Single;
    FPhongLightVectorY: Single;
    FPhongLightVectorZ: Single;
    FOnChange : TNotifyEvent;
    procedure SetLightVectorX(ALightVectorX: Single);
    procedure SetLightVectorY(ALightVectorY: Single);
    procedure SetLightVectorZ(ALightVectorZ: Single);
    function GetLightVectorX: Single;
    function GetLightVectorY: Single;
    function GetLightVectorZ: Single;
  protected
    procedure DoChange; virtual;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source : TPersistent); override;
    property OnChange : TNotifyEvent read FOnChange write FOnChange;
  published
    /// x-coordinate of vector which points towards the light source
    property PhongLightVectorX: Single read GetLightVectorX write SetLightVectorX;
    /// y-coordinate of vector which points towards the light source
    property PhongLightVectorY: Single read GetLightVectorY write SetLightVectorY;
    /// z-coordinate of vector which points towards the light source
    property PhongLightVectorZ: Single read GetLightVectorZ write SetLightVectorZ;
  end;
Delphi-Quellcode:
constructor TPhongProperties.Create;
begin
  FPhongLightVectorX := 0;
  FPhongLightVectorY := 0;
  FPhongLightVectorZ := 0;
end;

destructor TPhongProperties.Destroy;
begin
  inherited Destroy;
end;

procedure TPhongProperties.Assign(Source : TPersistent);
begin
  If Source is TPhongProperties then
  begin
    FPhongLightVectorX := TPhongProperties(Source).FPhongLightVectorX;
    FPhongLightVectorY := TPhongProperties(Source).FPhongLightVectorY;
    FPhongLightVectorZ := TPhongProperties(Source).FPhongLightVectorZ;
  end
  else
    inherited Assign(Source);
end;

procedure TPhongProperties.DoChange;
begin
  If Assigned(FOnChange) then
    FOnChange(Self);
end;
Dann halt in meiner Komponenete ein Property eingefügt:

property PhongShading: TPhongProperties read FPhongShading write FPhongShading; Im ObjectInsepector wird jetzt dann zwar PhongShading als Eigenschaft angezeigt, dahinter steht dann TPhongProperties, da ist auch ein Plus zum Aufklappen allerdings passiert dann nix. Ist leer... Was hab ich noch übersehen ?
  Mit Zitat antworten Zitat