EugenE hat geschrieben:Jetzt weiß ich aber nich wie ich weiter machen soll ich entweder für jede SubKomponente die Events an das Main-Control weiterleiten so dass man jedes Event von jedem COntrol einzelln nehmen kann ODER alle Events von den Subcontrols in ein Globalen Event einbringen?
Du meinst, ob du ein OnButtonPaint( Index: Integer ) für alle Buttons verwenden sollst, oder ob jeder Button (bspw. über die Page (TCustomPage?)) ein entsprechendes Event bekommt? Evtl. wäre da dann beides zusammen eine gute Lösung; man könnte dann - je nach dem, was man braucht - auf das Zeichenen eines jeden Buttons reagieren, oder auf das Zeichnen eines einzelnen Buttons (ohne if-Abfrage

). Wobei Styles irgendwie direkten Zugang zu den Paint-Mechanismen haben sollten (in der default Paint-Methode aufrufen oder so).
Wenn du aber meinst, ob ein Event bei allen Events der Subcontrols ausgelöst werden soll (OnEvent?), weiß ich nicht, wie man das realisieren könnte bzw. inwiefern dies überhaupt sinn hat.
Noch was zum Löschen:
Wenn der Destruktor einer Seite aufgerufen wird, muss das übergeordnete Tab-/Pagecontrol dies irgendwie mitbekommen (der Tab muss entfernt werden). Bei den LCL-Komponenten, weiß ich nur, dass die Parent-Eigenschaft nicht gesetzt ist, und deshalb das "Parent" darüber nicht ermittelt und benachrichtigt werden kann. Du könntest das ja darüber machen (d.h. durch setzten von Parent wir das PageControl gewechselt). Wenn du aber von TCustomPage ableitest, wäre die prinzipielle Austauschbarkeit der Seiten zwischen den verschiedenen Tab-/PageControls nicht mehr gewährleistet (keine Ahnung ob das derzeit überhaupt funktioniert).
Noch was zu den Styles:
Code: Alles auswählen
unit styles;
interface
uses Graphics;
type
TStyleClass = Class of TCustomStyle;
TCustomStyle = class(TObject)
{...}
public
class function StyleClass: TStyleClass; virtual; abstract
procedure PaintTab(ACanvas: TCanvas; ARect: TRect); virtual; abstract;
{ eventuell hier schon ein paar eigenschaften, die für alle Styles gleich sind }
property Color: TColor {...};
property BackgroundColor: TColor {...};
property Font: TFont {...}
{ vielleicht sollte ein Style die Erscheinungsweise der Tabs (mit PaintTab) und der Seiten beeinflussen können }
end;
TAStyle = class(TCustomStyle)
class function StyleClass: TStyleClass; override;
procedure PaintTab(ACanvas: TCanvas; ARect: TRect); override;
end;
implementation
class function TAStyle.StyleClass: TStyleClass; override;
begin
Result := TAStyle
end;
procedure TAStyle.PaintTab(ACanvas: TCanvas; ARect: TRect); override;
begin
ACanvas.Rectangle(TRect);
{ oder so }
end;
end.
Mfg Socke
P.S.
Bei einem Mittelklick-Schließen tritt das Problem auf, dass die Seite (der Buttton etc) sich in einer eigenen Ereignisbehandlerroutine freigeben muss. Das funktioniert nicht. Eine Lösung wäre TWasWeißIch.Release (so soll man Formulare sich selbst frei geben lassen). Alternative müsstest du an dein Control eine Message senden (so funktioniert das mehr oder weniger), sodass ein anderes Objekt die Freigabe übernimmt.