AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Komponente: Controlls werde nicht korrekt angezeigt

Eigene Komponente: Controlls werde nicht korrekt angezeigt

Ein Thema von Ares · begonnen am 23. Dez 2009 · letzter Beitrag vom 23. Dez 2009
Antwort Antwort
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
fatalerror
(Gast)

n/a Beiträge
 
#2

Re: Eigene Komponente: Controlls werde nicht korrekt angezei

  Alt 23. Dez 2009, 17:59
Wenn Theming aktiviert ist, wird die von dir angegebene Farbe des Panels ignoriert.
  Mit Zitat antworten Zitat
Ares

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

Re: Eigene Komponente: Controlls werde nicht korrekt angezei

  Alt 23. Dez 2009, 18:33
Ok, wie genau stelle ich denn fest ob Theming aktiviert ist? Und kann ich das für ein einzelnes Panel deaktivieren?
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#4

Re: Eigene Komponente: Controlls werde nicht korrekt angezei

  Alt 23. Dez 2009, 20:22
Zitat von Ares:
Ok, wie genau stelle ich denn fest ob Theming aktiviert ist? Und kann ich das für ein einzelnes Panel deaktivieren?
siehe zb hier
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf