如何在Outlook中使用OLE在前面(而不是在背景上)显示新的电子邮件表单?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Outlook中使用OLE在前面(而不是在背景上)显示新的电子邮件表单?相关的知识,希望对你有一定的参考价值。
我使用OLE与Delphi从我的delphi应用程序通信到Outlook。
我使用以下代码在Outlook中打开新的电子邮件表单。问题是表单是在后台,所以如果我生成电子邮件表单的表单最大化,它将“覆盖”Outlook新邮件表单。
如何让表单显示在顶部? (不是“坚持在顶部”,而只是它显示在顶部,然后用户可以根据需要最小化它)。
这是代码:
try
OutlookApp := GetActiveOleObject('Outlook.Application');
except
OutlookApp := CreateOleObject('Outlook.Application');
end;
try
MailItem := OutlookApp.CreateItem(olMailItem);
MailItem.To := 'Test@mail.com';
MailItem.Subject := 'This is the subject';
MailItem.htmlBody := '<HTML>Test</HTML>';
MailItem.Display;
finally
OutlookApp := VarNull;
end;
end;
答案
只需添加一个电话:
MailItem.Display;
OutlookApp.ActiveWindow.Activate;
Activate将Outlook带到了前面。
另一答案
MailItem.Display
有可选参数Modal
,它应该使你的窗口模态,所以尝试使用:
MailItem.Display(True);
另一答案
我意识到这是一个古老的话题,但我最近对Outlook 2016的用户也有同样的问题。对我来说,解决方案需要能够包含签名和附件并在顶部打开新的Outlook窗口。如果您调用MailItem.Display(True),则会丢失附件。这是对我有用的解决方案。
注意窗口名称中“Message(HTML)”之后的额外空格。我花了很长时间才发现新HTML电子邮件的窗口名称最后有一个额外的空白区域。
procedure DisplayMail(Address, Subject, Body: string; Attachment: TFileName);
var
Outlook: OleVariant;
Mail: OleVariant;
H : THandle;
TempTitle : String;
begin
TempTitle := 'Temp-'+IntToStr(Random(1000000));
try
Outlook := GetActiveOleObject('Outlook.Application');
except
Outlook := CreateOleObject('Outlook.Application');
end;
Mail := Outlook.CreateItem(olMailItem);
Mail.To := Address;
Mail.Subject := TempTitle;
Mail.Display(false);
H := FindWindow('rctrl_renwnd32',PWidechar(TempTitle+' - Message (HTML) '));
Mail.Subject := Subject;
if Body <> '' then
Mail.HTMLBody := InsertMessage(Body,Mail.HTMLBody);
if Attachment <> '' then
Mail.Attachments.Add(Attachment);
try
if H <> 0 then
SetForegroundWindow(H);
finally
end;
end;
这对我有用,它允许我添加附件,并保留默认签名。我希望这有助于某人。
以上是关于如何在Outlook中使用OLE在前面(而不是在背景上)显示新的电子邮件表单?的主要内容,如果未能解决你的问题,请参考以下文章
使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称