Check-in [a9d673b680]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Changed order of title caption. Turned DB format settings into const.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: a9d673b6801429c12c5c24e8a653d0e92fd6d138
User & Date: MCO 2013-11-22 12:22:43
Context
2013-11-28
10:41
DAT2ICS: also convert .dat file to a .sqlite database (and leave that on disk). check-in: e8a09c7bd9 user: MCO tags: trunk
2013-11-22
12:22
Changed order of title caption. Turned DB format settings into const. check-in: a9d673b680 user: MCO tags: trunk
2013-07-29
17:24
Added TText instead of TButton's caption, so it can be left-aligned check-in: 48ac2f8d76 user: tinus tags: trunk
Changes

Changes to Entry/src/F_Entry.pas.

3
4
5
6
7
8
9







10
11
12
13
14
15
16
..
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
..
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
..
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
...
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
...
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304



305


306
307
308
309
310
311
312
...
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
...
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
...
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Tabs, Grids,
  SQLite3Database;








type
  TfrmEntry = class(TForm)
    Grid: TStringGrid;
    tbsWeek: TTabSet;
    dtpDay: TDateTimePicker;
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
................................................................................
    procedure FormDestroy(Sender: TObject);
    procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure dtpDayDropDown(Sender: TObject);
    procedure dtpDayKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
    FDBFS: TFormatSettings;
    FDoneLoading: Boolean;
    FInhibitEvents: boolean;
    FDB: TSQLiteDatabase;
    FActiveDate: TDateTime;
    FLoadQuery: TSQLiteQuery;
    FClearQuery: TSQLiteQuery;
    FSaveQuery: TSQLiteQuery;
................................................................................
  MCS_NOSELCHANGEONNAV = $0100;
var
  style{, prevstyle}: LResult;
var
  MinDate: TDateTime;
  Row: Integer;
begin
  // Ensure correct formatting for SQL
  FDBFS.DateSeparator := '-';
  FDBFS.TimeSeparator := ':';
  FDBFS.ShortDateFormat := 'yyyy-MM-dd';
  FDBFS.LongDateFormat := 'yyyy-MM-dd';
  FDBFS.ShortTimeFormat := 'hh:nn:ss';
  FDBFS.LongTimeFormat := 'hh:nn:ss';
  FDBFS.DecimalSeparator := '.';

  // TODO: create subclass of TDateTimePicker that handles this (and the MCM_DAYSTATE mess)
  style := SendMessage(dtpDay.Handle, DTM_GETMCSTYLE, 0, 0);
  style := style or MCS_DAYSTATE or MCS_WEEKNUMBERS or MCS_NOSELCHANGEONNAV;
  {prevstyle := }SendMessage(dtpDay.Handle, DTM_SETMCSTYLE, 0, style);

  // TODO: get hotkey combo from settings
  RegisterHotKey(Self.Handle, 1, MOD_CONTROL or MOD_WIN, Ord('U'));
................................................................................

  try
    dtpDay.MaxDate := EndOfTheWeek(Today);
    FillHeaders;
    InitializeDB;

    dtpDay.MinDate := StartOfTheWeek(Today);
    if TryStrToDate(FDB.GetStringValue('SELECT date(MIN(datetime)) FROM Entries', ''), MinDate, FDBFS) then begin
      if MinDate < dtpDay.MinDate then begin
        dtpDay.MinDate := StartOfTheWeek(MinDate);
      end;
    end;

    SetDate(Today);
    Row := AddRow;
................................................................................
  // make sure to set the relevant bit for each day in the specified month
  for im := 0 to High(boldDates) do begin
    boldDates[im] := 0;
    Cursor := FDB.GetCursor('   SELECT DISTINCT strftime("%d", datetime) AS bolddate'
                          + '     FROM Entries'
                          + '    WHERE substr(date(datetime), 1, 7) = ?1'
                          + ' ORDER BY bolddate'
                          , [ FormatDateTime('yyyy-MM', IncMonth(RecodeDay(FirstDate, 1), im), FDBFS) ]
                          ) as TSQLiteCursor;
    try
      fldBoldDate := Cursor.Field['bolddate'] as TSQLiteField;
      while not Cursor.EOF do begin
        MonthDay := fldBoldDate.AsInteger;
        boldDates[im] := boldDates[im] or (1 shl (MonthDay - 1));
        Cursor.Next;
