Check-in [fd00aaf3f0]
Not logged in

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

Overview
Comment:Removed time from datepicker; Added mindate to datepicker; restricted automatic adding of row to today
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: fd00aaf3f0cf3b6eeff71c3eddc7ad8bf230c9fc
User & Date: MCO 2011-05-12 08:24:59
Context
2012-05-29
15:57
Added project to export ProjectIt.dat to an iCalendar file. check-in: 3bdccd5cd5 user: MCO tags: trunk
2011-05-12
08:24
Removed time from datepicker; Added mindate to datepicker; restricted automatic adding of row to today check-in: fd00aaf3f0 user: MCO tags: trunk
2011-05-08
18:42
Moved current files under Entry; merged SnapShooter and SnapViewer projects into source tree check-in: fc0aa399a1 user: Martijn tags: trunk
Changes

Changes to Entry/src/F_Entry.dfm.

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  PixelsPerInch = 96
  TextHeight = 13
  object dtpDay: TDateTimePicker
    Left = 8
    Top = 8
    Width = 137
    Height = 21
    Date = 40667.351732187500000000
    Format = 'd MMMM yyyy'
    Time = 40667.351732187500000000
    DoubleBuffered = True
    ParentDoubleBuffered = False
    TabOrder = 1
    OnChange = dtpDayChange
    OnDropDown = dtpDayDropDown
    OnKeyDown = dtpDayKeyDown
  end







|

|







25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  PixelsPerInch = 96
  TextHeight = 13
  object dtpDay: TDateTimePicker
    Left = 8
    Top = 8
    Width = 137
    Height = 21
    Date = 40667.000000000000000000
    Format = 'd MMMM yyyy'
    Time = 40667.000000000000000000
    DoubleBuffered = True
    ParentDoubleBuffered = False
    TabOrder = 1
    OnChange = dtpDayChange
    OnDropDown = dtpDayDropDown
    OnKeyDown = dtpDayKeyDown
  end

Changes to Entry/src/F_Entry.pas.

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
..
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
..
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
...
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
...
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
...
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
...
272
273
274
275
276
277
278
279
280
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
314
315

316





317
318
319
320
321
322
323
...
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
...
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
...
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
...
499
500
501
502
503
504
505

506
507
508
509
510
511
512
513
514
    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;

    procedure FillHeaders;
    function  SQLDateToStr(Date: TDateTime): string;
    function  SQLDateTimeToStr(Date: TDateTime): string;
    procedure SetDate(NewDate: TDateTime);
    function  AddRow(CurrentDate: TDateTime = -1): Integer;
    procedure SaveGrid(Date: TDateTime);
    procedure LoadGrid(Date: TDateTime);
    procedure InitializeDB;
    procedure ClearGrid;
    procedure HandleCtrlTab(Shift: TShiftState);
................................................................................
  DTM_SETMCSTYLE = (DTM_FIRST + 11);
  MCS_NOTRAILINGDATES = $0040;
  MCS_SHORTDAYSOFWEEK = $0080;
  MCS_NOSELCHANGEONNAV = $0100;
var
  style{, prevstyle}: LResult;
var

  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 := dtpDay.Date + 7; // eigenlijk niet verder dan a.s. zondag...
    FillHeaders;
    InitializeDB;








    SetDate(Date);
    Row := AddRow(FActiveDate);
    if Row = Grid.FixedRows then begin
      Grid.Cells[1, Row] := '(overig)';
      Grid.Cells[2, Row] := 'Opgestart';
    end;
  finally
    FDoneLoading := True;
  end;
