![]() |
Kompenente erweitern - eigene Property immer leer
Hi Leute,
stehe irgendwie auf dem Schlauch. Ich will eine Komponente erweitern, aber schaffe es nicht mal eine weiter Property hinzuzufügen und in der Laufzeit auszugeben. Habe den Code mal auf das Minium reduzierz, es muß irgendwas ganz dämliches meinerseits sein :| Danke für eure Hilfe!
Delphi-Quellcode:
unit DBRichEditExt;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, DBCtrls, Graphics, ExtCtrls, Dialogs, Forms, Windows; type TDBRichEditExt = class(TDBRichEdit) private { Private-Deklarationen } FCaption : String; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; published { Published-Deklarationen } property Caption: String read FCaption write FCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TDBRichEditExt]); end; constructor TDBRichEditExt.Create(AOwner: TComponent); begin inherited; showmessage(FCaption); // immer leer? end; end. |
AW: Kompenente erweitern - eigene Property immer leer
Zitat:
ich sehe nirgeds im Quelltext dass du der Variablen einen Wert zuweist. Gruss KHH |
AW: Kompenente erweitern - eigene Property immer leer
Wo soll der Inhalt im Contructor denn herkommen?
|
AW: Kompenente erweitern - eigene Property immer leer
Hi,
ich dachte das die setter / getter optional sind...zu anfangs hatte ich es so:
Delphi-Quellcode:
unit DBRichEditExt;
interface uses SysUtils, Classes, Controls, StdCtrls, ComCtrls, DBCtrls, Graphics, ExtCtrls, Dialogs, Forms, Windows; type TDBRichEditExt = class(TDBRichEdit) private { Private-Deklarationen } FCaption : String; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; procedure setCaption(value : string); function getCaption() : string; published { Published-Deklarationen } property Caption: String read getCaption write setCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TDBRichEditExt]); end; constructor TDBRichEditExt.Create(AOwner: TComponent); begin inherited; showmessage(FCaption); // immer leer? end; procedure TDBRichEditExt.setCaption(value : string); begin if value <> FCaption then FCaption := value; end; function TDBRichEditExt.getCaption() : string; begin result := FCaption; end; end. |
AW: Kompenente erweitern - eigene Property immer leer
Die Getter und Setter brauchst Du nur wenn dort zusätzlich etwas anders getan werden soll als FCaption zu lesen/schreiben, z.B. auf ein Canvas malen, etwas aktualiesiere etc.
Wenn Du unbedingt in Caption was sehen willst auch wenn Du im Code/Objektinspektor nichts einträgst dann schreib es im Contructor rein:
Delphi-Quellcode:
constructor TDBRichEditExt.Create(AOwner: TComponent);
begin inherited; Fcaption := 'Was auch immer Du sehen willst'; showmessage(FCaption); // immer leer? end; |
AW: Kompenente erweitern - eigene Property immer leer
Das Problem ist, dass der Konstruktor ausgeführt wird BEVOR die das Control die Werte aus der DFM zugewiesen bekommt. Von daher ist FCaption im Konstruktor natürlich noch leer
|
AW: Kompenente erweitern - eigene Property immer leer
Ah, Danke michael.
Wo wäre denn der Richtige Zeitpunkt diesen Wert zuzuweisen? |
AW: Kompenente erweitern - eigene Property immer leer
Das mit
Delphi-Quellcode:
Ist ja so in Ordnung. Wenn du in deinem (Test-)Programm mal im FormCreate oder später DBRicheditExt1.Caption ausgeben lässt, dann bekommst du auch den im OI eingestellten Wert zu sehen.
read FCaption write FCaption;
|
AW: Kompenente erweitern - eigene Property immer leer
Jo, das hatte ich auch schon erfolgreich getestet.
Allerdings verstehe ich dann nicht wie ich da machen soll: Ich will im momentan überhalb von einem richEdit ein Label anzeigen. Das klappst soweit auch. Nun möchte in der ObjektInspektor den Text vergeben der in diesem Label zur Laufzeit anzeigt werden soll. Wenn im OnCreate die FCaption aus der Designtime nicht zur verfügung steht - wann soll ich dann in meiner erweiterten Komponente dem Label den Text aus dem ObjektInspektor zuweisen? Ich finde da kein vernünftiges event. |
AW: Kompenente erweitern - eigene Property immer leer
Delphi-Quellcode:
Wobei ich in deiner Komponente bisher noch kein Label sehe...
TDBRichEditExt = class(TDBRichEdit)
private { Private-Deklarationen } FCaption : String; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; procedure setCaption(value : string); published { Published-Deklarationen } property Caption: String read FCaption write setCaption; end; implementation // FCaption wäre überflüssig, wenn es noch einen Getter gäbe, der // die Caption des Anzeige-Labels zurückgeben würde procedure TDBRichEditExt.setCaption(value : string); begin if value <> FCaption then begin FCaption := value; FAnzeigeLabel.Caption := FCaption; // := Value; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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