Einzelnen Beitrag anzeigen

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, 19: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