Einzelnen Beitrag anzeigen

Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Eigene Komponente: Controlls werde nicht korrekt angezeigt

  Alt 23. Dez 2009, 11:38
Hallo!

Ich versuche mich gerade daran eine eigene Komponente zu erstellen. Diese soll einfach nur ein Zusammenbau existierender Komponenten sein:

Als Basis dient ein Panel. In diesem wird ein weitere Panel als Kopfzeile und eine ScrollBox für die Aufnahme weiterer Inhalte verwaltet. Die Inhalte werden aber nicht direkt in der ScrollBox verwaltet sonder in dieser liegt ein FlowPanel ds die Inhalte aufnimmt. Das FlowPanel wächst automatisch mit der Zahl der enthaltenen Komponenten, so das dann mit der ScrollBox gescrollt werden kann.

Delphi-Quellcode:
type
  TMyComponente = class(TCustomPanel)
  protected
    FHeaderPanel : TPanel;
    FScrollBox : TScrollBox;
    FFlowPanel : TFlowPanel;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation


constructor TMyComponente .Create(AOwner: TComponent);
begin
  inherited;

  Caption := '';
  ControlStyle := ControlStyle - [csSetCaption];

  Height := 250;
  Width := 250;

  BorderStyle := bsSingle;
  BevelInner := bvNone;
  BevelOuter := bvNone;

  Anchors := [akLeft,akTop,akRight,akBottom];

  FHeaderPanel := TPanel.Create(self);
  FHeaderPanel.Parent := self;
  FHeaderPanel.Height := 30;
  FHeaderPanel.Align := alTop;
  FHeaderPanel.ParentColor := false;
  FHeaderPanel.Color := clgreen;

  // Kontrollpunkt 1
  FScrollBox := TScrollBox.Create(self);
  FScrollBox.Parent := self;
  FScrollBox.Align := alClient;
  FScrollBox.ParentColor := false;
  FScrollBox.Color := clLime;
  FScrollBox.BorderStyle := bsNone;
  FScrollBox.BevelInner := bvNone;
  FScrollBox.BevelOuter := bvNone;

  FFlowPanel := TFlowPanel.Create(FScrollBox );
  FFlowPanel.Parent := FScrollBox ;
  FFlowPanel.Top := 0;
  FFlowPanel.Left := 0;
  FFlowPanel.AutoSize := true;
  FFlowPanel.Width := 100;
  FFlowPanel.Visible := true;
  FFlowPanel.ParentBackground := false;
  FFlowPanel.ParentColor := false;
  FFlowPanel.Color := clRed;
end;
Problem 1:
Wenn ich alles nach "Kontrollpunk 1" auskommentiere erhalte ich also nur ein Panel auf dem ein weiteres Panel (FHeaderPanel) platziert wird. Kompiliere ich die Komponente und setzte sie auf ein Form sieht auch alles Prima aus: Ein Panel mit einer grünen Kopfzeile am oberen Rand.

Starte ich das Programm aber ist die Kopfzeile nicht mehr grün sonder hat die Farbe des Hintergrund angenommen. Wieso? Setzte ich im Constructor einen Haltepunkte sehe ich, dass dort die Farbe korrekt auf Grün gesetzt wird. Wo wird diese wieder geändert?

Problem 2:
Belasse ich alles nach Kontrollpunk 1 im Kontrollpunkt, wird unter der Kopfzeile also noch die ScrollBox erzeugt, die den restlichen Platz im Hintergrundpanel einnimmt. In diese ScrollBox wird ein FlowPanel gesetzt.

Kompiliere ich wieder alles, sieht man im Formdesigner die Kopfzeile die ScrollBox (mit Farbe clLime) und FlowPanel (mit Farbe clRed). Start ich das Programm, hat das FHeaderPanel wieder die Hintergrundfarbe während die ScrollBox korrekt die Farbe behalten hat. Was mache ich beim FHeaderPanel anders als bei der ScrollBox? Das FlowPanel ist jetzt ganz verschwunden. Es wird also nicht nur die falsche Hintergrundfarbe verwende, auch von dem Rahmen ist nichts zu sehen.

Wieso ist das FlowPanel nicht zu sehen? Ich habe schon viel rumprobiert. Der Verdacht, dass das FlowPanel wegen AutoSize=true und fehlendem Inhalte vielleicht 0/0 groß wäre, hat sich nicht bestätigt. Lasse ich mir die Koordinaten und die Größe des FlowPanels ausgeben werde diese immer korrekt angezeigt. Nur das FlowPanel bleibt unsichtbar. Woran kann das liegen?


Ich weiß hier echt nicht weiter. Wenn jemand einen Tipp hat wäre ich dafür also sehr Dankbar!

Besten Dank!
Ares
  Mit Zitat antworten Zitat