Einzelnen Beitrag anzeigen

snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#5

AW: Fehler bei Dialog in dll

  Alt 5. Mai 2011, 10:56
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)
  Mit Zitat antworten Zitat