Announcement

Collapse
No announcement yet.

Outlook

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

  • Outlook

    hi,

    wie kann ich von meiner anwendung heraus outlook 98/2000 starten und einen gewissen kontakt öffnen?

    gruß

    lehrling

  • #2
    Hallo,

    das folgende Beispiel demonstriert den Zugriff aus der eigenen Delphi 5-Anwendung heraus:
    <pre>
    unit KontakteD5Frm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, OleServer, Outlook2000;

    type
    TForm1 = class(TForm)
    OutlookApplication1: TOutlookApplication;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    aNameSpace : NameSpace;
    aContacts : MAPIFolder;
    aContactItem : ContactItem;
    iCnt : Integer;
    begin
    OutlookApplication1.Connect;
    aNameSpace := OutlookApplication1.GetNamespace('MAPI');
    aContacts := aNameSpace.GetDefaultFolder(olFolderContacts);
    for iCnt := 1 to aContacts.Items.Count do
    begin
    aContactItem := aContacts.Items.Item(iCnt) as ContactItem;
    ListBox1.Items.Add(Format('%s : %s', [aContactItem.FirstName,
    aContactItem.Email1Address]));
    end;
    OutlookApplication1.Disconnect;
    end;

    end.
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,

      auf meinem Windows-2000-Rechner funktioniert das aber nicht. In der Zeile "aContactItem := aContacts.Items.Item(iCnt) as ContactItem" gibts eine Exception "Schnittstelle nicht registriert". Diese erscheint aber erst nach ein paar Sekunden. Dieser Effekt tritt bei vielen Rechnern auf. Woran kanns liegen?

      Gruß!

      Wilfried Benne

      Comment


      • #4
        Hallo,

        es gibt da 2 Möglichkeiten: <br>
        1. Outlook ist nicht installiert (bzw. die falsche Version) <br>
        2. Die Benutzerrechte wurden zu sehr eingeschränkt

        Comment


        • #5
          Hallo Herr Kosch,

          Outlook ist natürlich installiert und ich habe Administratorrechte. Das Problem tritt auch bei anderen Rechnern und Konfigurationen auf. Ich habs mal testweise über ein OLE-Objekt ersucht. Dann gehts bis zur der Zeile wo die Liste gefüllt ist. Meint das aC.Firstname nicht vom Automatisierungsobjekt unterstützt wird. ac.EMail1Address kennt er ebenfalls nicht.

          ol:=CreateOleObject('Outlook.Application');

          aNS := ol.GetNamespace('MAPI');

          aCs := aNS.GetDefaultFolder(olFolderContacts);

          M:=aCs.Items.Count;

          for iCnt := 1 to M do

          begin

          aC:=aCs.Items.Item(iCnt);

          ListBox1.Items.Add(Format('%s : %s',
          [ac.FirstName,aC.Email1Address])); // hier fliegt er raus.

          end;

          Wie kommt man denn an die gültigen Feldnamen heran

          Comment


          • #6
            Hallo Herr Kosch,

            ich hab's jetzt hinbekommen. Schuld war die Zeile:

            aContactItem := aContacts.Items.Item(iCnt) as ContactItem;

            Klappen tuts mit folgender Zeile:

            aContactItem := ContactItem(aContacts.Items.Item(iCnt));

            Hatte eigentlich gedacht, dass das "as" genauso wirkt wie das TypeCasting in der unteren Zeile, schon komisch..

            Comment


            • #7
              Hallo,

              diese "harte" Typumwandlung ist gefährlich. Anscheinend passt die verwendete Outlook_TLB.pas <b>nicht</b> zur installierten Outlook-Version. Dies ist auch die Erklärung für das Email1Address- und Schnittstelle nicht registriert-Problem.

              Ein AS ist kein Typecast, sondern ruft im Hintergrund die IUnknown-Methode <b>QueryInterface</b> auf, um auf dem offiziellen COM-Weg nach dem gesuchten Interface-Zeiger zu fragen. Wenn das aufgerufene COM-Objekt (hier Outlook) die angeforderte IID (Interface-ID) nicht unterstützt, löst Delphi eine Exception aus.

              Wenn das eigene Programm mit verschiedenen Outlook-Versionen umgehen muss, darf man nur die importierte Typbibliotheks-Unit verwenden, die zur <b>niedrigsten</b> Outlook-Version gehört.

              &#10

              Comment

              Working...
              X