................................................................................
    dtpDay.Date := NewDate;
    tbsWeek.TabIndex := (DayOfWeek(NewDate) + 5) mod 7;
  finally
    FInhibitEvents := False;
  end;

  FActiveDate := DateOf(NewDate);
  Self.Caption := Application.Title + ' - ' + FormatDateTime('dddddd', FActiveDate);

  // load the new day's data into the grid
  LoadGrid(NewDate);

  if SameDate(NewDate, Today) then begin
    Grid.Row := AddRow(NewDate);
    Grid.Col := 1;
    Grid.Options := Grid.Options + [goEditing];
    Grid.EditorMode := True;
//    Grid.SetFocus;
  end else begin
    Grid.Options := Grid.Options - [goEditing];
    Grid.EditorMode := False;



//    Grid.SetFocus;


  end;
end{TfrmEntry.SetDate};

{ ------------------------------------------------------------------------------------------------ }
function TfrmEntry.AddRow(CurrentDate: TDateTime): Integer;
var
  LastRow, Col: Integer;
................................................................................
  PrevProject, Project, Activity: string;
begin
  // TODO: check the ID (object of the first row); if present then send that along (do an insert or replace)

  FDB.BeginTransaction;
  try
    // First, throw away the existing records for this date
    FClearQuery.Parameters.Add(':Date', DateToStr(Date, FDBFS));
    FDB.Execute(FClearQuery);

    // Next, save all the new records
    PrevProject := '';
    for Row := Grid.FixedRows to Grid.RowCount - 1 do begin
      if TryStrToTime(Grid.Cells[0, Row], Timestamp) then begin
        Timestamp := Trunc(Date) + Frac(Timestamp);
................................................................................
        Activity := Trim(Grid.Cells[2, Row]);
        if (Length(Project) > 0) or (Length(Activity) > 0) then begin
          if Length(Project) = 0 then begin
            // If empty, then repeat the preceding project
            Project := PrevProject;
          end;
          with FSaveQuery do begin
            Parameters.Add(':DateTime', DateTimeToStr(Timestamp, FDBFS));
            Parameters.Add(':Project', Project);
            Parameters.Add(':Activity', Activity);
          end;
          FDB.Execute(FSaveQuery);
          PrevProject := Project;
        end{if};
      end;
................................................................................
var
  Cursor: TSQLiteCursor;
  Row: Integer;
begin
  ClearGrid;

  // load the data for this day, and put it into the grid
  FLoadQuery.Parameters.Add(':Date', DateToStr(Date, FDBFS));
  Cursor := FDB.GetCursor(FLoadQuery) as TSQLiteCursor;
  try
    while not Cursor.EOF do begin
      Row := AddRow(Date);
      Grid.Objects[0, Row] := TObject(Cursor.Field['id'].AsInteger);
      Grid.Cells[0, Row] := Cursor.Field['time'].AsString;
      Grid.Cells[1, Row] := Cursor.Field['project'].AsString;







>
>
>
>
>
>
>







 







<







 







<
<
<
<
<
<
<
<
<







 







|







 







|







 







|









<



>
>
>
|
>
>







 







|







 







|







 







|







3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
..
26
27
28
29
30
31
32

33
34
35
36
37
38
39
..
73
74
75
76
77
78
79









80
81
82
83
84
85
86
..
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
...
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297

298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
...
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
...
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
...
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Tabs, Grids,
  SQLite3Database;

const
  // Ensure correct formatting for SQL
  DBFS: TFormatSettings = (DateSeparator: '-'; TimeSeparator: ':';
                           ShortDateFormat: 'yyyy-MM-dd'; LongDateFormat: 'yyyy-MM-dd';
                           ShortTimeFormat: 'hh:nn:ss'; LongTimeFormat: 'hh:nn:ss';
                           DecimalSeparator: '.');

type
  TfrmEntry = class(TForm)
    Grid: TStringGrid;
    tbsWeek: TTabSet;
    dtpDay: TDateTimePicker;
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
................................................................................
    procedure FormDestroy(Sender: TObject);
    procedure GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure dtpDayDropDown(Sender: TObject);
    procedure dtpDayKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }

    FDoneLoading: Boolean;
    FInhibitEvents: boolean;
    FDB: TSQLiteDatabase;
    FActiveDate: TDateTime;
    FLoadQuery: TSQLiteQuery;
    FClearQuery: TSQLiteQuery;
    FSaveQuery: TSQLiteQuery;
................................................................................
  MCS_NOSELCHANGEONNAV = $0100;
var
  style{, prevstyle}: LResult;
var
  MinDate: TDateTime;
  Row: Integer;
begin









  // TODO: create subclass of TDateTimePicker that handles this (and the MCM_DAYSTATE mess)
  style := SendMessage(dtpDay.Handle, DTM_GETMCSTYLE, 0, 0);
  style := style or MCS_DAYSTATE or MCS_WEEKNUMBERS or MCS_NOSELCHANGEONNAV;
  {prevstyle := }SendMessage(dtpDay.Handle, DTM_SETMCSTYLE, 0, style);

  // TODO: get hotkey combo from settings
  RegisterHotKey(Self.Handle, 1, MOD_CONTROL or MOD_WIN, Ord('U'));
................................................................................

  try
    dtpDay.MaxDate := EndOfTheWeek(Today);
    FillHeaders;
    InitializeDB;

    dtpDay.MinDate := StartOfTheWeek(Today);
    if TryStrToDate(FDB.GetStringValue('SELECT date(MIN(datetime)) FROM Entries', ''), MinDate, DBFS) then begin
      if MinDate < dtpDay.MinDate then begin
        dtpDay.MinDate := StartOfTheWeek(MinDate);
      end;
    end;

    SetDate(Today);
    Row := AddRow;
................................................................................
  // make sure to set the relevant bit for each day in the specified month
  for im := 0 to High(boldDates) do begin
    boldDates[im] := 0;
    Cursor := FDB.GetCursor('   SELECT DISTINCT strftime("%d", datetime) AS bolddate'
                          + '     FROM Entries'
                          + '    WHERE substr(date(datetime), 1, 7) = ?1'
                          + ' ORDER BY bolddate'
                          , [ FormatDateTime('yyyy-MM', IncMonth(RecodeDay(FirstDate, 1), im), DBFS) ]
                          ) as TSQLiteCursor;
    try
      fldBoldDate := Cursor.Field['bolddate'] as TSQLiteField;
      while not Cursor.EOF do begin
        MonthDay := fldBoldDate.AsInteger;
        boldDates[im] := boldDates[im] or (1 shl (MonthDay - 1));
        Cursor.Next;
................................................................................
    dtpDay.Date := NewDate;
    tbsWeek.TabIndex := (DayOfWeek(NewDate) + 5) mod 7;
  finally
    FInhibitEvents := False;
  end;

  FActiveDate := DateOf(NewDate);
  Self.Caption := FormatDateTime('dddddd', FActiveDate) + ' - ' + Application.Title;

  // load the new day's data into the grid
  LoadGrid(NewDate);

  if SameDate(NewDate, Today) then begin
    Grid.Row := AddRow(NewDate);
    Grid.Col := 1;
    Grid.Options := Grid.Options + [goEditing];
    Grid.EditorMode := True;

  end else begin
    Grid.Options := Grid.Options - [goEditing];
    Grid.EditorMode := False;
  end;
  try
    if Grid.CanFocus then
      Grid.SetFocus;
  except
    // never mind
  end;
end{TfrmEntry.SetDate};

{ ------------------------------------------------------------------------------------------------ }
function TfrmEntry.AddRow(CurrentDate: TDateTime): Integer;
var
  LastRow, Col: Integer;
