AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Propertie einer Subkomponente ist nicht sichtbar
Thema durchsuchen
Ansicht
Themen-Optionen

Propertie einer Subkomponente ist nicht sichtbar

Ein Thema von sechsertraeger · begonnen am 5. Mai 2010 · letzter Beitrag vom 6. Mai 2010
Antwort Antwort
sechsertraeger

Registriert seit: 5. Mai 2010
Ort: Rheinbach
3 Beiträge
 
#1

Propertie einer Subkomponente ist nicht sichtbar

  Alt 5. Mai 2010, 22:48
[dp]Hallo zusammen, bin Delphi Neuling und auch neu in diesem Forum.

Ich habe da mal ein Problem.

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 &lt; 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 &lt;> 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 &lt;&gt; self.Name then
  begin
    if IsValidIdent(NewName)=True then
    begin
      self.SetName(NewName);
      Update;
    end;
  end;

end;

end.
Angehängte Dateien
Dateityp: pas panel1_226.pas (3,0 KB, 0x aufgerufen)
Brauche Hilfe zur Selbsthilfe
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#2

Re: Propertie einer Subkomponente ist nicht sichtbar

  Alt 5. Mai 2010, 22:53
FMyTopLabel: TLabel<=== TMyTopLabel
  Mit Zitat antworten Zitat
sechsertraeger

Registriert seit: 5. Mai 2010
Ort: Rheinbach
3 Beiträge
 
#3

Re: Propertie einer Subkomponente ist nicht sichtbar

  Alt 5. Mai 2010, 22:54
???
Brauche Hilfe zur Selbsthilfe
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#4

Re: Propertie einer Subkomponente ist nicht sichtbar

  Alt 5. Mai 2010, 22:58
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Propertie einer Subkomponente ist nicht sichtbar

  Alt 6. Mai 2010, 07:46
Hallo,


Delphi-Quellcode:
dgTPanel = class(TPanel)
    private
      FMyTopLabel: TLabel; // TLabel

Delphi-Quellcode:
constructor dgTPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FMyTopLabel := FTopLabel.Create(self); // FTopLabel
Also erst mal, warum heisst das nicht FTopLabel ?
In Delphi haben Type-Definitionen immer ein T.


Lösung bei dir.


Delphi-Quellcode:
dgTPanel = class(TPanel)
    private
      FMyTopLabel: TTopLabel;
Und da TTopLabel zu diesem Zeitpunkt noch nicht definiert ist

1. forward
2. type TTopLabel XXX vor dgTPanel definieren


Heiko
Heiko
  Mit Zitat antworten Zitat
sechsertraeger

Registriert seit: 5. Mai 2010
Ort: Rheinbach
3 Beiträge
 
#6

Re: Propertie einer Subkomponente ist nicht sichtbar

  Alt 6. Mai 2010, 08:40

Super, danke. Hätte ich auch selbst drauf kommen können. Vieleicht!

Manchmal hat man ja wirklich ein BRETT vor dem Kopf.
Brauche Hilfe zur Selbsthilfe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz