AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Insert einer Komponente in einem TWinControl erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Insert einer Komponente in einem TWinControl erkennen

Ein Thema von backdraft · begonnen am 2. Mai 2010 · letzter Beitrag vom 2. Mai 2010
Antwort Antwort
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#1

Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 17:55
Hallo zusammen,

ich würde gerne in meinem Panel erkennen, wenn sich ein Control darin ablegt. Also quasi wenn der Parent auf mein Panel gesetzt wird.
Ich hab ein Panel, worin ein Button liegt. Dieser soll immer oben liegen.

Ich finde leider keine Botschaft, die das melden könnte. Die Notification wird auch nur beim Erzeugen des Controls erzeigt.

Ich möchte gerne, dass nachdem ein Control in mein Panel gelegt wurde, FButton.BringToFront aufrufen.

Vielleicht gibts ja auch nen anderen Lösungsansatz.

Danke
Oliver
Oliver
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:06
Delphi-Quellcode:
TOperation = (
   opInsert,
   opRemove);

    procedure Notification(AComponent: TComponent;
      Operation: TOperation); virtual;
Schon mal hiermit probiert?
Lars
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:08
Jo, der wird nur beim Create des Controls ausgeführt, nicht, wenn ich den Parent setze...

Delphi-Quellcode:
   
with TMyControl.Create(Self) do
  begin
    Parent := MyPanel;
  end;
Ich such aber ne Möglichkeit den Parent := ... zu erkennen und zwar im MyPanel.
Oliver
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:20
Was du machen könntest ist, dir von dem jeweiligen Control eine ableitung schreiben und die SetParent funktion überschreiben. Und dort dann gucken ob der Parent dein Panel ist und wenn ja rufst du eine Funktion von dem Panel auf

//edit:
Delphi-Quellcode:
procedure TWinControl.InsertControl(AControl: TControl);
var
  Item: TControlListItem;
begin
  AControl.ValidateContainer(Self);
  Item.Control := AControl;
  Item.Parent := Self;
{$IF DEFINED(CLR)}
  ControlListChanging(True, Item);
  if Item.Parent <> Self then Exit;
  ControlListChange(True, AControl);
{$ELSE}
  Perform(CM_CONTROLLISTCHANGING, Integer(@Item), Integer(True));
  if Item.Parent <> Self then Exit;
  Perform(CM_CONTROLLISTCHANGE, Integer(AControl), Integer(True));
{$IFEND}
  Insert(AControl);
  if not (csReading in AControl.ComponentState) then
  begin
    AControl.Perform(CM_PARENTCOLORCHANGED, 0, 0);
    AControl.Perform(CM_PARENTFONTCHANGED, 0, 0);
    AControl.Perform(CM_PARENTSHOWHINTCHANGED, 0, 0);
    AControl.Perform(CM_PARENTBIDIMODECHANGED, 0, 0);
    AControl.Perform(CM_PARENTDOUBLEBUFFEREDCHANGED, 0, 0);
    AControl.Perform(CM_PARENTTABLETOPTIONSCHANGED, 0, 0);
    if AControl is TWinControl then
    begin
      AControl.Perform(CM_PARENTCTL3DCHANGED, 0, 0);
      UpdateControlState;
    end else
      if HandleAllocated then AControl.Invalidate;
    AlignControl(AControl);
  end;
{$IF DEFINED(CLR)}
  ControlChange(True, AControl);
{$ELSE}
  Perform(CM_CONTROLCHANGE, Integer(AControl), Integer(True));
{$IFEND}
end;
Oder die Message CM_CONTROLLISTCHANGE abfangen
Lars
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:24
Das war auch meine einzige Idee bis jetzt. Es geht aber um jedes Control, die kann ich ja nicht alle ableiten ...
Ich sage ja, vielleicht gibts ja auch nen anderen Ansatz ...
Oliver
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:29
Zitat von daywalker9:
Oder die Message CM_CONTROLLISTCHANGE abfangen
hmmm, also das wird ausgelöst.

Delphi-Quellcode:
procedure TMyPanel.CMControlListChange(var Message: TCMControlListChange);
begin
  if Assigned(FButton) then
    begin
      FButton.BringToFront;
    end;
end;
Bringt aber nix. Ggf wird es aufgerufen, bevor mein Objekt nach vorne gelegt wird.
Oder ist BringToFront falsch?
Oliver
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Insert einer Komponente in einem TWinControl erkennen

  Alt 2. Mai 2010, 18:35
Wenn ich CM_CONTROLCHANGE abfange, dann gehts...

Vielen Dank für die Hilfe ...
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:22 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