亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uoutlooksync.pas

?? FMA is a free1 powerful phone editing tool allowing users to easily manage all of the personal data
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit uOutlookSync;

{
*******************************************************************************
* Descriptions: Outlook Contact Sync Unit
* $Source: /cvsroot/fma/fma/uOutlookSync.pas,v $
* $Locker:  $
*
* Todo:
*
* Change Log:
* $Log: uOutlookSync.pas,v $
*
}

interface

uses
  uContactSync, Outlook8, Classes, TntClasses;

type
  TOutlookContact = class(TContact)
  private
    FOutlookContact: ContactItem;
  protected
    function Exists: Boolean; override;
  public
    property OutlookContact: ContactItem read FOutlookContact write FOutlookContact;
  end;

  TOutlookContactFieldMapper = class(TContactFieldMapper)
  private
    FOutlookContact: ContactItem;
  protected
    function GetVariant(Field: String): Variant; override;
    procedure SetVariant(Field: String; const Value: Variant); override;
  public
    constructor Create;

    property OutlookContact: ContactItem read FOutlookContact write FOutlookContact;
  end;

  TOutlookContactSource = class(TContactSource)
  private
    Outlook: OutlookApplication;
    NmSpace: NameSpace;
    FCategories: TStrings;
    FFolders: TStrings;
    FNewContactsFolder: String;
    FNewContactsFolderFolder: MAPIFolder;
    function InCategories(OutlookContact: ContactItem): Boolean;
    procedure SetCategories(const Value: TStrings);
    procedure SetFolders(const Value: TStrings);
    procedure SetNewContactsFolder(const Value: String);
  protected
    function GetName: String; override;
    function GetOutlookCategories: String;
    function ExtractQuotedStr(Str: String): String;
    procedure Read(Contact: TOutlookContact; OutlookContact: ContactItem);
    procedure Write(Contact: TContact; OutlookContact: ContactItem);
  public
    constructor Create;
    destructor Destroy; override;

    function New: TContact; override;
    function Add(Value: TContact): TContact; override;
    procedure Update(Contact, Value: TContact); override;
    procedure Delete(Contact: TContact); override;

    procedure Load; override;

    property Categories: TStrings read FCategories write SetCategories;
    property Folders: TStrings read FFolders write SetFolders;
    property NewContactsFolder: String read FNewContactsFolder write SetNewContactsFolder;
  end;

implementation

uses
  gnugettext, gnugettexthelpers, uLogger, uConnprogress, uThreadSafe,
  SysUtils, TntSysUtils, Forms, TntForms, ActiveX, Windows;

// Innerfuse Pascal Script III function
var
  DispPropertyPut: Integer = DISPID_PROPERTYPUT;

function IDispatchInvoke(Self: IDispatch; PropertySet: Boolean; const Name: String; const Par: array of Variant): Variant;
var
  Param: Word;
  i, ArgErr: Longint;
  DispatchId: Longint;
  DispParam: TDispParams;
  ExceptInfo: TExcepInfo;
  aName: PWideChar;
  WSFreeList: TList;
