AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehler bei Dialog in dll

Ein Thema von snook · begonnen am 18. Apr 2011 · letzter Beitrag vom 5. Mai 2011
 
snook

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

AW: Fehler bei Dialog in dll

  Alt 29. Apr 2011, 22:00
hee, danke für den tip, hab jetzt alles durchprobiert. weder hInstance der main, noch der zugehörigen dll haben funktioniert. application.handle auch nicht und form.handle des hauptformulars auch net. bin langsam etwas verzweiflet, weil ich jetzt alle windowsprocs die ich definiert habe noch mal durchgerannt bin um zu schauen ob nicht doch irgendwo die messages hängenbleiben, aber sie werden brav bis zu meinen basisklassen durchgereicht, in denen dann die defwindowproc aufgerufen wird. habe gerade gelesen, dass es noch für dialoge ne defdlgproc funktion gibt, weiß aber ehrlich gesagt net wie ich die einsetzen soll, also wie ich erkennen soll, ob die zu verarbeitende botschaft nun gerade von nem dialog kommt. falls es jemandem hilft, poste ich mal noch ein paar wichtige verarbeitungsprozeduren für die botschaften:

Delphi-Quellcode:
// windowproc der plugin basisklasse

procedure TCustomPlugIn.WndProc(var Msg: TMessage);
begin
  if (Msg.Msg > WM_PLUGIN) and (Msg.Msg <= CM_PLUGIN) then
    with Msg do
    begin
      case Msg of
        PM_EXECUTE :
          begin
            run;
          end;
        PM_REGEVENT :
          begin
            with PPlugInEvent(lParam)^ do
              RegisterNewEvent(name,EventID,Handle,lParam);
          end;
        PM_UNREGEVENT:
          begin
            with PUnRegisterEvent(lParam)^ do
              UnRegisterEvent(name,handle);
          end;
        PM_QUERYSTATUS: result := OrdToInt(Status);
        PM_RELEASE : PostMessage(PlugInManager,PM_RELEASE,MsgHandle,0);
        PM_GETPLUGIN: result := LongInt(IPlugIn(self));
        else
          Result := DefWindowProc(MsgHandle,Msg,WParam,LParam);
      end;
    end
  else
    Msg.Result := DefWindowProc(MsgHandle,Msg.Msg,Msg.WParam,Msg.LParam);
end;

//windowproc der wrapperklasse für TControl

procedure TControlWrapper.WndProc(var Msg: TMessage);
var Data: IControlData;
begin
  if Msg.Msg > WM_PLUGIN then
    with Msg do
      case Msg of
      PM_GETDATA:
        if Assigned(FControl) then
          begin
// FCriticalSection.Acquire;
            try
              GetControlData(Data);
              IControlData(result) := Data;
            finally
              Data := nil;
// FCriticalSection.Release;
            end;
          end;
        PM_SENDDATA:
          begin
// FCriticalSection.Acquire;
            try
              Data := IControlData(lParam);
              if Assigned(Data) and supports(Data, IControlData) then
                SetControlData(Data);
            finally
              Data := nil;
// FcriticalSection.Release;
            end;
          end;
        CM_CHANGELOCK: ControlLocked := not ControlLocked;
        CM_GETLOCKSTATE:
          if FControlLocked then
            result := 1
          else
            result := 0;
      end
  else
    Msg.Result := DefWindowProc(MsgHandle,Msg.Msg,Msg.WParam,msg.LParam);
end;

// so hängt sich der wrapper bei dem zugehörigen TControl im Hauptkontext ein
FOldWindowProc := FControl.WindowProc;
FControl.WindowProc := ControlWndProc;

procedure TControlWrapper.ControlWndProc(var Msg: TMessage);
begin
  FOldWndProc(msg);
    if (AllocatedPlugIn > 0) then
    begin
      with Msg do
        SendMessage(AllocatedPlugIn,msg,wParam,lParam);
    end;
end;
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz