Привет всем!!! Пишу ActiveX для IE. Показываю стандартный API диалог, а он зависает вместе с IE.
Код | TMyObject = class(TAutoObject, IObjectSafety, IObjectWithSite, IMyObject) private Parent: HWND; protected function SetSite(const pUnkSite: IUnknown ):HResult; stdcall; function GetSite(const riid: TIID; out site: IUnknown):HResult; stdcall; function ShowDlg: Boolean; end; ... function TMyObject.GetSite(const riid: TIID; out site: IUnknown):HResult; stdcall; begin Result:=S_Ok; end;
function TMyObject.SetSite(const pUnkSite: IUnknown ):HResult; stdcall; var OleWindow:IOleWindow; begin Result:=S_Ok; Parent:=0; if pUnkSite=nil then Exit; OleWindow:=pUnkSite as IOleWindow; if not Succeeded(OleWindow.GetWindow(Parent)) then Result:=E_FAIL; OleWindow:=nil; if Parent=0 then begin Result:=E_FAIL; Exit; end; end;
function MyDlgProc(hDlg: HWND; Msg, WParam, LParam: Integer): Integer; StdCall; begin Result := 0; Case Msg of WM_COMMAND: begin if (LoWord(WParam) = IDCANCEL) then EndDialog(hDlg, IDCANCEL); end; end; Result := 0; end;
function TMyObject.ShowDlg: Boolean; begin Result := DialogBox(hInstance, 'IDD_MYDLG', Parent, @MyDlgProc)=IDOK; end;
|
вместо DialogBox использовал GetOpenFileName (стандартное API диалог открытия файла) все равно зависает.
Помогите пожалуйста. Заранее спасибо. |