Autor Beitrag
RainerT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 12.09.03 18:46 
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 14.09.03 15:52 
War die Frage so dämlich oder weiß das wirklich keiner? Oder geht das nicht?
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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!?

_________________
mfg.
mâximôv
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Mo 15.09.03 14:28 
versuch mal statt:
RainerT hat folgendes geschrieben:
ausblenden 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;

ausblenden 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
ausblenden 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