我遇到了JclMAPI的一些麻烦。目前我正在使用JCL 2.6 Build 5178和Delphi XE3。
我的应用程序的主要形式是MDIForm,它处理不同的MDIChild表单。从其中一个我可以显示一个模态形式,然后我调用JclSimpleBringUpSendMailDialog
将ParentWND
参数与模态形式句柄分配。
通常,此方法会在模式窗体前打开电子邮件消息窗口。
我的问题是,有时电子邮件消息窗口位于应用程序mainForm下面,我无法将它带到前面。
因此应用程序等待Jcl方法的返回值,我无法重新激活它。真正的问题是电子邮件窗口在我的应用程序后面,我无法撰写消息
我在网上搜索没有运气。
你有没有遇到过这个问题?
答案 0 :(得分:1)
您可能希望切换到使用Outlook对象模型而不是简单MAPI。这样,您可以在显示消息之前首先将Outlook的主窗口置于前台。可以通过将Explorer对象(返回购买Application.ActiveExplorer)强制转换为IOleWindow并调用IOleWindow.GetWindow来检索Outlook的HWND。一旦你有HWND,你可以使用类似下面的东西把它带到前台:
function ForceForegroundWindow(hWnd: THandle): BOOL;
var
hCurWnd: THandle;
begin
hCurWnd := GetForegroundWindow;
AttachThreadInput(
GetWindowThreadProcessId(hCurWnd, nil),
GetCurrentThreadId, True);
Result := SetForegroundWindow(hWnd);
AttachThreadInput(
GetWindowThreadProcessId(hCurWnd, nil),
GetCurrentThreadId, False);
end;