Announcement

Collapse
No announcement yet.

Outlookadressbuch in combobox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Outlookadressbuch in combobox

    Hallo,

    Ich möchte das Outlookadressbuch in deine Combobox einfügen. geht das???
    ich möchte das der user dort dann die emailadresse sich auswählen kann.

    Danke im Voraus

  • #2
    Hallo,

    über <b>Automation</b> von Outlook lassen sich diese Informationen über das <b>ContactItem</b>-Interface ermitteln. Das folgende Beispiel sollte ab Delphi 4 funktionieren, ich habe dazu auf Outlook 2000 zugegriffen:
    <pre>
    uses Outlook_TLB;

    procedure TForm1.ToolButtonListClick(Sender: TObject);
    var
    Outlook : _Application;
    DefNamespace : NameSpace;
    Contacts : MAPIFolder;
    Contact : _ContactItem;
    iCnt : Integer;
    begin
    Outlook := CoOutlookApplication.Create;
    DefNameSpace := Outlook.GetNamespace('MAPI');
    Contacts := DefNameSpace.GetDefaultFolder(olFolderContacts);
    for iCnt := 1 to Contacts.Items.Count do
    begin
    Contact := Contacts.Items.Item(iCnt) as _ContactItem;
    ListBox1.Items.Add(Format('%s %s: %s',
    [Contact.FirstName, Contact.LastName,
    Contact.Email1Address]));
    end;
    Outlook := nil;
    end;
    </pre&gt

    Comment


    • #3
      Das kommt drauf an, zu unterscheiden ist erstmal (leider) zwischen outlook und outlook-Express, lezteres (also express) arbeitet nur mit mit dem Win-AdrBook, ich habe es bisher nur geschafft das zu anzeige zu bringen, aber nicht daten auszulesen (schade eigentlich).
      Geht es wirklich um das grosse Outlook gibt es eigentlich nur das eine Problem, das dort zwischen Kontakten und den Adreßbuch unterschieden wird, im Zweifel müssen also beide geparst werden, die Komponente Outlook-Application (auf der Seite Server) enthält alles was dazu notwendig ist, wenn Du diese nicht hast (Delphi <5) bitte nochmal schreiben..
      Das Addressbuch ist unter der Eigenschaft AddressEntries zu finden, die Probleme fangen bei den kontakten an, da sie nicht eine eigene Eigenschaft sind, sondern beliebige (auch verschachtelte) Ordner können Kontakte enthalten, d. h. die Eigenschaft Mapi-Folder muss Rekursiv durchlaufen werden, bei jedem Ordner Prüfen ob es ein Kontaktordner ist und wenn ja die Kontakte einlesen (hier mal in VBA, weil ich grad nix anderes zur Hand habe:
      <p>
      <pre>
      <font size = 2>
      Dim out As Outlook.Application
      Dim oAdr As Outlook.Folders
      Dim cFolder As Outlook.MAPIFolder
      Dim contact As Outlook.ContactItem

      Private Sub FolderTest()
      Dim i As Integer
      Dim test As String
      Dim backFolder As MAPIFolder
      Rem If Folder.ListIndex = -1 Then Exit Sub
      cName.Text = cFolder.name
      If cFolder.DefaultItemType = olContactItem Then
      For i = 1 To cFolder.Items.Count
      Set contact = cFolder.Items.Item(i)
      test = contact.LastFirstAndSuffix + ", " + contact.Email1Address
      adrs.AddItem test
      Next i
      End If
      Set backFolder = cFolder
      For i = 1 To backFolder.Folders.Count
      Set cFolder = backFolder.Folders(i)
      FolderTest
      Next i
      End Sub

      Private Sub UserForm_Initialize()
      Dim i As Integer
      Set out = CreateObject("Outlook.Application")
      oVer.Caption = out.Version
      Set oAdr = out.Session.Folders
      For i = 1 To oAdr.Count
      Set cFolder = oAdr.Item(i)
      FolderTest
      Next i
      </font size>
      </pre>
      </p>
      <p>
      Zu beachten ist das im gegensatz zu den Delphi gewontheiten Listen von 1 bis Count statt 0 bis Count -1 gehen..

      Ein Hinweis noch, auf der Office CD (ich glaube im Verzeichnis extras) gibt es die Datei VbaOutl.hlp (oder so ähnlich), das ist die Visual Basic Anleitung, die alles über das fernsteuern von Outlook enthält, ist als Delphianer eigentlich gut zu verstehen

      Comment


      • #4
        Jetzt habe ich mir soo viel Zeit gelassen das schon ein kommentar da ist. Ich Poste meinen jetzt trotzdem, weil ausführlicher

        Bei Outlook gibt es das Problem, das dort zwischen Kontakten und dem Addreßbuch unterschieden wird, im Zweifel müssen also beide geparst werden, die Komponente Outlook-Application (auf der Seite Server) enthält alles was dazu notwendig ist, wenn Du diese nicht hast (Delphi <5) bitte nochmal schreiben..
        Das Addressbuch ist unter der Eigenschaft AddressEntries zu finden,
        und kann ähnlich wie die Kontakte durchlaufen werden, die Probleme fangen dann erst bei den kontakten an, da sie nicht zwingend nur im default Kontakte Ordner zu finden sind, sondern beliebig viele (auch verschachtelte) Ordner können Kontakte-Ordner sein, d. h. die Eigenschaft Mapi-Folder muss Rekursiv durchlaufen werden, bei jedem Ordner Prüfen ob es ein Kontaktordner ist und wenn ja die Kontakte einlesen (hier mal in VBA, weil ich grad nix anderes zur Hand habe:
        <p>
        <pre>
        <font size = 2>

        Dim out As Outlook.Application
        Dim oAdr As Outlook.Folders
        Dim cFolder As Outlook.MAPIFolder
        Dim contact As Outlook.ContactItem

        Private Sub FolderTest()
        Dim i As Integer
        Dim test As String
        Dim backFolder As MAPIFolder
        Rem If Folder.ListIndex = -1 Then Exit Sub
        cName.Text = cFolder.name
        If cFolder.DefaultItemType = olContactItem Then
        For i = 1 To cFolder.Items.Count
        Set contact = cFolder.Items.Item(i)
        test = contact.LastFirstAndSuffix + ", " + contact.Email1Address
        adrs.AddItem test
        Next i
        End If
        Set backFolder = cFolder
        For i = 1 To backFolder.Folders.Count
        Set cFolder = backFolder.Folders(i)
        FolderTest
        Next i
        End Sub

        Private Sub UserForm_Initialize()
        Dim i As Integer
        Set out = CreateObject("Outlook.Application")
        oVer.Caption = out.Version
        Set oAdr = out.Session.Folders
        For i = 1 To oAdr.Count
        Set cFolder = oAdr.Item(i)
        FolderTest
        Next i
        </font size>
        </pre>
        </p>
        <p>
        Zu beachten ist das im gegensatz zu den Delphi gewontheiten Listen von 1 bis Count statt 0 bis Count -1 gehen..

        Ein Hinweis noch, auf der Office CD (ich glaube im Verzeichnis extras) gibt es die Datei VbaOutl.hlp (oder so ähnlich), das ist die Visual Basic Anleitung, die alles über das fernsteuern von Outlook enthält, ist als Delphianer eigentlich gut zu verstehen

        Comment


        • #5
          Sehr geehrter Herr Kosch,

          ich habe Ihren Lösungsvorschlag versucht zu Übungszwecke nach zuvollziehen. Ich arbeite mit Delphi 4.0 Prof. unter Win 98 (Mein Delphi 5 Prof. benutze ich nur für fertige Lösungen auf Win 98 SE). Als erstes habe ich die Datei Outlook_TLB gesucht und in Ihrem Buch COM/DCOM gefunden. Danach habe ich Sie ins LIB Verzeichnis kopiert. Dann begannen die Fehlermeldungen

          1. Outlook : _Application; --> Application_
          2. Contact : _ContactItem; --> ContactItem
          3. Outlook := CoOutlookApplication.Create; --> CoApplication.Create

          Nach dem Kompilieren bekam ich nur noch die Fehlermeldung "Klasse nicht registriert".
          Ich benutze Outlook Express und habe kein Outlook 2000 (ist auch nicht geplant, wegen Linux)).
          Gibt es ein Lösung für Outlook Express und was muß ich zum Registrieren der Klasse unternehmen.

          Mit freundlichen Grüßen

          Jens Freitag
          [email protected]
          www.biopark.d

          Comment


          • #6
            Hallo,

            auf diesem Weg kann es nicht funktionieren, denn die Fehlermeldung "Klasse nicht registriert" bezieht sich auf die <b>CoClass</b> des COM-Objekts, das vom eigenen Programm aufgerufen wird. Die xyz_TLB.pas ist nur die <b>importierte Typbibliothek</b> des bereits auf dem Rechner installierten Automation-Servers. Im Normalfall arbeitet man die folgenden Schritte ab: <br>
            1. Der Automation-Server (hier Microsoft Outlook) wird installiert <br>
            2. Delphi-Menü <i>Projekt | Typbibliothek importieren</i> aufrufen <br>
            3. Im Dialog <b>Typbibliothek importieren</b> die Zeile "Microsoft Outlook" auswählen und Button <i>Erzeugen</i> anklicken. Delphi generiert aus der Typbibliothek von MS Outlook automatisch die jeweils zur vorgefundenen Outlook-Version passende xyz_TLB.pas <br>
            4. Im eigenen Projekt wird diese xyz_TLB.pas eingebunden, so dass die eigene Anwendung die richtigen Interfaces nutzen kann.

            Eine Fernbedienung von Outlook Express ist auf diesem Weg so <b>nicht</b> möglich, da nicht von Microsoft vorgesehen

            Comment


            • #7
              Hallo,

              Danke für den schnellen Hinweis.

              Mit freundlichen Grüßen

              Jens Freitag [email protected] www.biopark.d

              Comment

              Working...
              X