okay, falls jemand mal mit windoesbotschaften und derren verarbeitung probleme hat, hab es gelöst. bin mir zwar immer noch nicht so ganz im klaren wie die botschaftsverarbeitung aussieht, aber so hab ich das ganze jetzt gehandelt.
Delphi-Quellcode:
procedure TControlWrapper.ControlWndProc(var Msg: TMessage);
var PlugIn: IPlugIn;
addr : LongInt;
lMsg : TMessage;
begin
ControlLocked := true; // ordnet FControl wieder die original windowproc zu
FControl.WindowProc(msg); // verarbeitung der message ohne weiteres einhängen der pluginbotschaftsverarbeitung
ControlLocked := false; // hängt sich wieder in die windowproc von FCOntrol ein
if (AllocatedPlugIn > 0) then // botschaft wird an das plugin gesendet um dort darauf zu reagieren
begin
addr := SendMessage(AllocatedPlugIn,PM_GETPLUGIN,0,0);
if addr <> 0 then
try
PlugIn := IPlugIn(addr);
with lMsg do
begin
msg := CM_NOTDISPNEXT;
lParam := 0;
wParam := 0;
result := 0;
end;
PlugIn.WndProc(lmsg); //verhindert aufruf von DefWindowProc, falls botschaft von plugin nicht vearbeitet wird
PlugIn.WndProc(Msg);
finally
PlugIn := nil;
end;
end;
end;
letztendlich lasse ich das control in ruhe seine botschaft verarbeiten, bis ich selber damit weiter rumpfusche. ausserdem wird die botshcaft nicht an die defwindowproc übergeben, da sie bereits in FControl verarbeitet wurde.
da es jetzt funktioniert schliese ich mal darauf, das bei der verarbeitung von globalen messages wohl in den delphi controls noch einiges mehr an botschaften traffic verursacht wird, obwohl ja die botschaften hier zur erzeugung des dialogs verwendet werden (scheinbar werden aber wohl die controls auch neu gezeichnet)