................................................................................
{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Row: Integer;
begin
  if CanClose then begin
    if FDoneLoading then begin
      SetDate(Date);
      if not isShiftDown then begin
        Row := AddRow(FActiveDate);
        Grid.Cells[1, Row] := '(overig)';
        Grid.Cells[2, Row] := 'Afgesloten';
      end;
      SaveGrid(FActiveDate);
    end;
  end;
end{TfrmEntry.FormCloseQuery};
................................................................................
var
  monthCalHandle: THandle;
  monthRange: TSystemTimeRangeArray;
  FirstDate{, LastDate}: TDate;
  boldDates: array of TMonthDayState;
  im: Integer;
  Cursor: TSQLiteCursor;
  FS: TFormatSettings;
  MonthDay: Integer;
  fldBoldDate: TSQLiteField;
begin
  // TODO: write a TDateTimePicker that handles this properly!!!
  //       This will allow us to react to the MCN_GETDAYSTATE message, which is the proper place
  //       to handle bold days anyway (and it keeps working after you switch months)

................................................................................
  monthCalHandle := SendMessage(dtpDay.Handle, DTM_GETMONTHCAL, 0, 0);

  SetLength(boldDates, MonthCal_GetMonthRange(monthCalHandle, GMR_DAYSTATE, @monthRange));
  with monthRange[0] do FirstDate := EncodeDate(wYear, wMonth, wDay);
//  with monthRange[1] do LastDate := EncodeDate(wYear, wMonth, wDay);

  // make sure to set the relevant bit for each day in the specified month
  FS.DateSeparator := '-';
  FS.TimeSeparator := ':';
  FS.ShortDateFormat := 'yyyy-MM-dd';
  FS.LongDateFormat := 'yyyy-MM-dd';
  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), FS) ]
                          ) 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;
................................................................................
    end;
  end;
end{TfrmEntry.tbsWeekChange};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.WMActivate(var Message: TWMActivate);
begin
  AddRow(FActiveDate);
end;

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.WMHotkey(var msg: TWMHotkey);
begin
  case Msg.HotKey of
    1: begin // Toggle visibility
................................................................................
  try
    dtpDay.Date := NewDate;
    tbsWeek.TabIndex := (DayOfWeek(NewDate) + 5) mod 7;
  finally
    FInhibitEvents := False;
  end;

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

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

  if SameDate(NewDate, Date) 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.SQLDateTimeToStr(Date: TDateTime): string;
begin
  Result := FormatDateTime('yyyy-MM-dd hh:nn:ss', Date);
end;

{ ------------------------------------------------------------------------------------------------ }
function TfrmEntry.SQLDateToStr(Date: TDateTime): string;
begin
  Result := FormatDateTime('yyyy-MM-dd', Date);
end;

{ ------------------------------------------------------------------------------------------------ }
function TfrmEntry.AddRow(CurrentDate: TDateTime): Integer;
var
  LastRow, Col: Integer;
begin
  if CurrentDate = -1 then

    CurrentDate := FActiveDate;






  LastRow := Grid.RowCount - 1;
  for Col := 1 to Grid.ColCount - 1 do begin
    if Trim(Grid.Cells[Col, LastRow]) <> '' then begin
      Inc(LastRow);
      Break;
    end;
................................................................................
  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', SQLDateToStr(Date));
    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', SQLDateTimeToStr(Timestamp));
            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', SQLDateToStr(Date));
  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;
................................................................................
  KeyShift := Shift * [ssShift, ssCtrl, ssAlt];
  if (KeyShift = []) and (goEditing in Grid.Options)
      and (Grid.Col = Grid.ColCount - 1) and (Grid.Row = Grid.RowCount - 1) then
  begin
    AddRow(FActiveDate);
  end else if ssCtrl in KeyShift then begin
    if ssShift in KeyShift then begin

      SetDate(FActiveDate - 1);
    end else begin
      if FActiveDate + 2 < dtpDay.MaxDate then
        SetDate(FActiveDate + 1);
    end{if};
  end{if};
end{TfrmEntry.HandleCtrlTab};

end.







>









<
<







 







>


>
>
>
>
>
>
>
>
>









|



>
>
>
>
>
>
>
|
|







 







|

|







 







<







 







<
<
<
<






|







 







|







 







|





|












<
<
<
<
<
<
<
<
<
<
<
<





|
>
|
>
>
>
>
>







 







|







 







|







 







|







 







>
|

|






19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35


36
37
38
39
40
41
42
..
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
...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
...
179
180
181
182
183
184
185

186
187
188
189
190
191
192
...
193
194
195
196
197
198
199




