gpt4 book ai didi

delphi - JCLMAPI Delphi 非模式电子邮件弹出窗口

转载 作者:行者123 更新时间:2023-12-03 18:31:34 25 4
gpt4 key购买 nike

我目前在 XP 上使用 Delphi 7,但我想最终将代码迁移到 Win8 上的 DXE。

我正在尝试使用 JCL 发送电子邮件,具体使用 JCLMAPI。我尝试使用 JclSimpleSendMail JCLMAPI 单元中的例程。这是调用的接口(interface)。

function JclSimpleSendMail(const Recipient, Name, Subject, Body: AnsiString;   const Attachment: TFileName; ShowDialog: Boolean; ParentWND: THandle;   const ProfileName: AnsiString; const Password: AnsiString): Boolean;

问题是它以模态方式弹出默认 MAPI 客户端消息框(在我的情况下为 Outlook 2010)。我希望它只打开电子邮件消息窗口,但允许用户继续在 Delphi 应用程序中工作。直到他们准备好发送,例如,如果用户想在发送电子邮件之前继续在 Delphi 应用程序中工作。这可能吗?

我注意到 TJCLEmail 中有一个 ParentHWND 属性,我尝试将其设置为零(我知道这是一个范围),但我希望删除父句柄可能会改变模式行为(不走运!)
function TForm1.SimpleSendHelper2(const ARecipient, AName, ASubject, ABody: AnsiString; const AAttachment: TFileName;
AShowDialog: Boolean; AParentWND: THandle; const AProfileName, APassword, AAddressType: AnsiString): Boolean;
var
AJclEmail: TJclEmail;
begin
AJclEmail := TJclEmail.Create;
try
**AJCLEmail.ParentWnd := 0; //TRIED FORCING THE ATTACHED HANDLE TO ZERO**
*//if AParentWND <> 0 then
// AJclEmail.ParentWnd := AParentWND;*
if ARecipient <> '' then
AJclEmail.Recipients.Add(ARecipient, AName, rkTO, AAddressType);
AJclEmail.Subject := ASubject;
AJclEmail.Body := ABody;
if AAttachment <> '' then
AJclEmail.Attachments.Add(AnsiString(AAttachment));
if AProfileName <> '' then
AJclEmail.LogOn(AProfileName, APassword);
Result := AJclEmail.Send(AShowDialog);
finally
AJclEmail.Free;
end;
end;

这也成功打开了默认 MAPI 应用程序并填写了所有传递的信息(收件人、主题、正文、附件)。不幸的是,它仍然以模态方式打开消息框。

最后,我还尝试了 http://www.delphifaq.com/faq/delphi/network/f236.shtml 的代码此代码直接使用 MAPI(无 JCL)。不幸的是,它还会模态地弹出消息框。

关于如何以非模式方式打开默认 MAPI 客户端的任何想法?

谢谢!

最佳答案

您可以使用 Windows API 函数 MAPISendMailW分配了标志 MAPI_DIALOG_MODELESS。
但是你必须使用 MAPISendMailHelper Win8 及更高版本的函数和 Windows 7 及更早版本的 MAPISendMailW。对于 Windows 7,此类功能仅适用于某些(最新)版本的 Office,并且仅适用于 W indows SDK for Windows 8安装(根据 MSDN)。如果使用了另一个电子邮件客户端(不是 MS Outlook),则无法保证它可以正常工作。

换句话说,这是可能的,但它很棘手。我建议您将其保留为模态形式,出于多种原因,它更安全。如果用户“还没有准备好发送电子邮件”,那么他将不会激活该功能(或取消它以返回程序)。

关于delphi - JCLMAPI Delphi 非模式电子邮件弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24565621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com