![]() |
Propertie einer Subkomponente ist nicht sichtbar
Liste der Anhänge anzeigen (Anzahl: 1)
[dp]Hallo zusammen, bin Delphi Neuling und auch neu in diesem Forum.
Ich habe da mal ein Problem. :wall: Ich erstelle eine Komponente TPanel. geht! Ich erstelle im Creator von TPanel eine weitere Komponente TLabel. geht! TLabel soll eine Eigenschaft "MyBorder: Boolean" bekommen. Rahmen zeichnen oder nicht. geht! Im OI kann ich die Subkomponente und alle geerbten Properties als grüne Liste sehen. geht! Mein Propertie "MyBorder" sehe ich auch. geht! Änderungen im OI werden auch brav umgesetzt. geht! So, nun kommt ein Problem! Wenn ich im Code-Bereich der Form z.B. begin self.TMyPanel.TMyLabel und dann den Punkt schreibe erscheinen wie gewohnt alle eigenschaften etc. aber nur mein Property MyBorder taucht nicht auf :( Wie gesagt im OI geht alles. Zur laufzeit auch alles OK. Nur kann ich nicht im Programm auf die Propertie "MyBorder" zugreifen. Ich habe garkeine Ahnung. Sorry!
Code:
unit Panel1;
interface uses SysUtils, Classes, StdCtrls, Controls, ExtCtrls, Graphics, Dialogs, Messages; type dgTPanel = class(TPanel) private FMyTopLabel: TLabel; FMyTest: Boolean; protected constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; public published property MyTopLabel: TLabel read FMyTopLabel write FMyTopLabel; property MyTest: Boolean read FMyTest write FMyTest; end; // Neue Unterklasse FTopLabel1 FTopLabel = class(TLabel) private FMyBorder: Boolean; protected constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; procedure DefineProperties(); procedure SetMyName(NewName: TComponentName); function GetMyBorder: Boolean; procedure SetMyBorder(Value: Boolean); public published property MyBorder: Boolean read GetMyBorder write SetMyBorder; end; // Ende neue Unterklasse FTopLabel // Komponente registrieren // procedure Register; implementation procedure Register; begin RegisterComponents('Detlef', [dgTPanel]); end; // ----------------------- // constructor dgTPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FMyTopLabel := FTopLabel.Create(self); FMyTopLabel.SetSubComponent(True); FMyTopLabel.Parent := self; Height:= 150; Width := 150; Caption := ''; ShowCaption := False; Refresh; end; destructor dgTPanel.Destroy; begin inherited; end; procedure dgTPanel.Paint; begin inherited; if Width < 100 then Width := 100; if Height < 100 then Height := 100; ShowCaption := False; end; { FTopLabel } constructor FTopLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); SetMyName('TopLabel'); self.Caption := self.Name; end; destructor FTopLabel.Destroy; begin inherited; end; function FTopLabel.GetMyBorder: Boolean; begin Result := FMyBorder; end; procedure FTopLabel.SetMyBorder(Value: Boolean); begin if FMyBorder <> Value then begin FMyBorder := Value; Repaint; end; end; procedure FTopLabel.DefineProperties; begin AutoSize := False; Left := 3; Top := 3; Width := self.Parent.Width - 6; Transparent := False; Alignment := taCenter; Layout := tlCenter; Font.Height := 5 - Height; end; procedure FTopLabel.Paint; begin inherited; DefineProperties; if self.MyBorder = True then begin Canvas.Pen.Color := clBlack; end else begin Canvas.Pen.Color := self.Color; end; Canvas.Rectangle(Left - 3, Top - 3, Width, Height); end; procedure FTopLabel.SetMyName(NewName: TComponentName); begin if NewName <> self.Name then begin if IsValidIdent(NewName)=True then begin self.SetName(NewName); Update; end; end; end; end. |
Re: Propertie einer Subkomponente ist nicht sichtbar
FMyTopLabel: TLabel<=== TMyTopLabel
|
Re: Propertie einer Subkomponente ist nicht sichtbar
:wiejetzt: ???
|
Re: Propertie einer Subkomponente ist nicht sichtbar
Dein Feld ist vom Typ TLabel, und auch die Published-Property ist vom Typ TLabel. Somit stehen auch nur die Properties von TLabel zur Verfügung, um an MyBorder zu kommen müsstest du casten.
Kontrolliere also die Deklaration deines TPanel. |
Re: Propertie einer Subkomponente ist nicht sichtbar
Hallo,
Delphi-Quellcode:
dgTPanel = class(TPanel)
private FMyTopLabel: TLabel; // TLabel
Delphi-Quellcode:
Also erst mal, warum heisst das nicht FTopLabel ?
constructor dgTPanel.Create(AOwner: TComponent);
begin inherited Create(AOwner); FMyTopLabel := FTopLabel.Create(self); // FTopLabel In Delphi haben Type-Definitionen immer ein T. Lösung bei dir.
Delphi-Quellcode:
Und da TTopLabel zu diesem Zeitpunkt noch nicht definiert ist
dgTPanel = class(TPanel)
private FMyTopLabel: TTopLabel; 1. forward 2. type TTopLabel XXX vor dgTPanel definieren Heiko |
Re: Propertie einer Subkomponente ist nicht sichtbar
:cheers:
Super, danke. Hätte ich auch selbst drauf kommen können. Vieleicht! Manchmal hat man ja wirklich ein BRETT vor dem Kopf. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 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