200
201
202
203
204
205
206
207
208
209
210
211
212
213
...
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
...
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
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
...
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
...
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
    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;

    procedure FillHeaders;


    procedure SetDate(NewDate: TDateTime);
    function  AddRow(CurrentDate: TDateTime = -1): Integer;
    procedure SaveGrid(Date: TDateTime);
    procedure LoadGrid(Date: TDateTime);
    procedure InitializeDB;
    procedure ClearGrid;
    procedure HandleCtrlTab(Shift: TShiftState);
................................................................................
  DTM_SETMCSTYLE = (DTM_FIRST + 11);
  MCS_NOTRAILINGDATES = $0040;
  MCS_SHORTDAYSOFWEEK = $0080;
  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;
    if Row = Grid.FixedRows then begin
      Grid.Cells[1, Row] := '(overig)';
      Grid.Cells[2, Row] := 'Opgestart';
    end;
  finally
    FDoneLoading := True;
  end;
................................................................................
{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Row: Integer;
begin
  if CanClose then begin
    if FDoneLoading then begin
      SetDate(Today);
      if not isShiftDown then begin
        Row := AddRow;
        Grid.Cells[1, Row] := '(overig)';
        Grid.Cells[2, Row] := 'Afgesloten';
      end;
      SaveGrid(FActiveDate);
    end;
  end;
end{TfrmEntry.FormCloseQuery};
................................................................................
var
  monthCalHandle: THandle;
  monthRange: TSystemTimeRangeArray;
  FirstDate{, LastDate}: TDate;
  boldDates: array of TMonthDayState;
  im: Integer;
  Cursor: TSQLiteCursor;

  MonthDay: Integer;
  fldBoldDate: TSQLiteField;
begin
  // TODO: write a TDateTimePicker that handles this properly!!!
  //       This will allow us to react to the MCN_GETDAYSTATE message, which is the proper place
  //       to handle bold days anyway (and it keeps working after you switch months)

................................................................................
  monthCalHandle := SendMessage(dtpDay.Handle, DTM_GETMONTHCAL, 0, 0);

  SetLength(boldDates, MonthCal_GetMonthRange(monthCalHandle, GMR_DAYSTATE, @monthRange));
  with monthRange[0] do FirstDate := EncodeDate(wYear, wMonth, wDay);
//  with monthRange[1] do LastDate := EncodeDate(wYear, wMonth, wDay);

  // 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;
................................................................................
    end;
  end;
end{TfrmEntry.tbsWeekChange};

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.WMActivate(var Message: TWMActivate);
begin
  AddRow;
end;

{ ------------------------------------------------------------------------------------------------ }
procedure TfrmEntry.WMHotkey(var msg: TWMHotkey);
begin
  case Msg.HotKey of
    1: begin // Toggle visibility
................................................................................
  try
    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;
begin
  if CurrentDate = -1 then begin
    if SameDate(FActiveDate, Today) then begin
      CurrentDate := FActiveDate;
    end else begin
      Result := -1;
      Exit;
    end;
  end;

  LastRow := Grid.RowCount - 1;
  for Col := 1 to Grid.ColCount - 1 do begin
    if Trim(Grid.Cells[Col, LastRow]) <> '' then begin
      Inc(LastRow);
      Break;
    end;
................................................................................
  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;
................................................................................
  KeyShift := Shift * [ssShift, ssCtrl, ssAlt];
  if (KeyShift = []) and (goEditing in Grid.Options)
      and (Grid.Col = Grid.ColCount - 1) and (Grid.Row = Grid.RowCount - 1) then
  begin
    AddRow(FActiveDate);
  end else if ssCtrl in KeyShift then begin
    if ssShift in KeyShift then begin
      if FActiveDate - 1 >= dtpDay.MinDate then
        SetDate(FActiveDate - 1);
    end else begin
      if FActiveDate + 1 <= dtpDay.MaxDate then
        SetDate(FActiveDate + 1);
    end{if};
  end{if};
end{TfrmEntry.HandleCtrlTab};

end.

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

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
					</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">7</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.7</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"/>







|











|







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
					</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">9</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.9</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"/>

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

cannot compute difference between binary files