?? idvcard.pas
字號:
{ $HDR$}
{**********************************************************************}
{ Unit archived using Team Coherence }
{ Team Coherence is Copyright 2002 by Quality Software Components }
{ }
{ For further information / comments, visit our WEB site at }
{ http://www.TeamCoherence.com }
{**********************************************************************}
{}
{ $Log: 10417: IdVCard.pas
{
{ Rev 1.0 2002.11.12 10:59:38 PM czhower
}
unit IdVCard;
{*******************************************************}
{ }
{ Indy VCardObject TIdCard }
{ }
{ Copyright (C) 2000 Winshoes Working Group }
{ Original author J. Peter Mugaas }
{ 2000-May-06 }
{ Based on RFC 2425, 2426 }
{ }
{*******************************************************}
{
2002-Jan-20 DOn Siders
- Corrected spelling errors in Categories properties, members, methods
2000-07-24 Peter Mee
- Added preliminary embedded vCard checking
- Added QP Check & Decode of individual properties
}
interface
uses
Classes,
IdBaseComponent, IdGlobal;
{ TODO:
Agent property does not work and the current parsing stops whenever it
sees END:VCard meaning that the VCard will be truncated if AGENT is
used to embed a VCard.
I omitted a property for spelling out a sound. Appearently VCard 2.1
permitted a charactor representation of sound in addition to an embedded
sound, and a URL.
I am not sure how well the KEY property works. That is used for
embedding some encryption keys into a VCard such as PGP public-key or
something from Versign.
VCard does not have any Quoted Printable decoding or Base64 encoding
and decoding. Some routines may have to be changed to accomodate
this although I don't have the where-with-all.
VCards can not be saved. }
type
{This contains the object for Sound, Logo, Photo, Key, and Agent property}
TIdVCardEmbeddedObject = class (TPersistent)
protected
FObjectType : String;
FObjectURL : String;
FBase64Encoded : Boolean;
FEmbeddedData : TStrings;
{Embeded data property set method}
procedure SetEmbeddedData(const Value: TStrings);
public
Constructor Create;
Destructor Destroy; override;
published
{this indicates the type of media such as the file type or key type}
property ObjectType : String read FObjectType write FObjectType;
{pointer to the URL where the object is located if it is NOT in this card
itself}
property ObjectURL : String read FObjectURL write FObjectURL;
{The object }
property Base64Encoded : Boolean read FBase64Encoded write FBase64Encoded;
{The data for the object if it is in the VCard. This is usually in an
encoded format such as BASE64 although some keys may not require encoding}
property EmbeddedData : TStrings read FEmbeddedData write SetEmbeddedData;
end;
{VCard business information}
TIdVCardBusinessInfo = class ( TPersistent )
protected
FTitle : String;
FRole : String;
FOrganization : String;
FDivisions : TStrings;
procedure SetDivisions(Value : TStrings);
public
constructor Create;
destructor Destroy; override;
published
{The organization name such as XYZ Corp. }
property Organization : String read FOrganization write FOrganization;
{ The divisions in the orginization the person is in - e.g.
West Virginia Office, Computing Service}
property Divisions: TStrings read FDivisions write SetDivisions;
{The person's formal title in the business such
"Director of Computing Services"}
property Title : String read FTitle write FTitle;
{The person's role in an organization such as "system administrator" }
property Role : String read FRole write FRole;
end;
{Geographical information such as Latitude/Longitude and Time Zone}
TIdVCardGeog = class ( TPersistent )
protected
FLatitude : Real;
FLongitude : Real;
FTimeZoneStr : String;
published
{Geographical latitude the person is in}
property Latitude : Real read FLatitude write FLatitude;
{Geographical longitude the person is in}
property Longitude : Real read FLongitude write FLongitude;
{The time zone the person is in}
property TimeZoneStr : String read FTimeZoneStr write FTimeZoneStr;
end;
TIdPhoneAttributes = set of
( tpaHome, tpaVoiceMessaging, tpaWork, tpaPreferred, tpaVoice, tpaFax,
tpaCellular, tpaVideo, tpaBBS, tpaModem, tpaCar, tpaISDN, tpaPCS, tpaPager);
{ This encapsolates a telephone number }
TIdCardPhoneNumber = class ( TCollectionItem )
protected
FPhoneAttributes: TIdPhoneAttributes;
FNumber : String;
public
procedure Assign(Source: TPersistent); override;
published
{This is a descriptor for the phone number }
property PhoneAttributes: TIdPhoneAttributes
read FPhoneAttributes write FPhoneAttributes;
{ the telephone number itself}
property Number : String read FNumber write FNumber;
end;
{Since a person can have more than one address, we put them into this
collection}
TIdVCardTelephones = class ( TOwnedCollection )
protected
function GetItem ( Index: Integer ) : TIdCardPhoneNumber;
procedure SetItem ( Index: Integer; const Value: TIdCardPhoneNumber );
public
constructor Create ( AOwner : TPersistent ); reintroduce;
function Add: TIdCardPhoneNumber;
property Items [ Index: Integer ] : TIdCardPhoneNumber read GetItem write
SetItem; default;
end;
{This encapsulates a person's address} {Do not Localize}
TIdCardAddressAttributes = set of ( tatHome, tatDomestic, tatInternational, tatPostal,
tatParcel, tatWork, tatPreferred );
TIdCardAddressItem = class ( TCollectionItem )
protected
FAddressAttributes : TIdCardAddressAttributes;
FPOBox : String;
FExtendedAddress : String;
FStreetAddress : String;
FLocality : String;
FRegion : String;
FPostalCode : String;
FNation : String;
public
procedure Assign(Source: TPersistent); override;
published
{ attributes for this address such as Home or Work, postal, parcel, etc.}
property AddressAttributes : TIdCardAddressAttributes read
FAddressAttributes write FAddressAttributes;
{ This is the P. O. Box for an address}
property POBox : String read FPOBox write FPOBox;
{ This could be something such as an Office identifier for a building or
an appartment number }
property ExtendedAddress : String read FExtendedAddress write FExtendedAddress;
{This is the streat address such as "101 Sample Avenue" }
property StreetAddress : String read FStreetAddress write FStreetAddress;
{ This is a city or town (e.g. Chicago, New York City, Montreol }
property Locality : String read FLocality write FLocality;
{ This is the political subdivision of a nation such as a Providence in Canda - Quebec,
a State in US such as "West Virginia", or a county in England such as "Kent"}
property Region : String read FRegion write FRegion;
{ This is the postal code for the locality such as a ZIP Code in the US }
property PostalCode : String read FPostalCode write FPostalCode;
{ This is the nation such as Canada, U.S.A., Mexico, Russia, etc }
property Nation : String read FNation write FNation;
end;
{Since a person can have more than one address, we put them into this collection}
TIdVCardAddresses = class ( TOwnedCollection )
protected
function GetItem ( Index: Integer ) : TIdCardAddressItem;
procedure SetItem ( Index: Integer; const Value: TIdCardAddressItem );
public
constructor Create ( AOwner : TPersistent ); reintroduce;
function Add: TIdCardAddressItem;
property Items [ Index: Integer ] : TIdCardAddressItem read GetItem write
SetItem; default;
end;
{This type holds a mailing label }
TIdVCardMailingLabelItem = class ( TCollectionItem )
private
FAddressAttributes : TIdCardAddressAttributes;
FMailingLabel : TStrings;
procedure SetMailingLabel(Value : TStrings);
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
{ attributes for this mailing label such as Home or Work, postal, parcel,
etc.}
property AddressAttributes : TIdCardAddressAttributes read
FAddressAttributes write FAddressAttributes;
{ The mailing label itself}
property MailingLabel : TStrings read FMailingLabel write SetMailingLabel;
end;
{This type holds the }
TIdVCardMailingLabels = class ( TOwnedCollection )
protected
function GetItem ( Index: Integer ) : TIdVCardMailingLabelItem;
procedure SetItem ( Index: Integer; const Value: TIdVCardMailingLabelItem );
public
constructor Create ( AOwner : TPersistent ); reintroduce;
function Add : TIdVCardMailingLabelItem;
property Items [ Index: Integer ] : TIdVCardMailingLabelItem read GetItem write SetItem; default;
end;
{ This type is used to indicate the type E-Mail indicated in the VCard
which can be of several types }
TIdVCardEMailType = ( ematAOL, {America On-Line}
ematAppleLink, {AppleLink}
ematATT, { AT&T Mail }
ematCIS, { CompuServe Information Service }
emateWorld, { eWorld }
ematInternet, {Internet SMTP (default)}
ematIBMMail, { IBM Mail }
ematMCIMail, { Indicates MCI Mail }
ematPowerShare, { PowerShare }
ematProdigy, { Prodigy information service }
ematTelex, { Telex number }
ematX400 ); { X.400 service }
{This object encapsolates an E-Mail address in a TCollection}
TIdVCardEMailItem = class (TCollectionItem)
protected
FEMailType : TIdVCardEMailType;
FPreferred : Boolean;
FAddress : String;
public
constructor Create(Collection: TCollection); override;
{ This is the type of E-Mail address which defaults to Internet }
procedure Assign(Source: TPersistent); override;
published
property EMailType : TIdVCardEMailType read FEMailType write FEMailType;
{ Is this the person's prefered E-Mail address? } {Do not Localize}
property Preferred : Boolean read FPreferred write FPreferred;
{ The user's E-Mail address itself } {Do not Localize}
property Address : String read FAddress write FAddress;
end;
TIdVCardEMailAddresses = class ( TOwnedCollection )
protected
function GetItem ( Index: Integer ) : TIdVCardEMailItem;
procedure SetItem ( Index: Integer; const Value: TIdVCardEMailItem );
public
constructor Create ( AOwner : TPersistent ); reintroduce;
function Add: TIdVCardEMailItem;
property Items [ Index: Integer ] : TIdVCardEMailItem read GetItem write SetItem; default;
end;
TIdVCardName = class (TPersistent)
protected
FFirstName : String;
FSurName : String;
FOtherNames : TStrings;
FPrefix : String;
FSuffix : String;
FFormattedName : String;
FSortName : String;
FNickNames : TStrings;
procedure SetOtherNames(Value : TStrings);
procedure SetNickNames(Value : TStrings);
public
Constructor Create;
destructor Destroy; override;
published
{This is the person's first name, in the case of "J. Peter Mugaas",
this would be "J."}
property FirstName : String read FFirstName write FFirstName;
{This is the person's last name, in the case of "J. Peter Mugaas",
this would be "Mugaas"}
property SurName : String read FSurName write FSurName;
{This is a place for a middle name and some other names such as a woman's
maiden name. In the case of "J. Peter Mugaas", this would be "Peter".}
property OtherNames : TStrings read FOtherNames write SetOtherNames;
{This is a properly formatted name which was listed in the VCard}
property FormattedName : String read FFormattedName write FFormattedName;
{This is a prefix added to a name such as
"Mr.", "Dr.", "Hon.", "Prof.", "Reverend", etc.}
property Prefix : String read FPrefix write FPrefix;
{This is a suffix added to a name such as
"Ph.D.", "M.D.", "Esq.", "Jr.", "Sr.", "III", etc.}
property Suffix : String read FSuffix write FSuffix;
{The string used for sorting a name. It may not always be the person's last
name}
property SortName : String read FSortName write FSortName;
{ Nick names which a person may have such as "Bill" or "Billy" for Wiliam.}
property NickNames : TStrings read FNickNames write SetNickNames;
end;
TIdVCard = class ( TIdBaseComponent )
private
protected
FComments : TStrings;
FCategories : TStrings;
FBusinessInfo : TIdVCardBusinessInfo;
FGeography : TIdVCardGeog;
FFullName : TIdVCardName;
FRawForm : TStrings;
FURLs : TStrings;
FEMailProgram : String;
FEMailAddresses : TIdVCardEMailAddresses;
FAddresses : TIdVCardAddresses;
FMailingLabels : TIdVCardMailingLabels;
FTelephones : TIdVCardTelephones;
FVCardVersion : Real;
FProductID : String;
FUniqueID : String;
FClassification : String;
FLastRevised : TDateTime;
FBirthDay : TDateTime;
FPhoto : TIdVCardEmbeddedObject;
FLogo : TIdVCardEmbeddedObject;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -