Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bei Properties Untermenüs erzeugen (https://www.delphipraxis.net/108921-bei-properties-untermenues-erzeugen.html)

daschaos 21. Feb 2008 09:15


Bei Properties Untermenüs erzeugen
 
Ich bin mir fast sicher, dass das Thema hier schon ma angesprochen wurde, aber anscheinend geb ich die falschen Suchwörter ein. Meine Komponente hat soviele Properties, dass das mittlerweile zu unübersichtlich wird. Deswegen würde ich diese gerne zusammenfassen und Untermenüs bilden, wie das zum Beispiel im Object Inspector bei Font der Fall ist...

Weiß nicht so recht, wie ich das bewerkstelligen soll bzw. nach welchem Begriff ich suchen soll, um das halt ma nachzulesen....:(

Danke schonmal!

Liebe Grüße,
Laura

DeddyH 21. Feb 2008 09:18

Re: Bei Properties Untermenüs erzeugen
 
Der Thread war hier

daschaos 21. Feb 2008 10:20

Re: Bei Properties Untermenüs erzeugen
 
Ok, also muss ich mir eine eigene Klasse erzeugen. Danke schonmal :). Aber wie schaffe ich das jetzt, dass das innerhalb des OI meiner Komponente angezeigt wird. Die haben ja momentan noch nich viel miteinander zu tun... Irgendwie stell ich mich doof an, ich weiß.... also ich hatte ja vorher meine Properties in meiner Komponenete, jetzt klaue ich mir die ganzen Properties samt Getter und Setter und packe die in meine neu erzeugte Klasse. Und nu :)?

DeddyH 21. Feb 2008 10:32

Re: Bei Properties Untermenüs erzeugen
 
Deine "Unterklasse" muss von TPersistent abgeleitet sein und Assign überschreiben. In Deiner Komponente erzeugst Du nun eine Instanz dieser Klasse und fügst sie als Proptery hinzu. Das sollte im Wesentlichen alles sein, aber ich habe das auch noch nie gemacht und beziehe mich nur auf die Aussagen aus dem verlinkten Thread. Zur Not versuche ich das aber gerne mal heute Abend zu Hause selbst noch einmal.

daschaos 21. Feb 2008 10:46

Re: Bei Properties Untermenüs erzeugen
 
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:

Delphi-Quellcode:
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 :gruebel:?

DeddyH 21. Feb 2008 10:48

Re: Bei Properties Untermenüs erzeugen
 
Kann ich leider nichts zu sagen, da bisher wie erwähnt noch nie gemacht :(

daschaos 21. Feb 2008 10:59

Re: Bei Properties Untermenüs erzeugen
 
Ok, dann trotzdem schonmal danke... vielleicht schaut ja sonst noch wer mal hier rein oder ich komm noch selbst auf die Lösung... wer weiß ;)

daschaos 21. Feb 2008 12:28

Re: Bei Properties Untermenüs erzeugen
 
Ähm ja. Doof. Peinlich. Und typisch ich :). Ein
Delphi-Quellcode:
FPhongShading := TPhongProperties.Create;
wäre durchaus hilfreich. Du hast es ja noch gesagt DeddyH mit Instanz erzeugen... Sorry :). Prima, ich nähere mich meinem Ziel. Wenn mir jetzt noch jemand erklärt was ich mit dem OnChange-Event meiner Unterklasse anfange, ist mein Tag gerettet :).

DeddyH 21. Feb 2008 12:47

Re: Bei Properties Untermenüs erzeugen
 
Wirf doch mal einen Blick in die Sourcen, wie die VCL das macht ;)

daschaos 21. Feb 2008 12:55

Re: Bei Properties Untermenüs erzeugen
 
Ja, ich hab auch mal wieder einfach so drauf los gefragt, manchmal hilft auch erst denken :).Juhu. Wunderbar, klappt alles, es aktualisiert sich alles, alles toll :party: . Dankeschööön nochmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz