Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Aktion bei Komponenten hinzufügen (https://www.delphipraxis.net/71753-aktion-bei-komponenten-hinzufuegen.html)

Computergenius 20. Jun 2006 17:15


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.

marabu 20. Jun 2006 17:27

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

Computergenius 21. Jun 2006 12:29

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;

marabu 21. Jun 2006 17:37

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

Hawkeye219 21. Jun 2006 18:52

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:
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;
Gruß Hawkeye

Computergenius 29. Jun 2006 15:34

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.

Hawkeye219 29. Jun 2006 16:28

Re: Aktion bei Komponenten hinzufügen
 
Zitat:

Zitat von Computergenius
Coole Sache das, es funktioniert damit!!!

Vielen Dank für die Rückmeldung.

Zitat:

Zitat von Computergenius
Nur mal so ne Frage, wenn es nicht dokumentiert ist, woher hast du dann die Info

Die Professional-Version von Delphi enthält die Quelltexte der VCL. Für Anwender der Personal-Version ist diese Seite vielleicht ganz nützlich. Sie liefert unter anderem Suchbegriffe für Google oder andere Suchmaschinen.

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