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 Objekteigenschaften gehen verloren (https://www.delphipraxis.net/182788-objekteigenschaften-gehen-verloren.html)

LuckySpacy 18. Nov 2014 13:23

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.

stahli 18. Nov 2014 13:29

AW: Objekteigenschaften gehen verloren
 
SetSubComponent sollte helfen...
(http://www.delphipraxis.net/79726-un...der-gruen.html)

LuckySpacy 18. Nov 2014 14:15

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.

himitsu 18. Nov 2014 14:17

AW: Objekteigenschaften gehen verloren
 
Zeichnete Delphi 7 die Property nicht auch schon bunt? (jenachdem ob/wie gespeichert wird)



Und besser auch so
Delphi-Quellcode:
property MyLabel: TLabel read FLabel write AssignLabel;

procedure TTestComponent.AssignLabel(Value: TLabel);
begin
  FLabel.Assign(Value);
end;
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)
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:
TLabel.Create(Self);
) gibt dein Panel das Label selbsttändig frei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.

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