Как показать на передней (а не на фоне) новую форму электронной почты в Outlook с OLE? - PullRequest
3 голосов
/ 02 апреля 2012

Я использую 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;

Ответы [ 3 ]

4 голосов
/ 17 декабря 2013

Просто добавьте еще один звонок:

MailItem.Display;
OutlookApp.ActiveWindow.Activate;

Активация выводит Outlook на передний план.

2 голосов
/ 02 апреля 2012

MailItem.Display имеет необязательный параметр Modal, который должен сделать ваше окно модальным, поэтому попробуйте использовать:

MailItem.Display(True);
1 голос
/ 24 апреля 2018

Я понимаю, что это старая тема, но у меня недавно была та же самая проблема для пользователей с 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; 

Это сработало для меня, и оно позволяет мне добавлять вложения и сохраняет подпись по умолчанию. Надеюсь, это кому-нибудь поможет.

...