![]() |
Aktion bei Komponenten hinzufügen
Hi Leute,
ich möchte eine neue Komponente erstellen die von TCustomPanel abgeleitet ist. Dabei soll die Komponente reagieren wenn in das Panel eine Komponente hinzugefügt wurde. Ich möchte die Komponente verschieben. Ich habe es schon mit der procedure Notification versucht, diese wird aber erst aufgerufen bevor die Komponente gesetzt oder gezeichnet wird. Wie kann ich die Position beeinflussen, wenn die Komponente hinzugefügt wird? Danke. |
Re: Aktion bei Komponenten hinzufügen
Hallo,
um auf das Einfügen einer Komponente reagieren zu können kannst du die Methode InsertControl() überschreiben. Du könntest deiner Komponente ein eigenes Event OnInsert() spendieren, welches du zuerst triggerst um deine Positionsangaben einbringen zu können. Grüße vom marabu |
Re: Aktion bei Komponenten hinzufügen
Also ich habe das InsertControl() mal getestet, aber leider läst sich eine nichtvirtuelle Methode nicht überschreiben. Das mit dem Ereignis ist ja nicht schlecht, aber wo soll ich das auslösen wenn ich nicht die Methode reinkomme.
Nur noch so nebenbei ich versuche ein FlowPanel zu basteln um Elemete die hinzugefügt werden automatisch anzuordnen. Ich weiss das es sowas bei Delphi 2006 gibt, aber z Z. habe ich nur das 2005 PE.
Delphi-Quellcode:
public
{ Public-Deklarationen } constructor Create(AOwner:TComponent); override; destructor Destroy(); override; procedure InsertControl(AControl: TControl); override; procedure TNGFlowPanel.InsertControl(AControl: TControl); begin inherited; AdjustComponents(); end; |
Re: Aktion bei Komponenten hinzufügen
Hallo Danilo,
darauf habe ich nicht geachtet, dass InsertControl() eine statische Methode ist. Nun musst du eine eigene Methode implementieren, mit der du Controls hinzufügst und die du wohl auch aufrufen musst, wenn du Controls per Drag & Drop einfügst - falls die Layout Kontrolle auch im Formular-Editor funktionieren soll. marabu |
Re: Aktion bei Komponenten hinzufügen
Hallo Danilo,
in der VCL werden zahlreiche Nachrichten verschickt, die leider nicht alle von Borland dokumentiert wurden. In der Hoffnung, daß uns CM_CONTROLCHANGE auch weiterhin erhalten bleibt (und hoffentlich fehlerfrei):
Delphi-Quellcode:
Gruß Hawkeye
type
TInsertControlEvent = procedure (Sender: TObject; Control: TControl) of object; TRemoveControlEvent = procedure (Sender: TObject; Control: TControl) of object; TExtPanel = class (TPanel) private FOnInsertControl : TInsertControlEvent; FOnRemoveControl : TRemoveControlEvent; procedure CMControlChange (var msg: TCMControlChange); message CM_CONTROLCHANGE; published property OnInsertControl: TInsertControlEvent read FOnInsertControl write FOnInsertControl; property OnRemoveControl: TRemoveControlEvent read FOnRemoveControl write FOnRemoveControl; end; procedure TExtPanel.CMControlChange (var msg: TCMControlChange); begin inherited; if msg.Inserting and Assigned(FOnInsertControl) then FOnInsertControl (Self, msg.Control) else if (not msg.Inserting) and Assigned(FOnRemoveControl) then FOnRemoveControl (Self, msg.Control); end; |
Re: Aktion bei Komponenten hinzufügen
Coole Sache das, es funktioniert damit!!!
Ich habe es heute erst testen können, aber so habe ich mir das vorgestellt. Nur mal so ne Frage, wenn es nicht dokumentiert ist, woher hast du dann die Info. Es ist ziemlich ärgerlich wenn man was programmieren möchte und man nur so ne ungefähre Ahnung hat wie es funktionieren kann. Aber danke für den Tipp, jetzt funktioniert mein FlowPanel so wie ich es mir vorgestellt habe. |
Re: Aktion bei Komponenten hinzufügen
Zitat:
Zitat:
![]() Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz