![]() |
Eigene Komponente: Eingenschaft kann nicht gesetzt werden???
Hallo!
Ich beschäftige mich gerade mit den Grundlagen der Entwicklung eigener Komponenten und versuche eine Komponente zu erstellen, die auf einer anderen visuellen Komponente basiert, z.B. auf TPanel. Ich füge der Kemponente einige neue Eigenschaften hinzu, die bereits zu Desingtime gesetzt werden können. Wenn ich dann die Komponente installiert habe, ein neues Projekt gestartet habe, die neue Komponente auf die Form setze und die neue Eingenschaften setzen möchte, werden diese nicht gesetzt. Beispielcode:
Delphi-Quellcode:
Was mache ich falsch?
type
TMyPanel = class(TPanel) private FTitle: string; FShowTitle: Boolean; procedure SetTitle(const ATitle: string); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Title: string read FTitle write SetTitle; property ShowTitle: Boolean read FShowTitle write FShowTitle end; |
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Schau dir einmal die Eigenschaften stored und default an, um genau zu sein sagt stored, dass der Wert explizit in jedem Fall gespeichert werden soll oder eben nicht und default gibt einen Standardwert an. Diesen Standardwert setzt du ja im Konstruktor und wenn der default Wert der aktuelle Wert ist, wird dieser nicht in der .dfm Datei gespeichert.
|
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Deine neuen Eigenschaften, die das Aussehen steuern sollten alle eine Settermethode haben. Nachdem du die eigenschaft geändert hast, rufe ein Repaint, Refresch oder Paint auf, damit diese Änderung auch gezeichnet wird.
Delphi-Quellcode:
In deiner vererbten Paint-Methode wird dann natürlich dein Titel gezeichnet.
type
TMyPanel = class(TPanel) private FTitle: string; FShowTitle: Boolean; procedure SetTitle(const ATitle: string); procedure SetShowTitel(const Value : Boolean); protected procedure Paint; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Title: string read FTitle write SetTitle; property ShowTitle: Boolean read FShowTitle write SetShowTitle end; .... procedure TMyPanel.SetShowTitel(const Value : Boolean); begin if FShowTitel = Value then Exit; FShowTitel := Value; Paint; end;
Delphi-Quellcode:
Üblicherweise lagere ich solche Sachen aber in eigene Methoden wie DrawTitel aus und rufe der Übersicht halber diese nur in Paint auf.
procedure TMyPanel.Paint;
begin inherited; if FShowTitel then begin // ... hier zeichne ich den Titel end; // ... und so weiter end; Gruß oki |
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Zitat:
|
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Zitat:
Gruß oki |
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Danke Euch! Jetzt verstehe ich es und es klappt!
|
Re: Eigene Komponente: Eingenschaft kann nicht gesetzt werde
Das freut uns!
Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 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