begin
  FillChar(ExceptInfo, SizeOf(ExceptInfo), 0);
  aName := StringToOleStr(Name);
  try
    if Self = nil then
      raise Exception.Create('NIL Interface Exception');
    if Self.GetIDsOfNames(GUID_NULL, @aName, 1, LOCALE_SYSTEM_DEFAULT, @DispatchId) <> S_OK then
      raise Exception.Create('Unknown Method');
  finally
    SysFreeString(aName);
  end;

  DispParam.cNamedArgs := 0;
  DispParam.rgdispidNamedArgs := nil;
  DispParam.cArgs := (High(Par) + 1);

  if PropertySet then begin
    Param := DISPATCH_PROPERTYPUT;
    DispParam.cNamedArgs := 1;
    DispParam.rgdispidNamedArgs := @DispPropertyPut;
  end
  else
    Param := DISPATCH_METHOD or DISPATCH_PROPERTYGET;

  WSFreeList := TList.Create;
  try
    GetMem(DispParam.rgvarg, sizeof(TVariantArg) * (High(Par) + 1));
    FillCHar(DispParam.rgvarg^, sizeof(TVariantArg) * (High(Par) + 1), 0);
    try
      for i := 0 to High(Par) do begin
        if PVarData(@Par[i]).VType = varString then begin
          DispParam.rgvarg[i].vt := VT_BSTR;
          DispParam.rgvarg[i].bstrVal := StringToOleStr(Par[i]);
          WSFreeList.Add(DispParam.rgvarg[i].bstrVal);
        end
        else begin
          DispParam.rgvarg[i].vt := VT_VARIANT or VT_BYREF;
          New(POleVariant(DispParam.rgvarg[i].pvarVal));
          POleVariant(DispParam.rgvarg[i].pvarVal)^ := Par[i];
        end;
      end;
      i :=Self.Invoke(DispatchId, GUID_NULL, LOCALE_SYSTEM_DEFAULT, Param, DispParam, @Result, @ExceptInfo, @ArgErr);
      if not Succeeded(i) then begin
        if i = DISP_E_EXCEPTION then
          raise Exception.Create(ExceptInfo.bstrSource+': '+ExceptInfo.bstrDescription)
        else
          raise Exception.Create(SysErrorMessage(i));
      end;
    finally
      for i := 0 to High(Par) do begin
        if DispParam.rgvarg[i].vt = (VT_VARIANT or VT_BYREF) then begin
          if POleVariant(DispParam.rgvarg[i].pvarVal) <> nil then
            Dispose(POleVariant(DispParam.rgvarg[i].pvarVal));
        end;
      end;
      FreeMem(DispParam.rgvarg, sizeof(TVariantArg) * (High(Par) + 1));
    end;
  finally
    for i := WSFreeList.Count -1 downto 0 do
      SysFreeString(WSFreeList[i]);
    WSFreeList.Free;
  end;
end;

{ TOutlookContactSource }

function TOutlookContactSource.GetOutlookCategories: String;
var I: Integer;
begin
  Result := '';
  for I := 0 to Categories.Count - 1 do
    if Trim(Categories[I]) <> '' then begin
      if Result <> '' then Result := Result + '; ';
      Result := Result + Categories[I];
    end;
end;

function TOutlookContactSource.Add(Value: TContact): TContact;
var
  Contact: TOutlookContact;
begin
  Contact := New as TOutlookContact;
  Contact.Clone(Value);
  Contact.LinkedContact := Value;
  Value.LinkedContact := Contact;
  Contacts.Add(Contact);

  if Assigned(FNewContactsFolderFolder) then
    Contact.OutlookContact := FNewContactsFolderFolder.Items.Add(olContactItem) as ContactItem
  else
    Contact.OutlookContact := Outlook.CreateItem(olContactItem) as ContactItem;
  Contact.OutlookContact.Categories := GetOutlookCategories;
  Write(Contact, Contact.OutlookContact);
  Contact.ID := Contact.OutlookContact.EntryID;

  Result := Contact;
end;

constructor TOutlookContactSource.Create;
begin
  inherited;
  FCategories := TStringList.Create;
  FCategories.Delimiter := ';';
  FFolders := TStringList.Create;

  FieldMapper := TOutlookContactFieldMapper.Create;

  Outlook := CoOutlookApplication.Create;
  NmSpace := Outlook.GetNamespace('MAPI'); // do not localize
//  NmSpace.Logon('', '', False, False);
end;

procedure TOutlookContactSource.Delete(Contact: TContact);
begin
  with Contact as TOutlookContact do begin
    OutlookContact.Delete;

    OutlookContact := nil;
  end;
end;

destructor TOutlookContactSource.Destroy;
begin
  FieldMapper.Free;
  FCategories.Free;
  FFolders.Free;
  
  inherited;
end;

function TOutlookContactSource.ExtractQuotedStr(Str: String): String;
var P: PChar;
begin
  P := PChar(Str);
  Result := AnsiExtractQuotedStr(P, '"');
  if Result = '' then Result := Str;
end;

function TOutlookContactSource.GetName: String;
begin
  Result := 'Outlook'; //TODO -cl10n: localize?
end;

function TOutlookContactSource.InCategories(OutlookContact: ContactItem): Boolean;
var Cats, Cat: String;
    P: Integer;
