StartDownloadsServiceBeispieleWorkshopsKontakt DeutschEnglish
 
Beispiele
Allgemein
Outlook®
 
Awarded by
Microsoft since 2005:
mvp logo
VBOffice Info
Besucher1409680
Aufrufe5191538
Links
Impressum
Datenschutz
Kontakt
E-Mail: Eigenes Formular modal zu fremden Prozessen anzeigen
Autor: Michael BauerHomepage
Datum: 05.02.2006Zugriffe: 19247
  
Beschreibung

Häufig hat ein Outlook-Programierer die Aufgabe, während der Bearbeitung einer E-Mail ein eigenes Formular anzuzeigen, um z.B. weitere Daten vom Anwender abzufragen

Wenn der Anwender Microsoft Word als Maileditor nutzt, dann gibt es ein Problem: Ihr Code läuft im Prozess Outlooks, während der Maileditor im Prozess Words läuft. Das bedeutet z.B., dass Sie Ihr Formular nicht modal zum Mailfenster anzeigen können; ohne Tricks gelingt es nicht einmal, das Formular in den Vordergrund zu bringen oder ihm gar den Fokus zu geben.

Dr. Jürgen Thümmler stellt die DLL dsmodal kostenlos zur Verfügung: Damit können Sie ganz einfach ein beliebiges Fenster modal zu einem Fenster eines anderen Prozesses oder systemmodal anzeigen.

Das folgende Beispiel zeigt, wie Sie die nötigen Fensterhandles ermitteln und dsmodal verwenden. Bitte kopieren Sie die dsmodal.dll in das Systemverzeichnis (..\winnt\system32), damit sie gefunden wird.

Im Beispiel wird ein VB-Formular verwendet; weisen Sie vorm Laden des Formulars bitte der Eigenschaft ParentWindowCaption die Caption-Eigenschaft des Mailfensters zu (Inspector.Caption).

Mit ein paar kleinen Änderungen können Sie das Beispiel auch in VBA verwenden. Da es dort kein Form_Load-Ereignis gibt, könnten Sie den Code z.B. einmalig im Activate-Ereignis aufrufen. Außerdem gibt es im VBA-UserForm keine Eigenschaft für das Fensterhandle. Mit der Caption-Eigenschaft und der gezeigten FindChildWindowText-Funktion ist dessen Ermittlung aber kein Problem.

' <frmSample>
Option Explicit
Private Declare Function MakeModal& Lib "dsmodal" _
  (ByVal AppHwnd&, ByVal hwndDest&, Optional ByVal Beep& = 0)

Public ParentWindowCaption As String

Private Sub Form_Load()
  Dim lParent As Long
  Dim lMe As Long

  lParent = FindChildWindowText(GetDesktopWindow, ParentWindowCaption)

  ' VB Forms:
  lMe = Me.hwnd

  Call MakeModal(lMe, lParent, 1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Call MakeModal(0, 0, 0)
End Sub
' </frmSample>

 
 

ReplyAll warnt Sie, bevor Sie unbeabsichtigt allen Empfängern einer E-Mail antworten oder wenn Sie ein vertraulicher BCC-Empfänger der E-Mail ... [weiter]

 

Blitzschneller Zugriff auf die Hauptkategorienliste, gemeinsame Kategorien im Netzwerk, eine Erinnerungsfunktion ... [weiter]

 

SAM legt automatisch Absender, Signatur und Speicherort für gesendete Mails fest, z.B. anhand der ... [weiter]

 

OLKeeper verhindert zuverlässig, dass Mitarbeiter Outlook schließen und dadurch Termine oder E-Mails ... [weiter]

So entgeht Ihnen kein Auftrag mehr:
Telefonservice und Sekretariatsservice