Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Properties bei Ableitung verschieben (https://www.delphipraxis.net/199964-properties-bei-ableitung-verschieben.html)

Getox 6. Mär 2019 13:04

Properties bei Ableitung verschieben
 
Moin,

kann ich beim Ableiten einer Komponente (zum Beispiel TEdit) in der Ableitung Sachen vom Published in den Public Bereich verschieben, ohne die Ursprungskomponente anzufassen? Und falls es geht, wie?

Ich möchte ein eigenes Edit implementieren, das nicht nur neue Funktionen beherrscht, sondern auch für meine Zwecke aufgeräumter ist. Dafür möchte ich gerne alles aus dem Objektinspektor verbannen, was ich ohnehin nie benutze. Zur Not kann man es ja immer noch per Code ändern oder wieder aufnehmen.

Liebe Grüße

TiGü 6. Mär 2019 13:51

AW: Properties bei Ableitung verschieben
 
Oder du leitest von TCustomEdit aus Vcl.StdCtrls ab und published nur das, was du möchtest.

DeddyH 6. Mär 2019 17:14

AW: Properties bei Ableitung verschieben
 
Exakt, genau so handhabt die VCL das intern auch.

FaTaLGuiLLoTiNe 6. Mär 2019 17:15

AW: Properties bei Ableitung verschieben
 
Man kann bei Vererbung die Sichtbarkeit von Eigenschaften nur erweitern, nicht beschränken.

DeddyH 6. Mär 2019 17:53

AW: Properties bei Ableitung verschieben
 
Deshalb ja der Trick, in den TCustomXXX-Klassen sind die meisten Properties protected deklariert, die Ableitungen implementieren oft gar keine oder nur wenige weitere Funktionalitäten, erhöhen aber die Sichtbarkeit der für sinnvoll erachteten Properties.

TurboMagic 6. Mär 2019 22:26

AW: Properties bei Ableitung verschieben
 
Zitat:

Zitat von FaTaLGuiLLoTiNe (Beitrag 1427114)
Man kann bei Vererbung die Sichtbarkeit von Eigenschaften nur erweitern, nicht beschränken.

Jein...
Ich habe auch schon mal methoden in kindklassen überschrieben die dann weniger sichtbar waren.
Nur: der Compiler warnt immer davor und da es sowieso ausversehen war hab' ich das dann auch gleich geändert.

Zumindest bei Methoden geht es also.

DeddyH 7. Mär 2019 06:16

AW: Properties bei Ableitung verschieben
 
Dann dürfte das hier aber nicht funktionieren:
Delphi-Quellcode:
type
  TParent = class
  public
    procedure TuWas; virtual;
  end;

  TChild = class(TParent)
  strict private
    procedure TuWas; override;
  end;

{ TParent }

procedure TParent.TuWas;
begin
  ShowMessage('Parent');
end;

{ TChild }

procedure TChild.TuWas;
begin
  ShowMessage('Child');
end;

procedure TFormTest.ButtonTestClick(Sender: TObject);
var
  test: TChild;
begin
  test := TChild.Create;
  try
    test.TuWas;
  finally
    test.Free;
  end;
end;

Andreas L. 7. Mär 2019 09:01

AW: Properties bei Ableitung verschieben
 
Bei manchen Eigenschaften kannst du die Sichtbarkeit verringern.

Delphi-Quellcode:
type
  TMyControl = class(TCustomPanel)
  protected
    // Ist nicht mehr im Object-Inspector zu sehen:
    property ParentFont;
    // Ist weiterhin im Object-Inspector zu sehen:
    property Left;
  end;

Schokohase 7. Mär 2019 09:09

AW: Properties bei Ableitung verschieben
 
Zitat:

Zitat von Andreas L. (Beitrag 1427167)
Bei manchen Eigenschaften kannst du die Sichtbarkeit verringern.

Delphi-Quellcode:
type
  TMyControl = class(TCustomPanel)
  protected
    // Ist nicht mehr im Object-Inspector zu sehen:
    property ParentFont;
    // Ist weiterhin im Object-Inspector zu sehen:
    property Left;
  end;

Nun ja
-
Delphi-Quellcode:
TCustomPanel.ParentFont
ist
Delphi-Quellcode:
protected
(deklariert in
Delphi-Quellcode:
TControl.ParentFont
)
-
Delphi-Quellcode:
TCustomPanel.Left
ist
Delphi-Quellcode:
published
(deklariert in
Delphi-Quellcode:
TControl.Left
)
Das wundert mich also nicht und damit stimmt die Aussage weiterhin, dass man die Sichtbarkeit nicht verringern kann.

Andreas L. 7. Mär 2019 15:24

AW: Properties bei Ableitung verschieben
 
Zitat:

Zitat von Schokohase (Beitrag 1427169)
Zitat:

Zitat von Andreas L. (Beitrag 1427167)
Bei manchen Eigenschaften kannst du die Sichtbarkeit verringern.

Delphi-Quellcode:
type
  TMyControl = class(TCustomPanel)
  protected
    // Ist nicht mehr im Object-Inspector zu sehen:
    property ParentFont;
    // Ist weiterhin im Object-Inspector zu sehen:
    property Left;
  end;

Nun ja
-
Delphi-Quellcode:
TCustomPanel.ParentFont
ist
Delphi-Quellcode:
protected
(deklariert in
Delphi-Quellcode:
TControl.ParentFont
)
-
Delphi-Quellcode:
TCustomPanel.Left
ist
Delphi-Quellcode:
published
(deklariert in
Delphi-Quellcode:
TControl.Left
)
Das wundert mich also nicht und damit stimmt die Aussage weiterhin, dass man die Sichtbarkeit nicht verringern kann.

Im Code habe ich aus versehen TCustomPanel statt TPanel geschrieben. In TPanel ist ParentFont published. Mit folgendem Code wird sie protected:

Delphi-Quellcode:
type
  TMyControl = class(TPanel)
  protected
    // Ist nicht mehr im Object-Inspector zu sehen:
    property ParentFont;
    // Ist weiterhin im Object-Inspector zu sehen:
    property Left;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Seite 1 von 2  1 2      

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