Componentes.Terceros.jcl/official/2.1.1/examples/windows/timezones/Mainfrm.pas
2010-01-18 16:51:36 +00:00

245 lines
6.3 KiB
ObjectPascal

unit Mainfrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, StdCtrls, ComCtrls, ExtCtrls,
JclTimeZones;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TimeZoneTab: TTabSheet;
Button1: TButton;
Button2: TButton;
Button3: TButton;
ActionList1: TActionList;
OKAction: TAction;
CancelAction: TAction;
ApplyAction: TAction;
TimeZonesCombo: TComboBox;
Image1: TImage;
AutoAdjustcb: TCheckBox;
SetDaylightSavingsOptionsAction: TAction;
TabSheet1: TTabSheet;
CurrentTimeslv: TListView;
GroupBox3: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Supported: TLabel;
Period: TLabel;
Label4: TLabel;
GMTOffset: TLabel;
TabSheet2: TTabSheet;
Button5: TButton;
TimeZonesCombo2: TComboBox;
Label5: TLabel;
GroupBox4: TGroupBox;
Label12: TLabel;
CheckMonthCombo: TComboBox;
CheckDayCombo: TComboBox;
Label6: TLabel;
Label7: TLabel;
StdStartDate: TLabel;
Period2: TLabel;
Label10: TLabel;
DlStartDate: TLabel;
Label8: TLabel;
DateIsInDaylightSavings: TLabel;
CheckYearEdit: TEdit;
procedure ApplyActionUpdate(Sender: TObject);
procedure OKActionExecute(Sender: TObject);
procedure CancelActionExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SetDaylightSavingsOptionsActionExecute(Sender: TObject);
procedure ApplyActionExecute(Sender: TObject);
procedure CurrentTimeslvSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure TimeZonesComboChange(Sender: TObject);
procedure AutoAdjustcbClick(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
DateTimeModified: Boolean;
TimeZoneModified: Boolean;
AutoAdjustModified: Boolean;
TimeZones: TJclTimeZones;
public
end;
var
Form1: TForm1;
implementation
uses
{JclGraphUtils,} JclDateTime;
{$R *.dfm}
procedure TForm1.ApplyActionUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := DateTimeModified or TimeZoneModified or AutoAdjustModified;
end;
procedure TForm1.OKActionExecute(Sender: TObject);
begin
ApplyAction.Execute;
Close;
end;
procedure TForm1.CancelActionExecute(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Year, Month, Day: Word;
I: Integer;
ListItem: TListItem;
begin
PageControl1.ActivePageIndex := 0;
DecodeDate(Now, Year, Month, Day);
TimeZones := TJclTimeZones.Create;
CurrentTimeslv.Items.BeginUpdate;
try
// Populate the combobox
for I := 0 to TimeZones.Count - 1 do
begin
TimeZonesCombo.Items.Add(TimeZones[I].DisplayDescription);
TimeZonesCombo2.Items.Add(TimeZones[I].DisplayDescription);
Listitem := CurrentTimeslv.Items.Add;
ListItem.Caption := TimeZones[I].DisplayDescription;
ListItem.SubItems.Add(DateTimeToStr(TimeZones[I].CurrentDateTime));
end;
finally
CurrentTimeslv.Items.EndUpdate;
end;
// Set the itemindex to the current timezone
TimeZonesCombo.ItemIndex := TimeZonesCombo.Items.IndexOf(TimeZones.ActiveTimeZone.DisplayDescription);
TimeZonesCombo2.ItemIndex := TimeZonesCombo2.Items.IndexOf(TimeZones.ActiveTimeZone.DisplayDescription);
CurrentTimeslv.Selected := CurrentTimeslv.items[TimeZonesCombo.ItemIndex];
CurrentTimeslv.Selected.MakeVisible(False);
// Now set/unset the auto-adjust checkbox accordingly
SetDaylightSavingsOptionsAction.Execute;
AutoAdjustModified := False;
DateTimeModified := False;
TimeZoneModified := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(TimeZones);
end;
procedure TForm1.SetDaylightSavingsOptionsActionExecute(Sender: TObject);
begin
AutoAdjustcb.Visible := TimeZones[TimeZonesCombo.ItemIndex].SupportsDaylightSavings;
AutoAdjustcb.Checked := TimeZones.AutoAdjustEnabled;
end;
procedure TForm1.ApplyActionExecute(Sender: TObject);
begin
// Set the timezone
if TimeZoneModified then
TimeZones[TimeZonesCombo.ItemIndex].ApplyTimeZone;
if AutoAdjustModified then
TimeZones.SetAutoAdjustEnabled(AutoAdjustcb.checked);
DateTimeModified := False;
TimeZoneModified := False;
AutoAdjustModified := False;
end;
procedure TForm1.CurrentTimeslvSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if (Item.Index <> -1) and Assigned(TimeZones) then
begin
GMTOffset.Caption := TimeZones[Item.Index].GMTOffset;
if TimeZones[Item.Index].SupportsDaylightSavings then
Supported.Caption := 'Yes'
else
Supported.Caption := 'No';
Period.Caption := TimeZones[Item.Index].DayLightSavingsPeriod;
end;
end;
procedure TForm1.TimeZonesComboChange(Sender: TObject);
begin
// TODO: Make the change in the listview
// TODO: Move the map
TimeZoneModified := True;
SetDaylightSavingsOptionsAction.Execute;
end;
procedure TForm1.AutoAdjustcbClick(Sender: TObject);
begin
AutoAdjustModified := True;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
TZ: TJclTimeZoneInfo;
Date: TDateTime;
d,m: word;
y: integer;
begin
if (TimeZonesCombo2.ItemIndex = -1) or (CheckDayCombo.ItemIndex= -1) or (CheckMonthCombo.ItemIndex= -1) then
Exit;
try
y := StrToInt(CheckYearEdit.Text);
except
on E:EConvertError do
begin
Showmessage('Not a valid year');
Exit;
end;
end;
d := CheckDayCombo.ItemIndex + 1;
m := CheckMonthCombo.ItemIndex + 1;
try
Date:=EncodeDate(y,m,d);
except
on E:EConvertError do
begin
Showmessage('Not a valid date');
Exit;
end;
end;
TZ:=TimeZones[TimeZonesCombo2.ItemIndex];
if not TZ.SupportsDaylightSavings then
begin
Showmessage('This timezone does not support daylight savings');
Exit;
end;
DLStartDate.Caption:=DateToStr(TZ.DaylightStartDateInYear(y));
StdStartDate.Caption:=DateToStr(TZ.StandardStartDateInYear(y));
Period2.Caption := TZ.DayLightSavingsPeriod;
if TZ.DateTimeIsInDaylightSavings(Date) then
DateIsInDaylightSavings.Caption:='Yes'
else
DateIsInDaylightSavings.Caption:='No';
end;
end.