![]() |
Unterkategorien bei Komponenten
Guten Morgen.
Und zwar habe ich mir ein paar Tutorials zum Theme Komponenten erstellen runtergeladen, durchgelesen und größtenteils verstanden. Nun stellt sich für mich aber die Frage, wie ich "Unterkategorien", wie zum Beispiel bei Font der Fall ist, erstelle. Leider habe ich dafür kein Bild, aber ich denke die Sachlage sollte bekannt sein. Nun gut, ich habe es jedenfalls schon eine zweite Klasse erstellt und dort ebenso wie bei einer neuen Komponente Variablen eingetragen, sodass sie eigentlich im Objecktinspektor zu sehen sein sollten - aber das tun sie leider nicht und ich versteh nicht ganz wieso... Ich hoffe ihr versteht mein Problem und könnt mir weiterhelfen! Ich wäre euch da sehr verbunden!!! mfg shark |
Re: Unterkategorien bei Komponenten
eigenschaften für den objectinspector müssen im objekt als published deklariert sein
|
Re: Unterkategorien bei Komponenten
das ist ja verständlich, nur will die Eigentschaften halt das so haben:
Code:
Wie erstelle ich nun die Unterkategorie Test?!
- Name: String;
- Tag: Integer; + Test - s1: String; - s2: Char; - s3: Integer; - xyz: String; |
Re: Unterkategorien bei Komponenten
Geht das nicht automatisch, wenn du deklarierst:
Delphi-Quellcode:
Dazu noch zwei Dinge: Im SetTest musst du entweder statt Zuweisung mit := Assign benutzen, oder daran denken, die alte Instanz von FTest freizugeben, sonst hast du einen Haufen Speicherleichen.
class TAnything = class
private FInt1, FInt2: integer; FStr: string; published property Int1: integer read FInt1 write FInt1; property Int2: integer read FInt2 write FInt2; property Str: string read FStr write FStr; end; FMyControl = class(<anyancestor>) private FTest: TAnything; procedure SetTest(Value: TAnything); published property Test: TAnything read FTest write SetTest; end; Und UNBEDINGT im Konstruktor FTest erzeugen. Denn sonst hagelt es im Objektinspektor AccessViolations. Schreib mal ob es so funktioniert hat. :) |
Re: Unterkategorien bei Komponenten
Diese Unterkategorien funktionieren nur mit eingebetten Objekten. Font ist zum Beispiel ein TFont ;) Und immer schon an published denken.
|
Re: Unterkategorien bei Komponenten
Zitat:
|
Re: Unterkategorien bei Komponenten
Oh ja sorry. Dazu müsste natürlich deine "Unterkategorie"-Klasse von TPersistent abgeleitet sein. Wenn du das nicht willst, vergiss einfach alles was ich zu Assign gesagt habe, und denk nur dran, die alte Instanz freizugeben. :???:
|
Re: Unterkategorien bei Komponenten
Vielleicht so
Delphi-Quellcode:
TAnything = class(TPersistent)
private FInt1, FInt2: integer; FStr: string; public procedure Assign(Source: TPersistent); override; published property Int1: integer read FInt1 write FInt1; property Int2: integer read FInt2 write FInt2; property Str: string read FStr write FStr; end; procedure TAnything.Assign(Source: TPersistent); begin if Source is TAnything then begin TAnything(Source).Int1 := Int1; TAnything(Source).Int2 := Int2; TAnything(Source).Str := Str; Exit; end; inherited Assign(Source); end; |
Re: Unterkategorien bei Komponenten
Hey!
Mein Kollege hat grad ein Delphi 5 Kochbuch (oder wie das heißt) aufgetrieben und da stand die Lösnug meines Problems exakt drin:
Delphi-Quellcode:
Also so hat es bei mir funktioniert. Ich hoffe ich, dass ich keinen Schreibfehler drin hab, da ich auf diesem Rechner hier leider kein Delphi hab. Somit sind alle Angaben ohne Gewehr :mrgreen:
type
class TAnything = class private FInt1, FInt2: integer; FStr: string; published property Int1: integer read FInt1 write FInt1; property Int2: integer read FInt2 write FInt2; property Str: string read FStr write FStr; end; TMyControl = class(TComponent) private FTest: TAnything; public constructor Create(AOwner: TComponent); override; destructor Destroy; published property Test: TAnything read FTest write FTest; end; ... implementation ... constructor TMyControl.Create(AOwner: TComponent); override; begin inherited Create(AOwner); FTest := TAnything.Create; end; destructor TMyControl.Destroy; begin FTest.Free; inherited Destroy; end; |
Re: Unterkategorien bei Komponenten
Jetzt ist aber genau das passiert, wovor ich dich gewarnt habe :wink:
Wenn du jetzt zur Laufzeit die Zuweisung MyControl.Test := XYZ machst, wird die im Konstruktor erstellte Instanz von FTest nicht freigegeben. Der Speicher geht dir verloren! (Das sind die berühmten "Speicherlecks" von denen du vielleicht schon gelesen hast). Die beste Methode ist immer noch die o.a. mit Assign. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz