【问题标题】:Displaying Outlook Address book in Delphi XE app:在 Delphi XE 应用程序中显示 Outlook 通讯簿:
【发布时间】:2011-12-13 19:15:18
【问题描述】:

我有一个 Delphi XE 应用程序,我想从我的 Delphi 应用程序中弹出 Outlook 使用的通讯簿对话框 - 我假设有 COM 类来支持这个?完成这项工作的最佳方法是什么?平台是带有 Outlook 2010 的 Win7-64。

TIA

【问题讨论】:

    标签: delphi com outlook delphi-xe outlook-2010


    【解决方案1】:

    免责声明:通过 COM 绝对可以做到这一点,但 Outlook 会显示警告,提示第三方应用程序正在访问地址簿(这是理所当然的)。如果您想避免这些警告,您可以从 Outlook 加载项中运行代码,使用 MAPI,或使用 Outlook Redemption,它基本上是 MAPI 的高级包装器,感觉就像 Outlook 对象模型。

    Outlook 对象模型提供了SelectNamesDialog 对话框来显示通讯簿。它是高度可配置的,您也可以使用自定义地址集对其进行初始化。

    作为一个小例子,这里有一些在多选模式下弹出地址簿的代码。为简洁起见,它使用后期绑定(OleVariants)。您可能希望在生产代码中使用早期绑定。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      application: OleVariant;
      dialog: OleVariant;
      i: Integer;
      recipients: String;
      recipient: OleVariant;
    
    begin
      application := createOleObject( 'Outlook.Application' );
    
      // Obtain the dialog
      dialog := application.session.getSelectNamesDialog;
    
      // Only show the a single 'add' field, multiselect
      dialog.setDefaultDisplayMode( 6 ); // 6 = olDefaultDelegates
    
      // Display the dialog
      dialog.display;
    
      // Display selection
      recipients := '';
      for i := 1 to dialog.recipients.count do
      begin
          recipient := dialog.recipients.item( i );
    
          recipients := recipients + recipient.name + #13#10;
      end;
    
      showMessage( recipients );
    end;
    

    【讨论】:

    • 感谢您提供详细信息 - 不清楚 MAPI 是不是与 Outlook 对象模型不同的方法 - 在 Office/Exchange 集成等方面没有跟上速度。
    【解决方案2】:

    要执行此类操作,您需要支持扩展 MAPI 接口。

    这是一个在 Win7-64 Outlook-2010 上支持此功能的组件的链接。

    Easy MAPI

    支持地址簿对话框的执行。

    【讨论】:

    • +1 - 我可能最终会使用 Easy MAPI,但我指出了另一个答案,因为@Paul-Jan 解释了不同的选项等。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多