線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1553
推到 Plurk!
推到 Facebook!

【BCB】【問題】如何使用TOutlookAplication元件讀取 Outlook 的個人通訊錄

尚未結案
spooky
一般會員


發表:2
回覆:5
積分:1
註冊:2003-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-02 12:13:23 IP:61.222.xxx.xxx 未訂閱
想請教各位先進一個問題,在討論區中 axsoft 兄分享了一篇”TOutlookAplication元件的應用範例”,裡面有介紹到讀取信件的部分。 而我現在的需求是想讀取 OutLook 2000/2002 中的個人中通訊錄。 之前有找到一篇是 Delphi 使用 OLE 的範例,可以我在 BCB5 中使用 OLE 的方式, compile 時卻發現不能使用 GetNameSpace 這個 Methods。 使用 TOutlookAplication 時,我卻無法理解 TOutlookAplication 如何讀取的 Outlook 的個人通訊錄的方法。 不知道是否有先進可指導一下如何使用 TOutlookAplication 讀取通訊錄,或是使用 OLE 的方法時該如何 GetNameSpace 。 感激不盡~~
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-02 13:13:35 IP:61.218.xxx.xxx 未訂閱
spooky您好:    試試這個範例吧    
Unit1.H
//---------------------------------------------------------------------------
//Here is a simple example of using TOutlookApplication to get a list
//of folders into a TreeView control and display them when the user 
//double-clicks the TreeView.
//---------------------------------------------------------------------------    #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include "Outlook_2K_SRVR.h"
#include 
#include 
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:        // IDE-managed Components
  TOutlookApplication *ola;
  TButton *Button1;
  TTreeView *tv;
  TLabel *Label1;
  TPopupMenu *PopupMenu1;
  TMenuItem *add1;
  TLabel *Label2;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall tvDblClick(TObject *Sender);
  void __fastcall add1Click(TObject *Sender);
private:        // User declarations
  _NameSpacePtr ns;
public:                // User declarations
  __fastcall TForm1(TComponent* Owner);
  void __fastcall EnumFolders(MAPIFolderPtr fldr, TTreeNode *parent);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif    Unit1.cpp    //---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Outlook_2K_SRVR"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  ns = OutlookApplication1->GetNamespace(WideString("MAPI"));
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  MAPIFolderPtr tmp;
  TTreeNode *tmp_node;
  tv->Items->Clear();
  for (int i=1; i<=ns->Folders->Count; i  )
  {
    tmp = ns->Folders->Item(i);
    tmp_node = tv->Items->Add(tv->TopItem,String(tmp->Name));
    tmp_node->Data = tmp->EntryID;
    if (tmp->Folders->Count)
      EnumFolders(tmp,tmp_node);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EnumFolders(MAPIFolderPtr fldr, TTreeNode *parent)
{
  MAPIFolderPtr tmp;
  TTreeNode *tmp_node;
  String str;
  for (int i=1; i<=fldr->Folders->Count; i  )
  {
    tmp = fldr->Folders->Item(i);
    str = tmp->Name;
    tmp_node = tv->Items->AddChild(parent,str);
    tmp_node->Data = tmp->EntryID;
    if (tmp->Folders->Count)
      EnumFolders(tmp,tmp_node);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::tvDblClick(TObject *Sender)
{
  MAPIFolderPtr fldr;
  fldr = ns->GetFolderFromID((wchar_t *)tv->Selected->Data);
  fldr->Display();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::add1Click(TObject *Sender)
{
  if (!tv->Selected) return;
  String fldr_name;
  MAPIFolderPtr fldr = ns->GetFolderFromID((wchar_t *)tv->Selected->Data);
  fldr_name = InputBox("enter.folder.name","folder name","");
  if (fldr_name != "")
    fldr->Folders->Add(WideString(fldr_name));
}
//---------------------------------------------------------------------------
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2004/02/02 13:25:45
spooky
一般會員


發表:2
回覆:5
積分:1
註冊:2003-07-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-02 17:41:50 IP:61.222.xxx.xxx 未訂閱
首先感謝 axsoft 兄的指導。 目前在我的電腦是已經可以讀出Mailbox Folder 裡面的連絡人。 但是把程式 Compile 好拿到別人的電腦執行時會錯誤訊息產生,類似”....不支援此介面....”的訊息。 我是在 Outlook_2k.h 裡面有看到 ”Interface: AddressLists”和 ”Interface: AddressEntries”,不知道有沒有方法可以直接使用這兩個 Interface 操作 Outlook 通訊錄。我到目前為止還是看不出來如何使用這兩個介面。 另外我發現,在 Mailbox Folder的連絡人和 Outlook通訊錄的連絡人不見得會一致,因此我是比較傾向直接操作 Outlook 通訊錄應該會比較方便,且比較不會出現我之前發生的跨電腦會出問題的現象。(純粹個人直覺而已,沒什麼根據) 在下這方面思路不是很靈通與清晰,盼各位先進能幫幫忙與討論討論,如果我有什麼心得也會與大家一起分享的。 感激不盡~~
系統時間:2024-05-16 9:23:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!