2012-04-02 9 views
3

Ich verwende OLE mit Delphi, um von meiner Delphi-App nach Outlook zu kommunizieren.Wie zeigt man auf der Vorderseite (und nicht im Hintergrund) ein neues E-Mail-Formular in Outlook mit OLE?

Ich öffne das neue E-Mail-Formular in Outlook mit dem folgenden Code. Das Problem besteht darin, dass das Formular im Hintergrund ist. Wenn das Formular, aus dem das E-Mail-Formular generiert wird, maximiert ist, wird es das neue Outlook-E-Mail-Formular "abdecken".

Wie kann ich das Formular oben erscheinen lassen? (nicht "oben drauf", sondern einfach oben drauf, dann kann ein Benutzer es mimimieren, wenn sie es wollen).

Dies ist der Code:

try 
    OutlookApp := GetActiveOleObject('Outlook.Application'); 
    except 
    OutlookApp := CreateOleObject('Outlook.Application'); 
    end; 
    try 
    MailItem := OutlookApp.CreateItem(olMailItem); 
    MailItem.To := '[email protected]';  
    MailItem.Subject := 'This is the subject'; 
    MailItem.HTMLBody := '<HTML>Test</HTML>'; 
    MailItem.Display; 
    finally 
    OutlookApp := VarNull; 
    end; 
end; 
+1

Wenn ich das mache, erscheint das neue Nachrichtenfenster vor meinem Delphi-Formular. Was verursacht das * nicht * für dich? –

+1

Ich habe es gerade auch getestet, Outlook-Fenster erscheint oben. Kann sein, dass Ihr Formular keine Standardeinstellungen hat? ('FormStyle = fsStayOnTop' für ex? - in diesem Fall erscheint das Outlook-Fenster im Hintergrund, aber' self.SendToBack' bevor 'mailItem.Display' dieses Problem löst) – teran

+2

OP ist korrekt. Wenn das Outlook-Hauptfenster sichtbar ist, wird die neue Nachricht im Delphi-Formular geöffnet. (versuchen Sie, die EXE von außerhalb der IDE zu starten) – kobik

Antwort

4

Fügen Sie einfach einen weiteren Anruf:

MailItem.Display; 
OutlookApp.ActiveWindow.Activate; 

Activate bringt Outlook nach vorne.

+0

Es scheint eine kluge Antwort zu sein, trotzdem bekomme ich mit Outlook 2010 nicht das gewünschte Verhalten (ich habe es nicht mit anderen versucht). Outlook erhält irgendwie den Fokus (das neue Mail-Fenster blinkt in der Anwendungsleiste orange), kommt aber nicht nach vorne. – LaBracca

+1

@user: Ich benutze fast den gleichen Code, aber ich mache Call .Activate wenn Ereignis OnOpen ausgelöst wird. Und für mich funktioniert es (W8, Outlook2010, XE3, UAC deaktiviert) in beiden Modi - modal und normal. Sie können den vollständigen Quellcode hier nehmen und versuchen: http://stackoverflow.com/questions/20632837/generate-new-message-in-outlook-and-display-as-modal –

2

Der MailItem.Display der optionale Parameter hat Modal die Fenster modal machen sollte, so versuchen zu nutzen:

MailItem.Display(True); 
+2

Vielleicht möchte das OP nicht, dass das Fenster modal ist? –

+0

@Andreas, Sie haben wahrscheinlich Recht, die Notiz * dann können Benutzer minimieren, wenn sie wollen * scheint wie eine Anfrage für nicht modale Fenster. – TLama

+1

@TLama: In meiner Umgebung (W8/Outlook2013/XE3) wird die modale Form im Hintergrund geöffnet, so dass die Anwendungsform tot, aber modale Form unsichtbar wurde, bis der Benutzer Outlook aktiviert. –