69
How do I encode data as ICalendar format

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content do
	begin
		with Components.Add('VCALENDAR') do
		begin
			Properties.Add('VERSION','2.1').Parameters.Add('UNICODE',TObject(AxICalendar1.toICalendar[TObject(True),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBoolean]));
			Properties.Add('TEXT','This is just a bit of text to be encoded.');
			Properties.Add('BINARY',TObject(AxICalendar1.toICalendar['This is just a bit of text to be encoded.',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBinary]));
			with Components.Add('VEVENT') do
			begin
				Properties.Add('DTSTART','1/1/2001');
				Properties.Add('DTEND','1/2/2001 10:00:00 AM');
			end;
		end;
	end;
	OutputDebugString( Save() );
end
68
How do I get the occurrences between giving start/end margins

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( 'AsArray: ' );
	OutputDebugString( get_RecurRange('DTSTART=19970310;FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3','1/1/2001','1/1/2002') );
	OutputDebugString( 'AsString: ' );
	OutputDebugString( get_RecurRangeAsString('DTSTART=19970310;FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3','1/1/2001','1/1/2002') );
end
67
How do I get the value of specified part in the recurrence expression

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( 'FREQ: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurFREQ) );
	OutputDebugString( 'DTSTART: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurDTSTART) );
	OutputDebugString( 'UNTIL: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurUNTIL) );
	OutputDebugString( 'COUNT: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurCOUNT) );
	OutputDebugString( 'INTERVAL: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurINTERVAL) );
	OutputDebugString( 'WKST: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurWKST) );
	OutputDebugString( 'BYDAY: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYDAY) );
	OutputDebugString( 'BYMONTHDAY: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYMONTHDAY) );
	OutputDebugString( 'BYYEARDAY: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYYEARDAY) );
	OutputDebugString( 'BYWEEKNO: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYWEEKNO) );
	OutputDebugString( 'BYMONTH: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYMONTH) );
	OutputDebugString( 'BYSETPOS: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYSETPOS) );
	OutputDebugString( 'BYHOUR: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYHOUR) );
	OutputDebugString( 'BYMINUTE: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYMINUTE) );
	OutputDebugString( 'BYSECOND: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',EXICALENDARLib.RecurPartEnum.exRecurBYSECOND) );
end
66
How do I check if the recurrence expression is syntactically correct (method 2)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( '1.A) SyntaxError: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) );
	OutputDebugString( '1.B) SyntaxErrorInfo: ' );
	OutputDebugString( get_RecurPartValue('DTSTART=20151205;FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) );
	OutputDebugString( '2.A) SyntaxError: ' );
	OutputDebugString( get_RecurPartValue('FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxError) );
	OutputDebugString( '2.B) SyntaxErrorInfo: ' );
	OutputDebugString( get_RecurPartValue('FREQ=DAILY;BYDAY=MO',EXICALENDARLib.RecurPartEnum.exRecurSyntaxErrorInfo) );
end
65
How do I check if the recurrence expression is syntactically correct (method 1)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( '1. If negative, the expression is incorrect' );
	OutputDebugString( get_RecurCheck('DTSTART=20151205;FREQ=DAILY;BYDAY=MO','12/5/2015') );
	OutputDebugString( '2. If negative, the expression is incorrect' );
	OutputDebugString( get_RecurCheck('junk','1/1/2001') );
end
64
How do I check if a specified date match the giving recurrence

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( '12/5/2015' );
	OutputDebugString( get_RecurCheck('DTSTART=20151205;FREQ=DAILY;BYDAY=MO','12/5/2015') );
	OutputDebugString( '12/7/2015' );
	OutputDebugString( get_RecurCheck('DTSTART=20151205;FREQ=DAILY;BYDAY=MO','12/7/2015') );
end
63
Recur: The 2nd to last weekday of the month

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970929;FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2',TObject(12)) );
end
62
Recur: The 3rd instance into the month of one of Tuesday, Wednesday or Thursday, for the next 3 months

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970904;FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3',TObject(12)) );
end
61
Recur: The last work day of the month

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970805;FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1',TObject(12)) );
end
60
Recur: An example where the days generated makes a difference because of WKST (Sample 2)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU',TObject(12)) );
end
59
Recur: An example where the days generated makes a difference because of WKST (Sample 1)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970805T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO',TObject(12)) );
end
58
Recur: Every 20 minutes from 9:00 AM to 4:40 PM every day

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40',TObject(12)) );
end
57
Recur: Every hour and a half for 4 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=MINUTELY;INTERVAL=90;COUNT=4',TObject(12)) );
end
56
Recur: Every 15 minutes for 6 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=MINUTELY;INTERVAL=15;COUNT=6',TObject(12)) );
end
55
Recur: Every 3 hours from 9:00 AM to 5:00 PM on a specific day

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z',TObject(12)) );
end
54
Recur: Every four years, the first Tuesday after a Monday in November, forever (U.S. Presidential Election day)

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19961105T090000;FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8',TObject(12)) );
end
53
Recur: The first Saturday that follows the first Sunday of the month, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970913T090000;FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13',TObject(12)) );
end
52
Recur: Every Friday the 13th, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13',TObject(12)) );
end
51
Recur: Every Thursday, but only during June, July, and August, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970605T090000;FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8',TObject(12)) );
end
50
Recur: Every Thursday in March, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970313T090000;FREQ=YEARLY;BYMONTH=3;BYDAY=TH',TObject(12)) );
end
49
Recur: Monday of week number 20 (where the default start of the week is Monday), forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970512T090000;FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO',TObject(12)) );
end
48
Recur: Every 20th Monday of the year, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970101T090000;FREQ=YEARLY;BYDAY=20MO',TObject(12)) );
end
47
Recur: Every 3rd year on the 1st, 100th and 200th day for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970101T090000;FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200',TObject(12)) );
end
46
Recur: Every other year on January, February, and March for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970310T090000;FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3',TObject(12)) );
end
45
Recur: Yearly in June and July for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970610T090000;FREQ=YEARLY;COUNT=10;BYMONTH=6,7',TObject(12)) );
end
44
Recur: Every Tuesday, every other month

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=MONTHLY;INTERVAL=2;BYDAY=TU',TObject(12)) );
end
43
Recur: Every 18 months on the 10th thru 15th of the month for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970910T090000;FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15',TObject(12)) );
end
42
Recur: Monthly on the first and last day of the month for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970930T090000;FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1',TObject(12)) );
end
41
Recur: Monthly on the 2nd and 15th of the month for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15',TObject(12)) );
end
40
Recur: Monthly on the third to the last day of the month, forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970928T090000;FREQ=MONTHLY;BYMONTHDAY=-3',TObject(12)) );
end
39
Recur: Monthly on the second to last Monday of the month for 6 months

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970922T090000;FREQ=MONTHLY;COUNT=6;BYDAY=-2MO',TObject(12)) );
end
38
Recur: Every other month on the 1st and last Sunday of the month for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970907T090000;FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU',TObject(12)) );
end
37
Recur: Monthly on the 1st Friday until December 24, 1997

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970905T090000;FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR',TObject(12)) );
end
36
Recur: Monthly on the 1st Friday for ten occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970905T090000;FREQ=MONTHLY;COUNT=10;BYDAY=1FR',TObject(12)) );
end
35
Recur: Every other week on Tuesday and Thursday, for 8 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=WEEKLY;INTERVAL=2;COUNT=8;WKST=SU;BYDAY=TU,TH',TObject(12)) );
end
34
Recur: Every other week on Monday, Wednesday and Friday until December 24, 1997, but starting on Tuesday, September 2, 1997

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR',TObject(12)) );
end
33
Recur: Weekly on Tuesday and Thursday for 5 weeks

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH',TObject(12)) );
end
32
Recur: Weekly on Tuesday and Thursday for 5 weeks

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH',TObject(12)) );
end
31
Recur: Every other day - forever

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=DAILY;INTERVAL=2',TObject(12)) );
end
30
Recur: Daily until December 24, 1997

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=DAILY;UNTIL=19971224T000000Z',TObject(12)) );
end
29
Recur: Daily for 10 occurrences

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( get_RecurAllAsString('DTSTART=19970902T090000;FREQ=DAILY;COUNT=10',TObject(12)) );
end
28
How can I add a property of UTC offset type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('UTCOffset','+0100');
	end;
	OutputDebugString( Save() );
end
27
How can I add a property of URI type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('URI','http://www.exontrol.com');
	end;
	OutputDebugString( Save() );
end
26
How can I add a property of time type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Time1','12:00:00 PM');
		Properties.Add('Time2',TObject(AxICalendar1.toICalendar[TObject(0.5),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeTime]));
		with Properties.Add('Time3',Nil) do
		begin
			Value := TObject(0.5);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeTime;
		end;
	end;
	OutputDebugString( Save() );
end
25
How can I add a property of text/string type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Text1','A1');
		Properties.Add('Text2',TObject(AxICalendar1.toICalendar['A1',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeText]));
		with Properties.Add('Text3',Nil) do
		begin
			Value := 'A1';
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeText;
		end;
	end;
	OutputDebugString( Save() );
end
24
How can I find properties of recurence type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Recur','FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=SA,SU');
	end;
	p := Root.Properties.Item['Recur'];
	i := get_toICalendar(p.Value,p.GuessType);
	OutputDebugString( 'icalendar:' );
	OutputDebugString( i );
	OutputDebugString( 'all:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'') );
	OutputDebugString( 'FREQ:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'FREQ') );
	OutputDebugString( 'UNTIL:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'UNTIL') );
	OutputDebugString( 'COUNT:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'COUNT') );
	OutputDebugString( 'INTERVAL:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'INTERVAL') );
	OutputDebugString( 'BYSECOND:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYSECOND') );
	OutputDebugString( 'BYMINUTE:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYMINUTE') );
	OutputDebugString( 'BYHOUR:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYHOUR') );
	OutputDebugString( 'BYDAY:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYDAY') );
	OutputDebugString( 'BYMONTHDAY:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYMONTHDAY') );
	OutputDebugString( 'BYYEARDAY:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYYEARDAY') );
	OutputDebugString( 'BYWEEKNO:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYWEEKNO') );
	OutputDebugString( 'BYMONTH:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYMONTH') );
	OutputDebugString( 'BYSETPOS:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'BYSETPOS') );
	OutputDebugString( 'WKST:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'WKST') );
end
23
How can I add a property of recurrence type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Recur','FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU');
	end;
	OutputDebugString( Save() );
end
22
How can I find the duration in weeks, days, hours, minutes, seconds from a property of duration type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Period',TObject(AxICalendar1.valuesToICalendar['Start=#1/1/2001#;Duration=1',EXICALENDARLib.PropertyTypeEnum.exPropertyTypePeriod]));
	end;
	p := Root.Properties.Item['Period'];
	i := get_toICalendar(p.Value,p.GuessType);
	OutputDebugString( 'icalendar:' );
	OutputDebugString( i );
	OutputDebugString( 'all:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'') );
	OutputDebugString( 'start:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'Start') );
	OutputDebugString( 'end:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'End') );
	OutputDebugString( 'duration:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'Duration') );
	OutputDebugString( 'weeks:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'W') );
	OutputDebugString( 'days:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'D') );
	OutputDebugString( 'hour:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'H') );
	OutputDebugString( 'min:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'M') );
	OutputDebugString( 'sec:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'S') );
end
21
How can I add a property of period type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Period1',TObject(AxICalendar1.valuesToICalendar['Start=#1/1/2001#;Duration=1',EXICALENDARLib.PropertyTypeEnum.exPropertyTypePeriod]));
		Properties.Add('Period2',TObject(AxICalendar1.valuesToICalendar['Start=#1/1/2001#;End=#1/2/2001#',EXICALENDARLib.PropertyTypeEnum.exPropertyTypePeriod]));
		Properties.Add('Period3',TObject(AxICalendar1.valuesToICalendar['Duration=1;End=#1/2/2001#',EXICALENDARLib.PropertyTypeEnum.exPropertyTypePeriod]));
	end;
	OutputDebugString( Save() );
end
20
How can I add a property of integer type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Integer1',TObject(1));
		Properties.Add('Integer2',TObject(AxICalendar1.toICalendar[TObject(1),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeInteger]));
		with Properties.Add('Integer3',Nil) do
		begin
			Value := TObject(1);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeInteger;
		end;
	end;
	OutputDebugString( Save() );
end
19
How can I add a property of float type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Float1',TObject(1.5));
		Properties.Add('Float2',TObject(AxICalendar1.toICalendar[TObject(1.5),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeFloat]));
		with Properties.Add('Float3',Nil) do
		begin
			Value := TObject(1.5);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeFloat;
		end;
	end;
	OutputDebugString( Save() );
end
18
How do I get the type of the property

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Duration1',TObject(AxICalendar1.toICalendar[TObject(2.5),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration]));
		with Properties.Add('Duration2',Nil) do
		begin
			Value := TObject(2.5);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration;
		end;
	end;
	with Root.Properties.Item['Duration1'] do
	begin
		OutputDebugString( Name );
		OutputDebugString( 'Guess' );
		OutputDebugString( GuessType );
		OutputDebugString( Name );
		OutputDebugString( 'Type' );
		OutputDebugString( Type );
	end;
	with Root.Properties.Item['Duration2'] do
	begin
		OutputDebugString( Name );
		OutputDebugString( 'Guess' );
		OutputDebugString( GuessType );
		OutputDebugString( Name );
		OutputDebugString( 'Type' );
		OutputDebugString( Type );
	end;
end
17
How can I get values of the duration iCalendar format

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	OutputDebugString( 'all:' );
	OutputDebugString( get_valuesFromICalendar('P1D',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration,'') );
	OutputDebugString( 'duration:' );
	OutputDebugString( get_valuesFromICalendar('P1D',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration,'Duration') );
end
16
How can I find the duration in weeks, days, hours, minutes, seconds from a property of duration type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Duration',TObject(AxICalendar1.toICalendar[TObject(3.325),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration]));
	end;
	p := Root.Properties.Item['Duration'];
	i := get_toICalendar(p.Value,p.GuessType);
	OutputDebugString( 'icalendar:' );
	OutputDebugString( i );
	OutputDebugString( 'all:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'') );
	OutputDebugString( 'duration:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'Duration') );
	OutputDebugString( 'weeks:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'W') );
	OutputDebugString( 'days:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'D') );
	OutputDebugString( 'hour:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'H') );
	OutputDebugString( 'min:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'M') );
	OutputDebugString( 'sec:' );
	OutputDebugString( get_valuesFromICalendar(i,p.GuessType,'S') );
end
15
How can I add a property of duration type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Duration1',TObject(AxICalendar1.toICalendar[TObject(2.5),EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration]));
		with Properties.Add('Duration2',Nil) do
		begin
			Value := TObject(2.5);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration;
		end;
		Properties.Add('Duration3',TObject(AxICalendar1.valuesToICalendar['D=2;H=12',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDuration]));
	end;
	OutputDebugString( Save() );
end
14
How can I add a property of date-time type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('DateTime1','1/1/2001 12:00:00 PM');
		Properties.Add('DateTime2',TObject(AxICalendar1.toICalendar['1/1/2001',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDateTime]));
		with Properties.Add('DateTime3',Nil) do
		begin
			Value := '1/1/2001';
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDateTime;
		end;
	end;
	OutputDebugString( Save() );
end
13
How can I add a property of date type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Date1','1/1/2001');
		Properties.Add('Date2',TObject(AxICalendar1.toICalendar['1/1/2001',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDate]));
		with Properties.Add('Date3',Nil) do
		begin
			Value := '1/1/2001';
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeDate;
		end;
	end;
	OutputDebugString( Save() );
end
12
How can I add a property of Calendar User Address type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('caladdress1','mailto:support@exontrol.com');
		Properties.Add('caladdress2',TObject(AxICalendar1.toICalendar['mailto:support@exontrol.com',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeCalAddress]));
		with Properties.Add('caladdress3',Nil) do
		begin
			Value := 'mailto:support@exontrol.com';
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeCalAddress;
		end;
	end;
	OutputDebugString( Save() );
end
11
How can I add a property of boolean type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Boolean1',TObject(True));
		Properties.Add('Boolean2',TObject(AxICalendar1.toICalendar['TRUE',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBoolean]));
		with Properties.Add('Boolean3',Nil) do
		begin
			Value := TObject(0);
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBoolean;
		end;
	end;
	OutputDebugString( Save() );
end
10
How can I add a property of binary type

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		Properties.Add('Binary1',TObject(AxICalendar1.toICalendar['This is a bit of text converted to binary',EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBinary]));
		with Properties.Add('Binary2',Nil) do
		begin
			Value := 'This is a bit of text converted to binary';
			Type := EXICALENDARLib.PropertyTypeEnum.exPropertyTypeBinary;
		end;
	end;
	OutputDebugString( Save() );
end
9
How can I access the root element of the iCalendar format

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	Load('BEGIN:VCALENDAR\r\nVERSION:2.0\r\nEND:VCALENDAR');
	OutputDebugString( Root.Name );
	OutputDebugString( Root.Properties.Item['Version'].Value );
end
8
How can I get notified once the control loads a new component, property, when using Load or LoadFile methods

// AddComponent event - Occurs when a new component is added.
procedure TWinForm1.AxICalendar1_AddComponent(sender: System.Object; e: AxEXICALENDARLib._IICalendarEvents_AddComponentEvent);
begin
	with AxICalendar1 do
	begin
		OutputDebugString( e.newComponent );
	end
end;

// AddProperty event - Occurs when a new property is added.
procedure TWinForm1.AxICalendar1_AddProperty(sender: System.Object; e: AxEXICALENDARLib._IICalendarEvents_AddPropertyEvent);
begin
	with AxICalendar1 do
	begin
			OutputDebugString( e.newPropery );
	end
end;

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	FireEvents := True;
	Load('BEGIN:VCALENDAR\r\nVERSION:2.0\r\nEND:VCALENDAR');
end
7
How can I add a property with parameters

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		with Components.Add('VEVENT').Properties do
		begin
			Add('SUMMARY','Company Holiday Party').Parameters.Add('LANGUAGE','en-US');
			Add('DATE','1/1/2001');
		end;
	end;
	OutputDebugString( Save() );
end
6
How can I load iCalendar from a string

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	Load('BEGIN:VCALENDAR\r\nVERSION:2.0\r\nEND:VCALENDAR');
	OutputDebugString( Content.Components.Item[TObject(0)].Name );
end
5
How can I add VEVENT objects

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		with Properties do
		begin
			Add('Version','2.0');
			Add('PRODID','-//hacksw/handcal//NONSGML v1.0//EN');
		end;
		with Components.Add('VEVENT').Properties do
		begin
			Add('DTSTART','1/1/2001');
			Add('DTEND','1/2/2001');
			Add('SUMMARY','First Party');
		end;
		with Components.Add('VEVENT').Properties do
		begin
			Add('DTSTART','1/4/2001');
			Add('DTEND','1/5/2001');
			Add('SUMMARY','Second Party');
		end;
	end;
	OutputDebugString( Save() );
end
4
How can I save the control's content to iCalendar format, as a file
AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		with Properties do
		begin
			Add('Version','2.0');
			Add('PRODID','-//hacksw/handcal//NONSGML v1.0//EN');
		end;
		with Components.Add('VEVENT').Properties do
		begin
			Add('DTSTART','1/1/2001');
			Add('DTEND','1/2/2001');
			Add('SUMMARY','Bastille Day Party');
		end;
	end;
	SaveFile('c:/temp/test.ical');
end
3
How can I load the iCalendar format from a file

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	LoadFile('c:/temp/test.ical');
	OutputDebugString( Content.Components.Item['VCALENDAR'].Properties.Item['PRODID'].Value );
end
2
How do I export the control's content to iCalendar format

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR') do
	begin
		with Properties do
		begin
			Add('Version','2.0');
			Add('PRODID','-//hacksw/handcal//NONSGML v1.0//EN');
		end;
		with Components.Add('VEVENT').Properties do
		begin
			Add('DTSTART','1/1/2001');
			Add('DTEND','1/2/2001');
			Add('SUMMARY','Bastille Day Party');
		end;
	end;
	OutputDebugString( Save() );
end
1
How can I generate a VCALENDAR object

AxICalendar1 := (ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.ICalendar.1')) as EXICALENDARLib.ICalendar);
with AxICalendar1 do
begin
	with Content.Components.Add('VCALENDAR').Properties do
	begin
		Add('Version','2.0');
		Add('PRODID','-//hacksw/handcal//NONSGML v1.0//EN');
	end;
	OutputDebugString( Save() );
end