Hallo,
Dein Parent wird Dir
nie eine WM_PAINT-Botschaft schicken, es kennt Deine Komponente ja nicht und außerdem ist diese nicht visuell. Du musst also beim Zuweisen Deines Parent dessen WindowProc ersetzen (Alte merken, durch neue ersetzen und in dieser die gemerkte am Ende aufrufen<-wichtig!). Beim Zerstören/neu zuweisen von Parent musst Du denn auch die WindowProc zurücksetzen. In Deiner WindowProc kannst Du dann die Message abfangen.
Das Ganze sieht dann so aus:
Delphi-Quellcode:
private
FParent: TControl;
OldWindowProc: TWndMethod;
procedure SetParent(Control: TControl);
procedure MyWindowProc(var Message: TMessage);
public
destructor Destroy; override;
published
property Parent: TControl read FParent write SetParent;
end;
destructor TMyClass.Destroy;
begin
// aufräumen
...
// Evtl. alte WindowProc wiederherstellen
if FParent <> nil then
FParent.WindowProc := OdWindowProc;
inherited;
end;
procedure TMyProc.SetParent(Control: TControl);
begin
// Alte WindowProc wiederherstellen
if FParent <> nil then
FParent.WindowProc := OldWindowProc;
FParent := Control;
// Neue WindowProc hooken
if Control <> nil then
begin
OldWindowProc := FParent.WindowProc;
FParent.WindowProc := MyWindowProc;
end;
end;
procedure TMyClass.MyWindowProc(var Message: TMessage);
begin
// Alte WindowProc aufrufen
OldWindowProc(Message);
if Message.Msg = WM_PAINT then
begin
// Hier auf WM_PAINT reagieren
end;
end;
Gruß
xaromz