![]() |
Objekteigenschaften gehen verloren
Folgendes Problem:
Ich versuche eine neue Komponente basierend auf TPanel zu erstellen. Diese Komponente soll unter anderem ein TLabel haben. Die Eigenschaften dieses Labels möchte ich im Objektinspektor verändern können. Das funktioniert auch. Nur wenn ich dann mein Programm starte, gehen die eingestellten Eigenschaften verloren. Also ich trage in Caption "Hallo hier bin ich" ein. "Hallo hier bin ich" ist auch sofort auf dem Panel zu sehen. Nach dem Programmstart steht da nix mehr. Was mache ich falsch?
Code:
interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls; type TTestComponent = class(TPanel) private FLabel: TLabel; protected public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property MyLabel: TLabel read FLabel write FLabel; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TTestComponent]); end; { TTestComponent } constructor TTestComponent.Create(AOwner: TComponent); begin inherited; FLabel := TLabel.Create(Self); FLabel.Parent := Self; FLabel.Align := alClient; end; destructor TTestComponent.Destroy; begin FreeAndNil(FLabel); inherited; end; end. |
AW: Objekteigenschaften gehen verloren
|
AW: Objekteigenschaften gehen verloren
Wie schon so oft.
Manchmal ist man dem Problem, nach stundenlanger Suche, nur einer Programmierzeile entfernt. Vielen lieben Dank, dafür. Das passt. |
AW: Objekteigenschaften gehen verloren
Zeichnete Delphi 7 die Property nicht auch schon bunt? (jenachdem ob/wie gespeichert wird)
Und besser auch so
Delphi-Quellcode:
Das Label vewaltest du ja ausschließlich innerhalb der Komponente, also sollte man extern den Zeiger besser nicht beschreiben und eine andere Instanz zuweisen dürfen. (nur dessen Property)
property MyLabel: TLabel read FLabel write AssignLabel;
procedure TTestComponent.AssignLabel(Value: TLabel); begin FLabel.Assign(Value); end; Ein NIL zugewiesen und deine Komponente reagiert bestimmt ganz nett. :stupid: Das Free ist auch nicht unbedingt nötig (bereitet aber keine Probleme), denn durch den Owner (das Self in
Delphi-Quellcode:
) gibt dein Panel das Label selbsttändig frei.
TLabel.Create(Self);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 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