begin
  if Categories.Count > 0 then begin
    Result := False;
    Cats := OutlookContact.Categories;
    while Cats <> '' do begin
      P := Pos(';', Cats);
      if P = 0 then  // A propper Outlook Version check would be better
        P := Pos(',', Cats);  // Outlook 2003 uses , instead of ;
      if P = 0 then
        P := Length(Cats) + 1;

      Cat := Trim(Copy(Cats, 1, P - 1));
      System.Delete(Cats, 1, P);

      Result := Categories.IndexOf(Cat) <> - 1;
      if Result then Break;
    end;
  end
  else
    Result := True;
end;

procedure TOutlookContactSource.Load;
var j: Integer;
    Folder: MAPIFolder;
    dlg: TfrmConnect;
  procedure LoadFolder(Folder: MAPIFolder);
  var I: Integer;
      OutlookContact: ContactItem;
      Contact: TOutlookContact;
      Count, CountNew, CountFiltered: Integer;
  begin
    Count := 0;
    CountNew := 0;
    CountFiltered := 0;
    //Folder.Items.IncludeRecurrences := False;
    if Assigned(dlg) then dlg.Initialize(Folder.Items.Count,
      WideFormat(_('Loading external contact folders')+sLineBreak+'(%s %s)',[Name,Folder.Name]));   
    for I := 1 to Folder.Items.Count do begin
      if Assigned(dlg) then dlg.IncProgress(1);
      if Supports(Folder.Items.Item(I), ContactItem, OutlookContact) then begin
        if InCategories(OutlookContact) then begin
          Contact := Contacts.FindByID(OutlookContact.EntryID) as TOutlookContact;

          if Assigned(Contact) then begin
            Contact.OutlookContact := OutlookContact;
          end
          else begin
            Contact := New as TOutlookContact;
            Contact.ID := OutlookContact.EntryID;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品在线免费播放| 91成人免费在线| 日韩电影在线观看一区| 亚洲另类色综合网站| 久久婷婷国产综合精品青草| 欧美一区在线视频| 91精品国产品国语在线不卡| 欧美老肥妇做.爰bbww| 在线观看视频一区二区| 91黄色免费网站| 欧美亚洲综合网| 欧美群妇大交群中文字幕| 欧美肥妇bbw| 日韩亚洲欧美中文三级| 精品国产免费久久| 久久亚洲一区二区三区四区| 国产片一区二区三区| 国产精品视频一区二区三区不卡| 国产精品国产三级国产普通话蜜臀| 99久久久久久| 国产原创一区二区三区| 亚洲图片欧美一区| 国产网站一区二区| 国产精品久久久久久久久搜平片| 日本一区二区三区在线观看| 日韩一区日韩二区| 亚洲综合另类小说| 男人的天堂亚洲一区| 精品一区二区免费| 粉嫩一区二区三区在线看| voyeur盗摄精品| 欧洲视频一区二区| 在线播放91灌醉迷j高跟美女 | www.亚洲色图| 色诱亚洲精品久久久久久| 欧美色偷偷大香| 欧美第一区第二区| 亚洲欧洲日韩综合一区二区| 亚洲一区二区黄色| 国产主播一区二区| 色哟哟一区二区三区| 欧美日韩久久久| 在线亚洲免费视频| 久久精品一区二区三区av| 欧美激情自拍偷拍| 香蕉久久一区二区不卡无毒影院 | 久久精品国产秦先生| 成人国产精品免费观看视频| 欧美色爱综合网| 久久久久久久电影| 夜夜嗨av一区二区三区中文字幕| 免费成人av在线| 成人不卡免费av| 8x福利精品第一导航| 国产精品嫩草久久久久| 日本特黄久久久高潮| 97久久精品人人做人人爽50路| 欧美日韩国产一二三| 国产农村妇女毛片精品久久麻豆 | 九九精品一区二区| 色爱区综合激月婷婷| 日韩欧美一级二级| 国产成人av资源| 欧美一区二区在线视频| 综合电影一区二区三区 | 东方欧美亚洲色图在线| 欧美日韩精品欧美日韩精品一 | 日韩国产精品久久久久久亚洲| 成人免费黄色大片| 日韩精品一区二区三区四区| 亚洲精品视频一区| 国产高清不卡一区| 在线91免费看| 夜夜精品视频一区二区| 粉嫩av亚洲一区二区图片| 日韩欧美国产1| 亚洲成人一区在线| 91亚洲国产成人精品一区二三 | 亚洲h动漫在线| 日本高清不卡一区| 中文一区二区在线观看| 久久99久久99精品免视看婷婷 | 亚洲国产精品v| 国产一区在线观看视频| 欧美日韩国产中文| 亚洲激情av在线| www.久久精品| 日韩精品一二三| 8x福利精品第一导航| 亚洲高清视频的网址| 色综合一区二区| 日韩毛片一二三区| 成人精品在线视频观看| 欧美激情中文不卡| 国产成人午夜视频| 国产亚洲欧洲997久久综合| 狠狠久久亚洲欧美| 日韩无一区二区| 日本亚洲欧美天堂免费| 欧美视频在线播放| 亚洲成人先锋电影| 欧美丰满美乳xxx高潮www| 亚洲国产成人tv| 欧美群妇大交群中文字幕| 亚洲电影视频在线| 欧美久久久久久久久久| 亚洲一区二区三区国产| 精品视频在线免费看| 亚洲一区二区三区在线| 欧美日韩二区三区| 日韩av中文字幕一区二区三区| 欧美日韩一区不卡| 青青草视频一区| 欧美videos中文字幕| 亚洲精品国产精华液| 欧美日韩mp4| 91官网在线观看| 色综合色综合色综合| 91福利国产精品| 欧美性欧美巨大黑白大战| 91电影在线观看| 欧美人牲a欧美精品| 精品国产一区二区三区久久久蜜月 | 久久久久久久久久电影| 日韩一级大片在线| 久久99蜜桃精品| 亚洲精品一区在线观看| 韩国v欧美v亚洲v日本v| 国产精品美女久久久久久2018 | 久久精品一二三| 成人av免费在线播放| 一区二区三区中文在线观看| 欧美日韩免费在线视频| 日本aⅴ免费视频一区二区三区 | 欧美国产日韩a欧美在线观看| 丁香亚洲综合激情啪啪综合| 亚洲少妇30p| 欧美午夜精品久久久久久孕妇 | 91精品国产综合久久精品图片| 美女视频一区二区三区| 国产精品久久毛片a| 在线观看91精品国产入口| 美女精品一区二区| 日本一区二区高清| 色999日韩国产欧美一区二区| 一二三四区精品视频| 欧美日韩国产电影| 国产成人av一区二区三区在线观看| 国产精品成人免费| 欧美色图第一页| 亚洲女性喷水在线观看一区| 欧美一区欧美二区| 国产成人av在线影院| 亚洲精品高清在线观看| 欧美理论电影在线| 大胆欧美人体老妇| 亚洲国产视频在线| 26uuu国产一区二区三区| www.色综合.com| 日韩国产精品91| 国产欧美久久久精品影院| 欧美日韩激情一区二区三区| 久久精品噜噜噜成人88aⅴ| 国产精品剧情在线亚洲| 5858s免费视频成人| 国产不卡视频一区二区三区| 一色屋精品亚洲香蕉网站| 欧美自拍偷拍一区| 激情五月激情综合网| 亚洲色图20p| 欧美人牲a欧美精品| a亚洲天堂av| 三级精品在线观看| 国产精品的网站| 欧美高清性hdvideosex| 亚洲国产sm捆绑调教视频 | 精品免费视频.| 色综合久久中文综合久久牛| 日韩1区2区日韩1区2区| 欧美国产一区视频在线观看| 在线欧美一区二区| 国产精品影视网| 天堂午夜影视日韩欧美一区二区| 国产日产欧美一区二区三区| 精品久久国产老人久久综合| 在线免费av一区| 成人美女在线观看| 日本女优在线视频一区二区| 亚洲午夜av在线| 国产精品久久久久毛片软件| 欧美videos大乳护士334| 91亚洲午夜精品久久久久久| 成人综合在线视频| 美女网站在线免费欧美精品| 亚洲一区在线观看网站| 国产精品久久午夜| 精品国产一区二区精华| 欧美老女人在线| 91久久香蕉国产日韩欧美9色| 99精品1区2区|