................................................................................
  PrevProject, Project, Activity: string;
begin
  // TODO: check the ID (object of the first row); if present then send that along (do an insert or replace)

  FDB.BeginTransaction;
  try
    // First, throw away the existing records for this date
    FClearQuery.Parameters.Add(':Date', DateToStr(Date, DBFS));
    FDB.Execute(FClearQuery);

    // Next, save all the new records
    PrevProject := '';
    for Row := Grid.FixedRows to Grid.RowCount - 1 do begin
      if TryStrToTime(Grid.Cells[0, Row], Timestamp) then begin
        Timestamp := Trunc(Date) + Frac(Timestamp);
................................................................................
        Activity := Trim(Grid.Cells[2, Row]);
        if (Length(Project) > 0) or (Length(Activity) > 0) then begin
          if Length(Project) = 0 then begin
            // If empty, then repeat the preceding project
            Project := PrevProject;
          end;
          with FSaveQuery do begin
            Parameters.Add(':DateTime', DateTimeToStr(Timestamp, DBFS));
            Parameters.Add(':Project', Project);
            Parameters.Add(':Activity', Activity);
          end;
          FDB.Execute(FSaveQuery);
          PrevProject := Project;
        end{if};
      end;
................................................................................
var
  Cursor: TSQLiteCursor;
  Row: Integer;
begin
  ClearGrid;

  // load the data for this day, and put it into the grid
  FLoadQuery.Parameters.Add(':Date', DateToStr(Date, DBFS));
  Cursor := FDB.GetCursor(FLoadQuery) as TSQLiteCursor;
  try
    while not Cursor.EOF do begin
      Row := AddRow(Date);
      Grid.Objects[0, Row] := TObject(Cursor.Field['id'].AsInteger);
      Grid.Cells[0, Row] := Cursor.Field['time'].AsString;
      Grid.Cells[1, Row] := Cursor.Field['project'].AsString;

Changes to Entry/src/lib/SQLite3Database.pas.

112
113
114
115
116
117
118
119

120
121
122
123
124
125
126
{ ------------------------------------------------------------------------------------------------ }
procedure DisposeProc(Ptr: pointer); cdecl;

////////////////////////////////////////////////////////////////////////////////////////////////////
implementation

uses
  SysUtils, Windows;


