Announcement

Collapse
No announcement yet.

TreeView für Outlook Folders

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

  • TreeView für Outlook Folders

    Hallo,

    Ich verwende Outlook 97 und Delphi 6.02 und möchte in einem TreeView die Ordner von Outlook anzeigen. Angeregt durch einen Tip auf delphi3000.com, wurden zunächst alle Folders durchlaufen und sukzessive in den TreeView eingelesen. Da dies in unserem Netzwerk extrem lang dauert, bin ich jedoch dazu übergegangen, zunächst nur die oberste Ebene einzulesen und jeden Unterordner erst nach einen Klick auf das (+) Symbol des TreeView zu öffnen, wozu ich das OnExpanding Event heranziehe. Dazu speichere ich vorher das Feld "EntryID" (string!) jedes geöffneten Foldes als PChar im Data-Feld der betreffenden TreeNodes. Jetzt habe ich aber das Problem, dass in der OnExpanding-Ereignisbehandlung die Ordner nicht wiedergefunden werden. Der zurückgelesene EntryID-Wert ist zwar richtig, jedoch ist der daraus via "Namespace.GetFolderByID" ermittelte Ordner falsch (Zeile **** (1) unten), und in der nachfolgenden Zeile **** (2) wird dann folgerichtig angemeckert, dass "die Methode Count vom Automatisierungsobjekt nicht unterstützt" wird.

    Was mache ich falsch?

    Der gesamte Code sieht derzeit folgendermaßen aus:

    <PRE>
    type
    TMainForm = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    OutlookTreeView: TTreeView;
    OutlookApplication: TOutlookApplication;
    procedure FormCreate(Sender: TObject);
    procedure OutlookTreeViewExpanding(Sender: TObject; Node: TTreeNode;
    var AllowExpansion: Boolean);
    private
    { Private-Deklarationen }
    namespace : OLEVariant;
    procedure OutlookTree_AddNode(ParentNode:TTreeNode; Folder:OLEVariant);
    procedure OutlookTree_Populate;
    public
    { Public-Deklarationen }
    end;

    var
    MainForm: TMainForm;

    implementation

    {$R *.dfm}

    uses
    ComObj;

    procedure TMainForm.FormCreate(Sender: TObject);
    begin
    NameSpace := OutlookApplication.GetNameSpace('MAPI');
    OutlookTree_Populate;
    end;

    procedure TMainForm.OutlookTree_AddNode(ParentNode:TTreeNode ;
    Folder:OLEVariant);
    var
    i : integer;
    node : TTreeNode;
    entryID : string;
    begin
    for i:=1 to Folder.Count do begin
    entryID := Folder.Item[i].EntryID;
    node := OutlookTreeView.Items.AddChildObject(ParentNode,
    Folder.Item[i].Name, StrNew(PChar(entryID)));
    with node do begin
    node.HasChildren := Folder.Item[i].Folders.Count>0;
    end;
    end;
    end;

    procedure TMainForm.OutlookTree_Populate;
    begin
    OutlookTreeView.Items.BeginUpdate;
    OutlookTree_AddNode(nil, NameSpace.Folders);
    OutlookTreeView.Items.EndUpdate;
    OutlookTreeView.SortType := stText;
    end;

    procedure TMainForm.OutlookTreeViewExpanding(Sender: TObject;
    Node: TTreeNode; var AllowExpansion: Boolean);
    var
    folder : OLEVariant;
    entryID : string;
    begin
    entryID := StrPas(Node.Data);
    folder := namespace.GetFolderFromID(entryID); // xxxx (1)
    OutlookTree_AddNode(Node, folder); // xxxx (2)
    end;

    </PRE>

  • #2
    Hab den Fehler gefunden: Verwechslung von "folder" und "folders", d.h. in dem Aufruf von "Outlook_TreeAddNode" im Rahmen des OnExpanding-Events muss "folder.Folders" übergeben werden, anstatt allein "folder"

    Comment

    Working...
    X