AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Aktion bei Komponenten hinzufügen

Ein Thema von Computergenius · begonnen am 20. Jun 2006 · letzter Beitrag vom 29. Jun 2006
Antwort Antwort
Computergenius

Registriert seit: 15. Sep 2003
7 Beiträge
 
Delphi 2005 Personal
 
#1

Aktion bei Komponenten hinzufügen

  Alt 20. Jun 2006, 17:15
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.
Danilo
----------------------------------------------------
Mess with the best, die like the rest.

----------------------------------------------------
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Aktion bei Komponenten hinzufügen

  Alt 20. Jun 2006, 17:27
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
  Mit Zitat antworten Zitat
Computergenius

Registriert seit: 15. Sep 2003
7 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Aktion bei Komponenten hinzufügen

  Alt 21. Jun 2006, 12:29
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;
Danilo
----------------------------------------------------
Mess with the best, die like the rest.

----------------------------------------------------
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Aktion bei Komponenten hinzufügen

  Alt 21. Jun 2006, 17:37
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Aktion bei Komponenten hinzufügen

  Alt 21. Jun 2006, 18:52
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
  Mit Zitat antworten Zitat
Computergenius

Registriert seit: 15. Sep 2003
7 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Aktion bei Komponenten hinzufügen

  Alt 29. Jun 2006, 15:34
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.
Danilo
----------------------------------------------------
Mess with the best, die like the rest.

----------------------------------------------------
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Aktion bei Komponenten hinzufügen

  Alt 29. Jun 2006, 16:28
Zitat von Computergenius:
Coole Sache das, es funktioniert damit!!!
Vielen Dank für die Rückmeldung.

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