{$IFNDEF VER200} // before Delphi 2009
function SetDllDirectory(lpPathName:PChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryA';
{$ELSE}
  {$IFNDEF VER210} // before Delphi 2010 (which has this in the Windows unit)
function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';
  {$ENDIF}







|
>







112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{ ------------------------------------------------------------------------------------------------ }
procedure DisposeProc(Ptr: pointer); cdecl;

////////////////////////////////////////////////////////////////////////////////////////////////////
implementation

uses
  SysUtils, Windows,
  Contnrs, Types;

{$IFNDEF VER200} // before Delphi 2009
function SetDllDirectory(lpPathName:PChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryA';
{$ELSE}
  {$IFNDEF VER210} // before Delphi 2010 (which has this in the Windows unit)
function SetDllDirectory(lpPathName:PWideChar): Bool; stdcall; external 'kernel32.dll' name 'SetDllDirectoryW';
  {$ENDIF}

Changes to Entry/src/prj/D2010/Olam.dproj.

1
2
3
4
5
6
7





8
9
10
11










12
13
14
15
16
17
18
19
20
21
22







23
24
25
26
27
28
29
30
31












32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113





114
115
116

117
	<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
		<PropertyGroup>
			<ProjectGuid>{C388C4E5-7E2F-4B05-8141-39DF450276E2}</ProjectGuid>
			<ProjectVersion>12.0</ProjectVersion>
			<MainSource>Olam.dpr</MainSource>
			<Config Condition="'$(Config)'==''">Debug</Config>
			<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>





		</PropertyGroup>
		<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
			<Base>true</Base>
		</PropertyGroup>










		<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
			<Cfg_1>true</Cfg_1>
			<CfgParent>Base</CfgParent>
			<Base>true</Base>
		</PropertyGroup>
		<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
			<Cfg_2>true</Cfg_2>
			<CfgParent>Base</CfgParent>
			<Base>true</Base>
		</PropertyGroup>
		<PropertyGroup Condition="'$(Base)'!=''">







			<DCC_UnitSearchPath>..\..\lib;..\..;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
			<DCC_DependencyCheckOutputName>..\..\..\out\Olam.exe</DCC_DependencyCheckOutputName>
			<DCC_ImageBase>00400000</DCC_ImageBase>
			<DCC_UsePackage>vclx;vcl;vclimg;dbrtl;Rave77VCL;bdertl;rtl;vclactnband;vcldb;vcldbx;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;inetdb;webdsnap;websnap;inetdbbde;inetdbxpress;soaprtl;vclribbon;DbxCommonDriver;DbxClientDriver;DBXInterBaseDriver;DBXMySQLDriver;dbexpress;dbxcds;DCPdelphi2010</DCC_UsePackage>
			<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)</DCC_UnitAlias>
			<DCC_Platform>x86</DCC_Platform>
			<DCC_ExeOutput>..\..\..\out\</DCC_ExeOutput>
			<DCC_DcuOutput>..\..\..\out\DCU\</DCC_DcuOutput>
		</PropertyGroup>












		<PropertyGroup Condition="'$(Cfg_1)'!=''">
			<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
			<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
			<DCC_DebugInformation>false</DCC_DebugInformation>
			<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>
			<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
		</PropertyGroup>
		<PropertyGroup Condition="'$(Cfg_2)'!=''">
			<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
			<DCC_RangeChecking>true</DCC_RangeChecking>
			<DCC_Optimize>false</DCC_Optimize>
			<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
			<DCC_RunTimeTypeInfo>true</DCC_RunTimeTypeInfo>
		</PropertyGroup>
		<ItemGroup>
			<DelphiCompile Include="Olam.dpr">
				<MainSource>MainSource</MainSource>
			</DelphiCompile>
			<DCCReference Include="..\..\F_Entry.pas">
				<Form>frmEntry</Form>
			</DCCReference>
			<DCCReference Include="..\..\lib\L_KeysDown.pas"/>
			<DCCReference Include="..\..\lib\CheckPrevious.pas"/>
			<BuildConfiguration Include="Base">
				<Key>Base</Key>
			</BuildConfiguration>
			<BuildConfiguration Include="Debug">
				<Key>Cfg_2</Key>
				<CfgParent>Base</CfgParent>
			</BuildConfiguration>



			<BuildConfiguration Include="Release">
				<Key>Cfg_1</Key>
				<CfgParent>Base</CfgParent>
			</BuildConfiguration>
		</ItemGroup>
		<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
		<ProjectExtensions>
			<Borland.Personality>Delphi.Personality.12</Borland.Personality>
			<Borland.ProjectType/>
			<BorlandProject>
				<Delphi.Personality>
					<Source>
						<Source Name="MainSource">Olam.dpr</Source>
					</Source>
					<Parameters>
						<Parameters Name="UseLauncher">False</Parameters>
						<Parameters Name="LoadAllSymbols">True</Parameters>
						<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
					</Parameters>
					<VersionInfo>
						<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
						<VersionInfo Name="AutoIncBuild">True</VersionInfo>
						<VersionInfo Name="MajorVer">1</VersionInfo>
						<VersionInfo Name="MinorVer">0</VersionInfo>
						<VersionInfo Name="Release">0</VersionInfo>
						<VersionInfo Name="Build">10</VersionInfo>
						<VersionInfo Name="Debug">False</VersionInfo>
						<VersionInfo Name="PreRelease">False</VersionInfo>
						<VersionInfo Name="Special">False</VersionInfo>
						<VersionInfo Name="Private">True</VersionInfo>
						<VersionInfo Name="DLL">False</VersionInfo>
						<VersionInfo Name="Locale">1043</VersionInfo>
						<VersionInfo Name="CodePage">1252</VersionInfo>
					</VersionInfo>
					<VersionInfoKeys>
						<VersionInfoKeys Name="CompanyName">Martijn Coppoolse</VersionInfoKeys>
						<VersionInfoKeys Name="FileDescription">Olam Work registration helper</VersionInfoKeys>
						<VersionInfoKeys Name="FileVersion">1.0.0.10</VersionInfoKeys>
						<VersionInfoKeys Name="InternalName">Olam</VersionInfoKeys>
						<VersionInfoKeys Name="LegalCopyright"/>
						<VersionInfoKeys Name="LegalTrademarks"/>
						<VersionInfoKeys Name="OriginalFilename"/>
						<VersionInfoKeys Name="ProductName"/>
						<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
						<VersionInfoKeys Name="Comments"/>
						<VersionInfoKeys Name="PrivateBuild"/>
					</VersionInfoKeys>
					<Excluded_Packages>
						<Excluded_Packages Name="$(BDS)\bin\dcloffice2k140.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
						<Excluded_Packages Name="$(BDS)\bin\dclofficexp140.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
					</Excluded_Packages>
				</Delphi.Personality>





			</BorlandProject>
			<ProjectFileVersion>12</ProjectFileVersion>
		</ProjectExtensions>

	</Project>
|
|
|
|
|
|
|
>
>
>
>
>
|
|
|
|
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
|
|
|
|
<
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
|
|
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
|
|
|
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectGuid>{C388C4E5-7E2F-4B05-8141-39DF450276E2}</ProjectGuid>
        <ProjectVersion>15.2</ProjectVersion>
        <MainSource>Olam.dpr</MainSource>
        <Config Condition="'$(Config)'==''">Debug</Config>
        <DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
        <FrameworkType>VCL</FrameworkType>
        <Base>True</Base>
        <Platform Condition="'$(Platform)'==''">Win32</Platform>
        <TargetedPlatforms>17</TargetedPlatforms>
        <AppType>Application</AppType>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
        <Base_Win32>true</Base_Win32>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
        <Base_Win64>true</Base_Win64>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
        <Cfg_1>true</Cfg_1>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
        <Cfg_2>true</Cfg_2>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base)'!=''">
        <VerInfo_Build>10</VerInfo_Build>
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
        <VerInfo_Private>true</VerInfo_Private>
        <VerInfo_AutoGenVersion>true</VerInfo_AutoGenVersion>
        <DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
        <VerInfo_Locale>1043</VerInfo_Locale>
        <VerInfo_Keys>CompanyName=Martijn Coppoolse;FileDescription=Olam Work registration helper;FileVersion=1.0.0.10;InternalName=Olam;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;PrivateBuild=</VerInfo_Keys>
        <DCC_UnitSearchPath>..\..\lib;..\..;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
        <DCC_DependencyCheckOutputName>..\..\..\out\Olam.exe</DCC_DependencyCheckOutputName>
        <DCC_ImageBase>00400000</DCC_ImageBase>
        <DCC_UsePackage>vclx;vcl;vclimg;dbrtl;Rave77VCL;bdertl;rtl;vclactnband;vcldb;vcldbx;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;inetdb;webdsnap;websnap;inetdbbde;inetdbxpress;soaprtl;vclribbon;DbxCommonDriver;DbxClientDriver;DBXInterBaseDriver;DBXMySQLDriver;dbexpress;dbxcds;DCPdelphi2010;$(DCC_UsePackage)</DCC_UsePackage>

        <DCC_Platform>x86</DCC_Platform>
        <DCC_ExeOutput>..\..\..\out\</DCC_ExeOutput>
        <DCC_DcuOutput>..\..\..\out\DCU\</DCC_DcuOutput>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base_Win32)'!=''">
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
        <Icon_MainIcon>Olam_Icon1.ico</Icon_MainIcon>
        <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
        <VerInfo_Locale>1033</VerInfo_Locale>
        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base_Win64)'!=''">
        <Icon_MainIcon>Olam_Icon1.ico</Icon_MainIcon>
        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Cfg_1)'!=''">
        <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
        <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
        <DCC_DebugInformation>0</DCC_DebugInformation>
        <DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>
        <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Cfg_2)'!=''">
        <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
        <DCC_RangeChecking>true</DCC_RangeChecking>
        <DCC_Optimize>false</DCC_Optimize>
        <DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
        <DCC_RunTimeTypeInfo>true</DCC_RunTimeTypeInfo>
    </PropertyGroup>
    <ItemGroup>
        <DelphiCompile Include="$(MainSource)">
            <MainSource>MainSource</MainSource>
        </DelphiCompile>
        <DCCReference Include="..\..\F_Entry.pas">
            <Form>frmEntry</Form>
        </DCCReference>
        <DCCReference Include="..\..\lib\L_KeysDown.pas"/>
        <DCCReference Include="..\..\lib\CheckPrevious.pas"/>



        <BuildConfiguration Include="Debug">
            <Key>Cfg_2</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
        <BuildConfiguration Include="Base">
            <Key>Base</Key>
        </BuildConfiguration>
        <BuildConfiguration Include="Release">
            <Key>Cfg_1</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
    </ItemGroup>
    <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
    <ProjectExtensions>
        <Borland.Personality>Delphi.Personality.12</Borland.Personality>
        <Borland.ProjectType/>
        <BorlandProject>
            <Delphi.Personality>
                <Source>
                    <Source Name="MainSource">Olam.dpr</Source>
                </Source>
                <Parameters>
                    <Parameters Name="UseLauncher">False</Parameters>
                    <Parameters Name="LoadAllSymbols">True</Parameters>
                    <Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
                </Parameters>
                <VersionInfo>
                    <VersionInfo Name="IncludeVerInfo">True</VersionInfo>
                    <VersionInfo Name="AutoIncBuild">True</VersionInfo>
                    <VersionInfo Name="MajorVer">1</VersionInfo>
                    <VersionInfo Name="MinorVer">0</VersionInfo>
                    <VersionInfo Name="Release">0</VersionInfo>
                    <VersionInfo Name="Build">10</VersionInfo>
                    <VersionInfo Name="Debug">False</VersionInfo>
                    <VersionInfo Name="PreRelease">False</VersionInfo>
                    <VersionInfo Name="Special">False</VersionInfo>
                    <VersionInfo Name="Private">True</VersionInfo>
                    <VersionInfo Name="DLL">False</VersionInfo>
                    <VersionInfo Name="Locale">1043</VersionInfo>
                    <VersionInfo Name="CodePage">1252</VersionInfo>
                </VersionInfo>
                <VersionInfoKeys>
                    <VersionInfoKeys Name="CompanyName">Martijn Coppoolse</VersionInfoKeys>
                    <VersionInfoKeys Name="FileDescription">Olam Work registration helper</VersionInfoKeys>
                    <VersionInfoKeys Name="FileVersion">1.0.0.10</VersionInfoKeys>
                    <VersionInfoKeys Name="InternalName">Olam</VersionInfoKeys>
                    <VersionInfoKeys Name="LegalCopyright"/>
                    <VersionInfoKeys Name="LegalTrademarks"/>
                    <VersionInfoKeys Name="OriginalFilename"/>
                    <VersionInfoKeys Name="ProductName"/>
                    <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
                    <VersionInfoKeys Name="Comments"/>
                    <VersionInfoKeys Name="PrivateBuild"/>
                </VersionInfoKeys>
                <Excluded_Packages>
                    <Excluded_Packages Name="$(BDSBIN)\dcloffice2k140.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
                    <Excluded_Packages Name="$(BDSBIN)\dclofficexp140.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
                </Excluded_Packages>
            </Delphi.Personality>
            <Platforms>
                <Platform value="Android" ActiveMobileDevice="4107130f55716fcf">True</Platform>
                <Platform value="Win32">True</Platform>
                <Platform value="Win64">False</Platform>
            </Platforms>
        </BorlandProject>
        <ProjectFileVersion>12</ProjectFileVersion>
    </ProjectExtensions>
    <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>

Changes to Entry/src/prj/D2010/Olam.res.

cannot compute difference between binary files