Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Eigenschaft im Property-Editor ausblenden


RainerT - Fr 12.09.03 18:46
Titel: Eigenschaft im Property-Editor ausblenden
Ums vorweg zu nehmen:Ich bin relativ neu in das Thema Komponenten-Entwicklung eingestiegen...

Jetzt habe ich eine Komponente entwickelt, die letztendlich von TScrollBox abgelitten ist. Dadruch habe ich im Property-Editor immer die Eigenschaften "HorzScrollBar" und "VertScrollBar". Die müssen aber immer zwingend auf Visible=False stehen, sonst sieht meine Kompoente recht bescheiden aus. Daher wäre es am besten, wenn ich diese Eigenschaften gar nicht erst angezeigt bekäme.

Wie ich neue Eigenschaften in den Property-Editor reinkriege habe ich jetzt raus. Aber jetzt möchte ich gerne eine ausblenden. Wie mache ich das?


RainerT - So 14.09.03 15:52

War die Frage so dämlich oder weiß das wirklich keiner? Oder geht das nicht?


barfuesser - Mo 15.09.03 09:15

Hi,

Du mußt die Properties mit einer geringeren Sichtbarkeit (also als public, protected oder private) redeklarieren.

barfuesser


RainerT - Mo 15.09.03 09:36

Habe ich. Geht trotzdem nicht. Oder ich habe es nicht richtig gemacht. Wenn ich das mal kurz demonstrieren darf:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  TNewCompontent = class(TScrollBox)
  private
    FEigenschaft : Integer;
    procedure SetEigenschaft(const Value: integer);
    function GetEigenschaft: Integer;
  protected
    property HorzScrollBar;
  published
    { Published declarations }
    Constructor Create(AOwner : TComponent);override;
    Property Eigenschaft: Integer read GetEigenschaft write SetEigenschaft;
  end;

Damit habe ich meiner TNewComponet zwar eine neue Eigenschaft ("Eigenschaft") verpasst, die ich auch über den Property-Editor prima setzen kann.

Aber eigentlich hatte ich gehofft, dass die Eigenschaft "HorzScrollbar" dann auch aus dem Property-Editor verschwindet, weil ich Sie doch potected habe.

Tut aber nicht...

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


barfuesser - Mo 15.09.03 09:45

Hi,

also ich habe mir noch mal die Onlinehilfe dazu durchgelesen. Man kann durch überschreiben der property die Sichtbarkeit nicht herabsetzen. Eigentlich schade. Aber Du könntest mal versuchen, ob es durch verdecken der property möglich ist. Dazu mußt Du die Property unter Angabe des Types komplett neu deklarieren.

barfuesser


Klabautermann - Mo 15.09.03 10:37

Hallo,

aus Vererbungstechnischen gründen geht dies nicht. Denn eine Kind-Objekt muss immer alle Schnitstellen enthalben, die auch der vorfahr hat. Wenn du da einfach eine public/published Variable als private/protected redefinieren könntest dan würde der ganze komplex der Polimorphie nicht mehr sinvoll funktioniernen.

Du wirst also damit leben müssen.

Gruß
Klabautermann


maximus - Mo 15.09.03 13:56

für diesen zweck sind die 'custom' klassen vorgesehen, in denen die properties eine geringe sichtbarkeit haben und die man dann für die echte compo freischaltet.

glaub aber nicht, dass es für scrollbox ein TCostumScrollbox gibt!?


Klabautermann - Mo 15.09.03 14:27

Hallo,
maximus hat folgendes geschrieben:
glaub aber nicht, dass es für scrollbox ein TCostumScrollbox gibt!?

das ist das Problem. Zu vielen Komponenten, wie dieser gibt es keine Custom kasse :(.

Gruß
Klabautermann


barfuesser - Mo 15.09.03 14:28

versuch mal statt:
RainerT hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  TNewCompontent = class(TScrollBox)
  private
    FEigenschaft : Integer;
    procedure SetEigenschaft(const Value: integer);
    function GetEigenschaft: Integer;
  protected
    property HorzScrollBar;
  published
    { Published declarations }
    Constructor Create(AOwner : TComponent);override;
    Property Eigenschaft: Integer read GetEigenschaft write SetEigenschaft;
  end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  TNewCompontent = class(TScrollBox)
  private
    FEigenschaft : Integer;
    procedure SetEigenschaft(const Value: integer);
    function GetEigenschaft: Integer;
    function getHorzScrollBar: TControlScrollBar;
    procedure setHorzScrollBar(Value: TControlScrollBar);
  protected
    property HorzScrollBar: TControlScrollBar read getHorzScrollBar write setHorzScrollBar;
  published
    { Published declarations }
    Constructor Create(AOwner : TComponent);override;
    Property Eigenschaft: Integer read GetEigenschaft write SetEigenschaft;
  end;

mit

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function TNewComponent.getHorzScrollBar: TControlScrollBar;
begin
  Result := inherited HorzScrollBar;
end;

procedure TNewComponent.setHorzScrollBar(Value: TControlScrollBar);
begin
  if inherited HorzScrollBar <> Value then inherited HorzScrollBar := Value;
end;

also verdecken statt überschreiben.

nicht getestet!

barfuesser