Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
Delphi XE3 Professional
|
Re: Insert einer Komponente in einem TWinControl erkennen
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
|
|
Zitat
|