unit DemoBasicMain; //if you want accept printing you need define PRINTING directive //{$DEFINE PRINTING} interface {$I ..\cxVer.inc} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, cxControls, cxLookAndFeels, ActnList, ImgList, Menus, ComCtrls, StdCtrls, cxStyles, cxGraphics, cxEdit, cxScheduler, cxSchedulerCustomControls, cxSchedulerCustomResourceView, cxSchedulerStorage, cxSchedulerDayView, cxSchedulerDateNavigator, ExtCtrls, cxExportSchedulerLink, cxSchedulerWeekView {$IFDEF PRINTING} , dxPSCore, dxPScxScheduler2Lnk{$ENDIF}, cxSchedulerTimeGridView, cxSchedulerUtils, cxSchedulerYearView; type TDemoBasicMainForm = class(TForm) mmMain: TMainMenu; miAbout: TMenuItem; miFile: TMenuItem; miExit: TMenuItem; lbDescrip: TLabel; miLookFeel: TMenuItem; Kind1: TMenuItem; miFlat: TMenuItem; miStandard: TMenuItem; miUltraFlat: TMenuItem; miNativeStyle: TMenuItem; miView: TMenuItem; Office111: TMenuItem; miViewDateNavigator: TMenuItem; miControlBox: TMenuItem; miViewposition: TMenuItem; miAtLeft: TMenuItem; miAtRight: TMenuItem; Scheduler: TcxScheduler; miDay1: TMenuItem; miWeek1: TMenuItem; miMonth1: TMenuItem; miWorkweek: TMenuItem; miGotoDate: TMenuItem; pnlControls: TPanel; Memo1: TMemo; StatusBar: TStatusBar; Timer1: TTimer; Resources1: TMenuItem; GroupBy1: TMenuItem; miGroupByNone: TMenuItem; miGroupByResources: TMenuItem; miGroupByDate: TMenuItem; Resourcelayout1: TMenuItem; Exportto1: TMenuItem; Outlook1: TMenuItem; Outlook2: TMenuItem; Excel1: TMenuItem; Html1: TMenuItem; Xml1: TMenuItem; Separator2: TMenuItem; ext1: TMenuItem; SaveDialog: TSaveDialog; Separator1: TMenuItem; miTimeGrid1: TMenuItem; miYear1: TMenuItem; N4: TMenuItem; miResPerPage: TMenuItem; miWorktimeonly: TMenuItem; miAllDayContainer: TMenuItem; Alwaysshoweventtime1: TMenuItem; Displayminutesontimeruler1: TMenuItem; miSingleColumn: TMenuItem; miOneResPerPage: TMenuItem; miTwoResPerPage: TMenuItem; miThreeResPerPage: TMenuItem; miAllResPerPage: TMenuItem; miSeparator: TMenuItem; miTimeWorktimeonly: TMenuItem; Alldayeventsonly1: TMenuItem; miCompressweekends: TMenuItem; miWeekCompressWeekends: TMenuItem; Options1: TMenuItem; miDay: TMenuItem; miWeek: TMenuItem; miMonth: TMenuItem; miTimeGrid: TMenuItem; miYear: TMenuItem; Outlooksynchronization1: TMenuItem; miEventsOpt: TMenuItem; miIntersection: TMenuItem; miSharing: TMenuItem; procedure FileExitExecute(Sender: TObject); procedure LookAndFeelChange(Sender: TObject); procedure miViewDateNavigatorClick(Sender: TObject); procedure ViewClick(Sender: TObject); procedure ViewModeClick(Sender: TObject); procedure ViewPositionClick(Sender: TObject); procedure miAboutClick(Sender: TObject); procedure miGotoDateClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Resourcelayout1Click(Sender: TObject); procedure miGroupByClick(Sender: TObject); procedure ExportToClick(Sender: TObject); procedure SyncClick(Sender: TObject); procedure miResCountClick(Sender: TObject); procedure miTimeWorktimeonlyClick(Sender: TObject); procedure miDaySettingsClick(Sender: TObject); procedure miWeekViewClick(Sender: TObject); procedure miCompressweekendsClick(Sender: TObject); procedure AlldayeventsonlyClick(Sender: TObject); procedure miSharingClick(Sender: TObject); procedure miIntersectionClick(Sender: TObject); procedure miWeekCompressWeekendsClick(Sender: TObject); protected AnchorDate: TDateTime; {$IFDEF PRINTING} ComponentPrinter: TdxComponentPrinter; ReportLink: TcxSchedulerReportLink; procedure OnPrintClick(Sender: TObject); {$ENDIF} procedure CreateEventObject(AAllDayEvent, ARandomResource: Boolean); procedure GenerateRandomEvents(ACount: Integer; ARandomResource: Boolean = False); function GetRandomCaption: string; function GetRandomDate: TDateTime; function GetRandomLabelColor: TColor; function GetRandomResourceID: Variant; function GetRandomState: Integer; function GetSyncIDField: TcxCustomSchedulerStorageField; virtual; procedure OnNewEvent(AEvent: TcxSchedulerEvent; AIndex: Integer); virtual; public {$IFDEF PRINTING} constructor Create(AOwner: TComponent); override; destructor Destroy; override; {$ENDIF} end; var DemoBasicMainForm: TDemoBasicMainForm; StartIndexes: array[0..21] of Integer = (0, 12, 30, 44, 58, 80, 90, 106, 126, 157, 174, 196, 208, 220, 226, 234, 238, 242, 249, 260, 267, 272); EventsCount: array[0..21] of integer = (12, 18, 14, 14, 22, 10, 16, 20, 31, 17, 22, 12, 12, 6, 8, 4, 4, 7, 11, 7, 5, 8); SportEvents: array[0..279] of string = ('Basketball Qualifying - Men', 'Basketball Qualifying - Women', 'Basketball First Group Phase - Men', 'Basketball First Group Phase - Women', 'Basketball Quarterfinals - Men', 'Basketball Quarterfinals - Women', 'Basketball Semifinals - Men', 'Basketball Semifinals - Women', 'Basketball Places 3/4 - Men', 'Basketball Places 3/4 - Women', 'Basketball Finals - Men', 'Basketball Finals - Women', 'Lamon Brewster (32-2) vs. Luan Krasniqi (28-1-1) (WBO heavyweight belt)', '(PPV) Antonio Tarver (23-3) vs. Roy Jones (49-3) (IBO light heavyweight belt)', '(Showtime) James Toney (68-4-2) vs. Dominick Guinn (25-2-1)', 'Nicolay Valuev (41-0) vs. TBA', 'Danilo Haussler (25-3) vs. TBA', 'Cengiz Koc (22-1) vs. TBA', '(PPV) Diego Corrales (40-2) vs. Jose Luis Castillo (52-7-1)', '(WBC and WBO lightweight belts) (PPV) Carlos Hernandez vs. Bobby Pacquiao', '(PPV) Jorge Arce vs. Hussein Hussein', 'Vince Philips (47-9-1) vs. Reynaldo Pelonia (35-21-3)', 'Kili Madrid (6-0-1) vs. Donny Fosmire (10-7)', 'Nelson Zepeda (1-0-1) vs. Kaleo Padilla (0-0)', 'Justin Mercado (1-1) vs. Waldo Rojas (0-0)', 'Illima Vicente (0-0) vs. Jenny Houts (0-0)', 'Tomasz Adamek (29-0) vs. Thomas Ulrich (28-1) (WBC light heavyweight belt)', '(Showtime) Jeff Lacy (20-0) vs. Joe Calzaghe (39-0) (IBF, IBO and WBO super middleweight belts)', 'Jermain Taylor vs. Bernard Hopkins', 'Ronald "Winky" Wright vs. TBA', 'Australian Open', 'Pacific Life Open', 'NASDAQ-100 Open', 'Tennis Masters Monte Carlo', 'Telecom Italia Masters Roma', 'Tennis Masters Hamburg', 'Roland Garros', 'Wimbledon', 'Tennis Masters Montreal', 'Western and Southern Financial Group Masters', 'US Open', 'Tennis Masters Madrid', 'BNP Paribas Masters', 'Tennis Masters Cup', 'Weightlifting 48 Kg - Women - Final', 'Weightlifting 56 Kg - Men - Final', 'Weightlifting 53 Kg - Women - Final', 'Weightlifting 62 Kg - Men - Final', 'Weightlifting 63 Kg - Women - Final', 'Weightlifting 69 Kg - Men - Final', 'Weightlifting 69 Kg - Women - Final', 'Weightlifting 77 Kg - Men - Final', 'Weightlifting 75 Kg - Women - Final', 'Weightlifting 75kg - Women - Final', 'Weightlifting 85 Kg - Men - Final', 'Weightlifting 94 Kg - Men - Final', 'Weightlifting 105 Kg - Men - Final', 'Weightlifting 105kg - Men - Final', 'Sabre - Men - 1st Round', 'Sabre - Men - Round 2', 'Sabre - Men - 3rd Round', 'Sabre - Men - Quarter final', 'Sabre - Men - Semi-finals', 'Sabre - Men - Final', 'Epee - Women - 1st Round', 'Epee - Women - Round 2', 'Epee - Women - 3rd Round', 'Epee - Women - Quarter final', 'Epee - Women - Semi-finals', 'Epee - Women - Final', 'Epee - Women/Team - 1st Round', 'Epee - Women/Team - Quarter final', 'Epee - Women/Team - Semi-finals', 'Epee - Women/Team - Final', 'Foil - Men - 1st Round', 'Foil - Men - Round 2', 'Foil - Men - 3rd Round', 'Foil - Men - Quarter final', 'Foil - Men - Semi-finals', 'Foil - Men - Final', 'Soccer 1st Round - *Men''s Preliminaries - Men', 'Soccer 1st Round - *Women''s Preliminaries - Women', 'Soccer Quarter final - *Men''s Quarterfinal - Men', 'Soccer Quarter final - *Women''s Quarterfinal - Women', 'Soccer Semi-finals - *Women''s Semifinal - Men', 'Soccer Semi-finals - *Women''s Semifinal - Women', 'Soccer places 3/4 - *Men''s Bronze Medal Match - Men', 'Soccer places 3/4 - *Women''s Bronze Medal Match - Women', 'Soccer Final - *Men''s Gold Medal Match - Men', 'Soccer Final - *Women''s Gold Medal Match - Women', 'Men - Qualifying', 'Women - Qualifying', 'Men/Team - Final', 'Women/Team - Final', 'Individual All-Around - Men - Final', 'Individual All-Around - Women - Final', 'Floor Exercise - Men - Final', 'Vault - Women - Final', 'Uneven Bars - Women - Final', 'Pommel Horse - Men - Final', 'Rings - Men - Final', 'Vault - Men - Final', 'Beam - Women - Final', 'Parallel Bars - Men - Final', 'Floor Exercise - Women - Final', 'Horizontal Bar - Men - Final', 'Slalom C1 - Men - Heats', 'Slalom C1 - Men - Heats', 'Slalom C1 - Men - Semi-finals', 'Slalom C1 - Men - Final', 'Slalom C2 - Men - Heats', 'Slalom C2 - Men - Heats', 'Slalom C2 - Men - Semi-finals', 'Slalom C2 - Men - Final', 'Flatwater C1 - 1000m - Men - Heats', 'Flatwater C2 - 1000m - Men - Heats', 'Flatwater C1 - 500m - Men - Heats', 'Flatwater C2 - 500m - Men - Heats', 'Flatwater C1 - 1000m - Men - Semi-finals', 'Flatwater C2 - 1000m - Men - Semi-finals', 'Flatwater C1 - 500m - Men - Semi-finals', 'Flatwater C2 - 500m - Men - Semi-finals', 'Flatwater C1 - 1000m - Men - Final', 'Flatwater C2 - 1000m - Men - Final', 'Flatwater C1 - 500m - Men - Final', 'Flatwater C2 - 500m - Men - Final', 'Slalom K1 - Women - Heats', 'Slalom K1 - Women - Heats', 'Slalom K1 - Women - Semi-finals', 'Slalom K1 - Women - Final', 'Slalom K2 - Men - Heats', 'Slalom K2 - Men - Heats', 'Slalom K2 - Men - Semi-finals', 'Slalom K1 - Men - Final', 'Flatwater K1 - 1000m - Men - Heats', 'Flatwater K4 - 500m - Women - Heats', 'Flatwater K2 - 1000m - Men - Heats', 'Flatwater K4 - 1000m - Men - Heats', 'Flatwater K1 - 500m - Men - Heats', 'Flatwater K2 - 500m - Men - Heats', 'Flatwater K2 - 500m - Women - Heats', 'Flatwater K1 - 1000m - Men - Semi-finals', 'Flatwater K4 - 500m - Women - Semi-finals', 'Flatwater K2 - 1000m - Men - Semi-finals', 'Flatwater K4 - 1000m - Men - Semi-finals', 'Flatwater K1 - 500m - Men - Semi-finals', 'Flatwater K1 - 500m - Women - Semi-finals', 'Flatwater K2 - 500m - Men - Semi-finals', 'Flatwater K2 - 500m - Women - Semi-finals', 'Flatwater K1 - 1000m - Men - Final', 'Flatwater K4 - 500m - Women - Final', 'Flatwater K2 - 1000m - Men - Final', 'Flatwater K4 - 1000m - Men - Final', 'Flatwater K1 - 500m - Men - Final', 'Flatwater K1 - 500m - Women - Final', 'Flatwater K2 - 500m - Men - Final', 'Flatwater K2 - 500m - Women - Final', 'Greco-Roman 55kg - Men - Qualifying', 'Greco-Roman 66kg - Men - Qualifying', 'Greco-Roman 84kg - Men - Qualifying', 'Greco-Roman 120kg - Men - Qualifying', 'Greco-Roman 55kg - Men - Semi-finals', 'Greco-Roman 66kg - Men - Semi-finals', 'Greco-Roman 84kg - Men - Semi-finals', 'Greco-Roman 120kg - Men - Semi-finals', 'Greco-Roman 96kg - Men - Qualifying', 'Greco-Roman 55kg - Men - Final', 'Greco-Roman 66kg - Men - Final', 'Greco-Roman 84kg - Men - Final', 'Greco-Roman 120kg - Men - Final', 'Greco-Roman 55kg - Men - Play Off', 'Greco-Roman 66kg - Men - Play Off', 'Greco-Roman 84kg - Men - Play Off', 'Greco-Roman 120kg - Men - Play Off', 'Individual Eventing Dressage - 1st Day', 'Team Eventing Dressage - 1st Day', 'Individual Eventing Dressage - 2nd Day', 'Team Eventing Dressage - 2nd Day', 'Individual Eventing Cross Country - Final', 'Team Eventing Cross Country - Final', 'Team Eventing Jumping - Final', 'Individual Eventing Jumping - Qualifying', 'Individual Eventing Jumping - Final', 'Individual Dressage Grand Prix - 1st Day', 'Team Dressage Grand Prix - 1st Day', 'Individual Dressage Grand Prix - 2nd Day', 'Team Dressage Grand Prix - 2nd Day', 'Individual Jumping - Qualifying', 'Individual Dressage Grand Prix Special - Final', 'Team Jumping - Final', 'Individual Jumping - Qualifying', 'Individual Jumping - Qualifying', 'Team Jumping - Final', 'Individual Dressage Grand Prix Freestyle - Final', 'Individual Jumping - Final', 'Individual Jumping - Final', 'Men''s 470 - Race 01', 'Women''s 470 - Race 01', 'Men''s 470 - Race 02', 'Women''s 470 - Race 02', 'Finn - Race 1', 'Yngling - Race 1', 'Finn - Race 2', 'Yngling - Race 2', 'Laser - Race 1', 'Women''s Mistral - Race 01', 'Men''s Mistral - Race 02', '49er - Race 1', 'Men''s 400m Individual Medley - Heat 1', 'Men''s 400m Individual Medley - Heat 2', 'Women''s 100m Butterfly - Heat 1', 'Men''s 400m Freestyle - Heat 1', 'Women''s 400m Individual Medley - Heat 1', 'Women''s 400m Individual Medley - Heat 2', 'Men''s 100m Breaststroke - Heat 1', 'Men''s 100m Breaststroke - Heat 2', 'Women''s 4 x 100m Freestyle Relay - Heat 1', 'Women''s 4 x 100m Freestyle Relay - Heat 2', 'Women''s 100m Butterfly Semifinal 1', 'Women''s 4 x 100m Freestyle Relay Final', 'Women''s Synchronised 3m Springboard Final', 'Men''s Synchronised 3m Springboard Final', 'Women''s Synchronised 10m Platform Final', 'Men''s Synchronised 10m Platform Final', 'Women''s 10m Platform Preliminary', 'Men''s 10m Platform Semifinal', 'Men''s Preliminaries - Pool A Match 1 - Spain - Korea', 'Women''s Preliminaries - Pool A Match 1 - China - Hungary', 'Men''s Classification 11-12 Match 31 - Slovenia - Egypt', 'Women''s Classification 9-10 Match 21 - Greece - Angola', 'Men''s Classification 9-10 Match 32 - Brazil - Iceland', 'Women''s Quarterfinal Match 22 - Ukraine - Spain', 'Men''s Semifinal Match 40 - Germany - Russia', 'Women''s Semifinal Match 27 - France - Korea', 'Men - Qualifying', 'Women - Qualifying', 'Men/Team - Final', 'Women/Team - Final', 'Women''s 100m Round 1 - Heat 1', 'Men''s 100m Round 1 - Heat 1', 'Men''s 100m Semifinal 1', 'Women''s 100m Final', 'Men''s 10m Air Pistol Qualification', 'Men''s 10m Air Pistol Final', 'Women''s 10m Air Pistol Pre-event Training', 'Men''s 10m Air Pistol Medal Ceremony', 'Women''s 10m Air Pistol Qualification', 'Men''s 50m Pistol Qualification', 'Women''s 25m Pistol Final', 'Women''s Individual 1/32 Eliminations', 'Men''s Individual 1/32 Eliminations', 'Women''s Individual 1/16 Eliminations', 'Men''s Individual 1/16 Eliminations', 'Women''s Individual 1/8 Eliminations', 'Men''s Individual 1/8 Eliminations', 'Women''s Individual Quarterfinal 1', 'Men''s Individual Quarterfinal 1', 'Men''s Individual Semifinal 1', 'Men''s Individual Bronze Medal Match', 'Women''s Team Gold Medal Match', 'Men''s Road Race', 'Women''s Road Race', 'Women''s Individual Time Trial', 'Men''s Individual Time Trial', 'Women''s Sprint 1/8 Finals', 'Women''s Individual Pursuit Final', 'Men''s Sprint 1/8 Finals', 'Men''s Preliminaries - Group B - EGY - AUS', 'Women''s Classification 7th-8th - KAZ - CAN', 'Women''s Quarterfinal 02 - ITA - HUN', 'Women Bronze Medal Game', 'Men''s Semifinal 02', 'Women''s Preliminaries - Pool B Match 1 - CUB - GER', 'Men''s Preliminaries - Pool A Match 1 - SCG - POL', 'Women''s Quarterfinal 04 - JPN - CHN', 'Men''s Quarterfinal 03 - GRE - USA', 'Women''s Semifinal 02 - CUB - CHN', 'Men''s Semifinal 02 - USA - BRA', 'Women''s Gold Medal Match - RUS - CHN', 'Men''s Bronze Medal Match - RUS - USA'); MaxRandomPeriod: Integer = 60; implementation uses cxClasses, {$IFDEF DELPHI6} Variants, DateUtils, {$ENDIF} cxSchedulerDialogs, AboutDemoForm, cxSchedulerOutlookExchange; {$R *.dfm} {$IFDEF PRINTING} constructor TDemoBasicMainForm.Create(AOwner: TComponent); begin inherited Create(AOwner); ComponentPrinter := TdxComponentPrinter.Create(Self); ReportLink := ComponentPrinter.AddLink(Scheduler) as TcxSchedulerReportLink; miFile.Insert(2, NewLine); miFile.Insert(3, NewItem('Print...', ShortCut(Byte('P'), [ssCtrl]), False, True, OnPrintClick, 0, 'miPrint')); end; destructor TDemoBasicMainForm.Destroy; begin ComponentPrinter.Free; inherited Destroy; end; procedure TDemoBasicMainForm.OnPrintClick(Sender: TObject); const Note = 'Note: Printing functionality for the ExpressScheduler is only available if you own a copy of' + #13#10 + 'the ExpressPrinting System, which is sold separately.'; begin ShowMessage(Note); ReportLink.Preview(); end; {$ENDIF} procedure TDemoBasicMainForm.CreateEventObject( AAllDayEvent, ARandomResource: Boolean); var AIndex: Integer; ADate: TDateTime; AEvent: TcxSchedulerEvent; begin AEvent := Scheduler.Storage.CreateEvent; ADate := GetRandomDate; AEvent.Start := ADate; if not AAllDayEvent then AEvent.Finish := ADate + (Random(180) + 30) * MinuteToTime else begin AEvent.Finish := ADate + 1; AEvent.AllDayEvent := True; end; AEvent.State := GetRandomState; AEvent.LabelColor := EventLabelColors[Random(11)]; AIndex := Random(22); AEvent.Caption := SportEvents[StartIndexes[AIndex] + Random(EventsCount[AIndex])]; if ARandomResource then AEvent.ResourceID := GetRandomResourceID; OnNewEvent(AEvent, AIndex); end; procedure TDemoBasicMainForm.GenerateRandomEvents(ACount: Integer; ARandomResource: Boolean = False); var I: Integer; begin if Scheduler.Storage = nil then Exit; Scheduler.Storage.BeginUpdate; try Randomize; for I := 0 to ACount div 5 * 4 - 1 do CreateEventObject(False, ARandomResource); for I := 0 to ACount div 5 - 1 do CreateEventObject(True, ARandomResource); finally Scheduler.Storage.EndUpdate; end; end; function TDemoBasicMainForm.GetRandomCaption: string; var AIndex: Integer; begin AIndex := Random(22); Result := SportEvents[StartIndexes[AIndex] + Random(EventsCount[AIndex])] end; function TDemoBasicMainForm.GetRandomDate: TDateTime; begin Result := Date + Random(MaxRandomPeriod)*(Random(2) * 2 - 1) + Scheduler.OptionsView.WorkStart; if Trunc(Result) = Date then Result := Result + Random(10) * HourToTime else Result := Result + Random(24) * HourToTime; end; function TDemoBasicMainForm.GetRandomLabelColor: TColor; begin Result := EventLabelColors[Random(11)]; end; function TDemoBasicMainForm.GetRandomResourceID: Variant; begin Result := Null; if (Scheduler.Storage = nil) or (Scheduler.Storage.ResourceCount = 0) then Exit else if Scheduler.Storage.ResourceCount = 1 then Result := Scheduler.Storage.ResourceIDs[0] else Result := Scheduler.Storage.ResourceIDs[Random(Scheduler.Storage.ResourceCount)]; end; function TDemoBasicMainForm.GetRandomState: Integer; begin Result := Random(4); end; function TDemoBasicMainForm.GetSyncIDField: TcxCustomSchedulerStorageField; begin Result := Scheduler.Storage.GetFieldByName('SyncIDField'); end; procedure TDemoBasicMainForm.OnNewEvent( AEvent: TcxSchedulerEvent; AIndex: Integer); begin end; procedure TDemoBasicMainForm.FileExitExecute(Sender: TObject); begin Close; end; procedure TDemoBasicMainForm.LookAndFeelChange(Sender: TObject); begin if TMenuItem(Sender).Tag > 3 then begin Scheduler.LookAndFeel.NativeStyle := not Scheduler.LookAndFeel.NativeStyle; TMenuItem(Sender).Checked := Scheduler.LookAndFeel.NativeStyle; end else begin TMenuItem(Sender).Checked := True; Scheduler.LookAndFeel.Kind := TcxLookAndFeelKind(TMenuItem(Sender).Tag); Scheduler.LookAndFeel.NativeStyle := False; miNativeStyle.Checked := False; end; end; procedure TDemoBasicMainForm.miViewDateNavigatorClick(Sender: TObject); begin Scheduler.DateNavigator.Visible := miViewDateNavigator.Checked; end; procedure TDemoBasicMainForm.ViewClick(Sender: TObject); begin with TMenuItem(Sender) do begin Checked := not Checked; case Tag of 0: Scheduler.DateNavigator.Visible := Checked; 1: Scheduler.ControlBox.Visible := Checked; end; end; end; procedure TDemoBasicMainForm.ViewModeClick(Sender: TObject); begin if not Scheduler.ViewWeek.Active then AnchorDate := Scheduler.SelectedDays[0]; Scheduler.SelectDays([AnchorDate], TMenuItem(Sender).Tag in [0, 1]); case TMenuItem(Sender).Tag of 0: Scheduler.ViewDay.Active := True; 1: Scheduler.SelectWorkDays(Date); 2: Scheduler.ViewWeek.Active := True; 3: Scheduler.GoToDate(Scheduler.SelectedDays[0], vmMonth); 4: Scheduler.ViewTimeGrid.Active := True; 5: Scheduler.ViewYear.Active := True; end; end; procedure TDemoBasicMainForm.ViewPositionClick(Sender: TObject); begin with TMenuItem(Sender) do begin case Tag of 0: Scheduler.OptionsView.ViewPosition := vpLeft; 1: Scheduler.OptionsView.ViewPosition := vpRight; end; Checked := True; end; end; procedure TDemoBasicMainForm.miAboutClick(Sender: TObject); begin ShowAboutDemoForm; end; procedure TDemoBasicMainForm.miGotoDateClick(Sender: TObject); var ADate: TDateTime; AMode: TcxSchedulerViewMode; begin ADate := Scheduler.SelectedDays[0]; if cxShowGoToDateDialog(Scheduler, Scheduler.LookAndFeel, ADate, AMode) then Scheduler.GoToDate(ADate, AMode); end; procedure TDemoBasicMainForm.FormCreate(Sender: TObject); begin AnchorDate := Date; Resources1.Visible := Scheduler.Storage.ResourceCount > 0; miSharing.Visible := Resources1.Visible; Scheduler.SelectDays([Date - 1, Date, Date + 1], True); Height := 550; Width := 700; end; const LastCount: Integer = -1; procedure TDemoBasicMainForm.Timer1Timer(Sender: TObject); var ACount: Integer; const BarCaption = 'Data Storage contains %d events'; begin if csDestroying in ComponentState then Exit; if Scheduler.Storage <> nil then ACount := Scheduler.Storage.EventCount else ACount := 0; if LastCount <> ACount then begin LastCount := ACount; StatusBar.SimpleText := Format(BarCaption, [ACount]); end; end; procedure TDemoBasicMainForm.Resourcelayout1Click(Sender: TObject); begin if Scheduler.Storage <> nil then cxShowResourcesLayoutEditor(Scheduler.Storage, Scheduler.LookAndFeel); end; procedure TDemoBasicMainForm.miGroupByClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; case TMenuItem(Sender).Tag of 0: Scheduler.OptionsView.GroupingKind := gkNone; 1: Scheduler.OptionsView.GroupingKind := gkByResource; 2: Scheduler.OptionsView.GroupingKind := gkByDate; end; end; procedure TDemoBasicMainForm.ExportToClick(Sender: TObject); procedure ExportToFile(AType: Integer); begin if SaveDialog.Execute then begin case AType of 1: cxExportSchedulerToExcel(SaveDialog.FileName, Scheduler); 2: cxExportSchedulerToText(SaveDialog.FileName, Scheduler); 3: cxExportSchedulerToHTML(SaveDialog.FileName, Scheduler); 4: cxExportSchedulerToXML(SaveDialog.FileName, Scheduler); end; end; end; begin case (Sender as TMenuItem).Tag of 0: cxSchedulerExportToOutlook(Scheduler.Storage); 1..4: ExportToFile((Sender as TMenuItem).Tag); end; end; procedure TDemoBasicMainForm.SyncClick(Sender: TObject); begin if (Sender as TMenuItem).Tag = 0 then cxSchedulerSynchronizeStorageWithOutlook(Scheduler.Storage, GetSyncIDField) else cxSchedulerSynchronizeOutlookWithStorage(Scheduler.Storage, GetSyncIDField); end; procedure TDemoBasicMainForm.miResCountClick(Sender: TObject); begin Scheduler.OptionsView.ResourcesPerPage := TMenuItem(Sender).Tag; if TMenuItem(Sender).Tag = 0 then Scheduler.ResourceNavigator.Visibility := snvNever else Scheduler.ResourceNavigator.Visibility := snvAlways end; procedure TDemoBasicMainForm.miTimeWorktimeonlyClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.ViewTimeGrid.WorkTimeOnly := TMenuItem(Sender).Checked; Scheduler.ViewTimeGrid.WorkDaysOnly := TMenuItem(Sender).Checked; end; procedure TDemoBasicMainForm.miDaySettingsClick(Sender: TObject); var AChecked: Boolean; begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; AChecked := TMenuItem(Sender).Checked; case TMenuItem(Sender).Tag of 0: Scheduler.ViewDay.HeaderContainer := AChecked; 1: Scheduler.ViewDay.AlwaysShowEventTime := AChecked; 2: Scheduler.ViewDay.WorkTimeOnly := AChecked; 3: Scheduler.ViewDay.TimeRulerMinutes := AChecked; end; end; procedure TDemoBasicMainForm.miWeekViewClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; if TMenuItem(Sender).Tag = 0 then Scheduler.ViewWeek.CompressWeekEnd := TMenuItem(Sender).Checked else begin if TMenuItem(Sender).Checked then Scheduler.ViewWeek.DaysLayout := wdlOneColumn else Scheduler.ViewWeek.DaysLayout := wdlTwoColumns; end; end; procedure TDemoBasicMainForm.miCompressweekendsClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.ViewWeeks.CompressWeekEnd := TMenuItem(Sender).Checked; end; procedure TDemoBasicMainForm.AlldayeventsonlyClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.ViewYear.AllDayEventsOnly := TMenuItem(Sender).Checked; end; procedure TDemoBasicMainForm.miSharingClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.EventOperations.SharingBetweenResources := TMenuItem(Sender).Checked; end; procedure TDemoBasicMainForm.miIntersectionClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.EventOperations.Intersection := TMenuItem(Sender).Checked; end; procedure TDemoBasicMainForm.miWeekCompressWeekendsClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; Scheduler.ViewWeek.CompressWeekEnd := TMenuItem(Sender).Checked; end; end.