Subversion Repositories delphiutils

Rev

Rev 79 | Rev 81 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
78 daniel-mar 1
unit ZeiterfassungMain;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7
  Dialogs, DB, ADODB, Grids, Wwdbigrd, Wwdbgrid, ExtCtrls, DBCtrls, StdCtrls;
8
 
9
type
10
  TForm1 = class(TForm)
11
    ADOConnection1: TADOConnection;
12
    wwDBGrid1: TwwDBGrid;
13
    ADOTable1: TADOTable;
14
    DataSource1: TDataSource;
15
    ADOTable1TAG: TWideStringField;
16
    ADOTable1KOMMEN: TWideStringField;
17
    ADOTable1PAUSE_START: TWideStringField;
18
    ADOTable1PAUSE_ENDE: TWideStringField;
19
    ADOTable1GEHEN: TWideStringField;
20
    ADOTable1SONSTIGER_ABZUG: TWideStringField;
21
    ADOTable1ZUHAUSE: TWideStringField;
22
    ADOTable1BERSTUNDEN_SALDO: TIntegerField;
23
    ADOTable1BERSTUNDEN: TIntegerField;
24
    ADOTable1FREIER_TAG: TBooleanField;
25
    Panel1: TPanel;
26
    Button1: TButton;
27
    DBNavigator1: TDBNavigator;
28
    ADOTable1WOCHENTAG: TStringField;
29
    ADOTable1USERNAME: TStringField;
30
    ComboBox1: TComboBox;
31
    Label1: TLabel;
32
    Label2: TLabel;
79 daniel-mar 33
    ADOTable1BEMERKUNG: TStringField;
78 daniel-mar 34
    procedure ADOTable1NewRecord(DataSet: TDataSet);
35
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
36
    procedure ADOTable1BeforePost(DataSet: TDataSet);
37
    procedure ADOTable1BERSTUNDEN_SALDOGetText(Sender: TField; var Text: string;
38
      DisplayText: Boolean);
39
    procedure ADOTable1BERSTUNDENGetText(Sender: TField; var Text: string;
40
      DisplayText: Boolean);
41
    procedure wwDBGrid1CalcCellColors(Sender: TObject; Field: TField;
42
      State: TGridDrawState; Highlight: Boolean; AFont: TFont; ABrush: TBrush);
43
    procedure ADOTable1AfterPost(DataSet: TDataSet);
44
    procedure Button1Click(Sender: TObject);
45
    procedure ADOTable1TAGChange(Sender: TField);
46
    procedure ADOTable1SONSTIGER_ABZUGSetText(Sender: TField;
47
      const Text: string);
48
    procedure ADOTable1ZUHAUSESetText(Sender: TField; const Text: string);
49
    procedure ADOTable1GEHENSetText(Sender: TField; const Text: string);
50
    procedure ADOTable1PAUSE_ENDESetText(Sender: TField; const Text: string);
51
    procedure ADOTable1PAUSE_STARTSetText(Sender: TField; const Text: string);
52
    procedure ADOTable1KOMMENSetText(Sender: TField; const Text: string);
53
    procedure FormShow(Sender: TObject);
54
    procedure ADOTable1WOCHENTAGGetText(Sender: TField; var Text: string;
55
      DisplayText: Boolean);
56
    procedure ComboBox1Change(Sender: TObject);
57
    procedure ADOTable1TAGSetText(Sender: TField; const Text: string);
58
    procedure ADOTable1AfterDelete(DataSet: TDataSet);
59
    procedure ADOTable1TAGGetText(Sender: TField; var Text: string;
60
      DisplayText: Boolean);
61
    procedure ADOTable1KOMMENGetText(Sender: TField; var Text: string;
62
      DisplayText: Boolean);
63
    procedure ADOTable1PAUSE_STARTGetText(Sender: TField; var Text: string;
64
      DisplayText: Boolean);
65
    procedure ADOTable1PAUSE_ENDEGetText(Sender: TField; var Text: string;
66
      DisplayText: Boolean);
67
    procedure ADOTable1GEHENGetText(Sender: TField; var Text: string;
68
      DisplayText: Boolean);
69
    procedure ADOTable1SONSTIGER_ABZUGGetText(Sender: TField; var Text: string;
70
      DisplayText: Boolean);
71
    procedure ADOTable1ZUHAUSEGetText(Sender: TField; var Text: string;
72
      DisplayText: Boolean);
73
  private
74
    function GueltigeZeile: boolean;
75
  protected
76
    procedure ReorgDataSet;
77
    procedure ReorgAll;
78
    function RegelArbeitszeit: integer;
79
  end;
80
 
81
var
82
  Form1: TForm1;
83
 
84
implementation
85
 
86
{$R *.dfm}
87
 
88
// TODO: Trennstriche zwischen Wochen oder zwischen Urlauben
79 daniel-mar 89
// IDEE: Wochenend-Multiplikator
80 daniel-mar 90
// IDEE: Manche Tage nicht mitrechnen
78 daniel-mar 91
 
92
uses
93
  DateUtils, StrUtils, IniFiles;
94
 
95
{$REGION 'Hilfsfunktionen'}
96
 
97
function SQL_Escape(const s: string): string;
98
begin
99
  result := StringReplace(s, '''', '\''', [rfReplaceAll]);
100
end;
101
 
102
function IstLeer(f: TField): boolean;
103
begin
104
  result := f.IsNull or (f.AsString = '') or (f.AsString = '00:00:00');
105
end;
106
 
107
function Minuten(f: TField): integer;
108
begin
109
  if IstLeer(f) then
110
  begin
111
    result := 0;
112
  end
113
  else
114
  begin
115
    result := MinuteOfTheDay(f.AsDateTime);
116
  end;
117
end;
118
 
79 daniel-mar 119
function MinutenZuHF_Int(min: integer): string;
78 daniel-mar 120
var
121
  d: integer;
122
begin
79 daniel-mar 123
  d := min;
124
  if d < 0 then
125
  begin
126
    result := '-';
127
    d := -d;
128
  end
129
  else
130
  begin
131
    result := '';
132
  end;
133
  result := result + Format('%.2d:%.2d', [d div 60, d mod 60]);
134
end;
135
 
136
function MinutenZuHF(f: TField): string;
137
begin
78 daniel-mar 138
  if IstLeer(f) then
139
  begin
140
    result := '';
141
  end
142
  else
143
  begin
79 daniel-mar 144
    result := MinutenZuHF_Int(f.AsInteger);
78 daniel-mar 145
  end;
146
end;
147
 
148
function EchtesDatum(f: TField): TDate;
149
begin
150
  if Copy(f.AsString, 5, 1) = '-' then
151
  begin
152
    result := EncodeDate(
153
    StrtoInt(Copy(f.AsString, 1, 4)),
154
    StrtoInt(Copy(f.AsString, 6, 2)),
155
    StrtoInt(Copy(f.AsString, 9, 2))
156
    );
157
  end
158
  else
159
    result := StrToDate(f.AsString);
160
end;
161
 
162
function WUserName: String;
163
var
164
  nSize: DWord;
165
begin
166
  nSize := 1024;
167
  SetLength(Result, nSize);
168
  if GetUserName(PChar(Result), nSize) then
169
    SetLength(Result, nSize-1)
170
  else
171
    RaiseLastOSError;
172
end;
173
 
174
{$ENDREGION}
175
 
176
function TForm1.RegelArbeitszeit: integer;
177
var
178
  test: TADOQuery;
179
begin
180
  test := TADOQuery.Create(nil);
181
  try
182
    test.Connection := ADOConnection1;
183
    test.Close;
184
    test.SQL.Text := 'select MINUTEN from REGELARBEITSZEIT where USERNAME = ''' + SQL_Escape(ComboBox1.Text) + '''';
185
    test.Open;
186
    if test.RecordCount = 0 then
187
    begin
188
      result := 8 * 60;
189
    end
190
    else
191
    begin
192
      result := test.FieldByName('MINUTEN').AsInteger;
193
    end;
194
  finally
195
    test.Free;
196
  end;
197
end;
198
 
199
procedure TForm1.ReorgAll;
200
var
201
  saldo: integer;
202
  baks: string;
203
  bakEv: TDataSetNotifyEvent;
204
  dead: boolean;
205
begin
206
  if ADOTable1TAG.IsNull then
207
  begin
208
    baks := '';
209
  end
210
  else
211
  begin
212
    if Copy(ADOTable1TAG.AsString, 5, 1) = '-' then
213
      baks := ADOTable1TAG.AsString
214
    else
215
      DateTimeToString(baks, 'YYYY-MM-DD', ADOTable1TAG.AsDateTime);
216
  end;
79 daniel-mar 217
  ADOTable1.Requery();
218
 
78 daniel-mar 219
  bakEv := ADOTable1.AfterPost;
220
  ADOTable1.AfterPost := nil;
79 daniel-mar 221
  ADOTable1.DisableControls;
78 daniel-mar 222
  try
223
    ADOTable1.First;
224
    saldo := 0;
225
    dead := false;
226
    while not ADOTable1.Eof do
227
    begin
228
      ADOTable1.Edit;
229
      if not dead then ReorgDataSet;
230
      dead := dead or ADOTable1BERSTUNDEN.IsNull;
231
      if dead then
232
      begin
233
        ADOTable1BERSTUNDEN_SALDO.Clear;
234
      end
235
      else
236
      begin
237
        saldo := saldo + ADOTable1BERSTUNDEN.AsInteger;
238
        ADOTable1BERSTUNDEN_SALDO.AsInteger := saldo;
239
        saldo := ADOTable1BERSTUNDEN_SALDO.AsInteger;
240
      end;
241
      ADOTable1.Post;
242
      ADOTable1.Next;
243
    end;
244
  finally
245
    if baks <> '' then ADOTable1.Locate('USERNAME;TAG', VarArrayOf([WUserName, baks]), []);
246
    ADOTable1.AfterPost := bakEv;
79 daniel-mar 247
    ADOTable1.EnableControls;
78 daniel-mar 248
  end;
249
end;
250
 
251
procedure TForm1.ADOTable1AfterDelete(DataSet: TDataSet);
252
begin
253
  ReorgAll;
254
end;
255
 
256
procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
257
begin
258
  ReorgAll;
259
end;
260
 
261
function TForm1.GueltigeZeile: boolean;
262
begin
263
  result := false;
264
 
265
  if IstLeer(ADOTable1KOMMEN) <> IstLeer(ADOTable1GEHEN) then exit;
266
  if IstLeer(ADOTable1PAUSE_START) <> IstLeer(ADOTable1PAUSE_ENDE) then exit;
267
  if not IstLeer(ADOTable1PAUSE_START) and (ADOTable1PAUSE_START.AsDateTime < ADOTable1KOMMEN.AsDateTime) then exit;
268
  if not IstLeer(ADOTable1PAUSE_ENDE) and (ADOTable1PAUSE_ENDE.AsDateTime < ADOTable1PAUSE_START.AsDateTime) then exit;
269
  if not IstLeer(ADOTable1GEHEN) and (ADOTable1GEHEN.AsDateTime < ADOTable1KOMMEN.AsDateTime) then exit;
270
  if not IstLeer(ADOTable1GEHEN) and not IstLeer(ADOTable1PAUSE_START) and (ADOTable1GEHEN.AsDateTime < ADOTable1PAUSE_START.AsDateTime) then exit;
271
  if not IstLeer(ADOTable1GEHEN) and not IstLeer(ADOTable1PAUSE_ENDE) and (ADOTable1GEHEN.AsDateTime < ADOTable1PAUSE_ENDE.AsDateTime) then exit;
272
 
273
  result := true;
274
end;
275
 
276
procedure TForm1.ReorgDataSet;
277
var
278
  m: integer;
279
begin
280
  if GueltigeZeile then
281
  begin
282
    m :=   (Minuten(ADOTable1GEHEN) - Minuten(ADOTable1KOMMEN))
283
         - (Minuten(ADOTable1PAUSE_ENDE) - Minuten(ADOTable1PAUSE_START))
284
         - Minuten(ADOTable1SONSTIGER_ABZUG)
285
         + Minuten(ADOTable1ZUHAUSE);
286
 
287
    if not ADOTable1FREIER_TAG.AsBoolean then
288
    begin
289
      m := m - RegelArbeitszeit;
290
    end;
291
 
292
    ADOTable1BERSTUNDEN.AsInteger := m;
293
  end
294
  else
295
  begin
296
    ADOTable1BERSTUNDEN.Clear;
297
  end;
298
end;
299
 
300
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
301
begin
302
  if (ADOTable1.State = dsInsert) and ADOTable1TAG.IsNull then
303
  begin
304
    AdoTable1.Cancel;
305
    Abort;
306
  end;
307
 
308
  ReorgDataSet;
309
end;
310
 
311
procedure TForm1.ADOTable1BERSTUNDENGetText(Sender: TField; var Text: string;
312
  DisplayText: Boolean);
313
begin
314
  Text := MinutenZuHF(ADOTable1BERSTUNDEN);
315
end;
316
 
317
procedure TForm1.ADOTable1BERSTUNDEN_SALDOGetText(Sender: TField;
318
  var Text: string; DisplayText: Boolean);
319
begin
320
  Text := MinutenZuHF(ADOTable1BERSTUNDEN_SALDO);
321
end;
322
 
323
procedure TForm1.ADOTable1GEHENGetText(Sender: TField; var Text: string;
324
  DisplayText: Boolean);
325
begin
326
  Text := Copy(Sender.AsString, 1, 5);
327
end;
328
 
329
procedure TForm1.ADOTable1GEHENSetText(Sender: TField; const Text: string);
330
begin
331
  if Text = '' then
332
  begin
333
    ADOTable1GEHEN.Clear;
334
  end
335
  else
336
  begin
80 daniel-mar 337
    if Pos(':', Text) = 0 then
338
      ADOTable1GEHEN.AsString := Text + ':00'
339
    else
340
      ADOTable1GEHEN.AsString := Text;
78 daniel-mar 341
  end;
342
end;
343
 
344
procedure TForm1.ADOTable1KOMMENGetText(Sender: TField; var Text: string;
345
  DisplayText: Boolean);
346
begin
347
  Text := Copy(Sender.AsString, 1, 5);
348
end;
349
 
350
procedure TForm1.ADOTable1KOMMENSetText(Sender: TField; const Text: string);
351
begin
352
  if Text = '' then
353
  begin
354
    ADOTable1KOMMEN.Clear;
355
  end
356
  else
357
  begin
80 daniel-mar 358
    if Pos(':', Text) = 0 then
359
      ADOTable1KOMMEN.AsString := Text + ':00'
360
    else
361
      ADOTable1KOMMEN.AsString := Text;
78 daniel-mar 362
  end;
363
end;
364
 
365
procedure TForm1.ADOTable1NewRecord(DataSet: TDataSet);
366
var
367
  test: TADOQuery;
368
begin
369
  ADOTable1FREIER_TAG.AsBoolean := false;
370
  ADOTable1USERNAME.AsString := WUserName;
371
  test := TADOQuery.Create(nil);
372
  try
373
    test.Connection := ADOConnection1;
374
    test.Close;
79 daniel-mar 375
    test.SQL.Text := 'select * from TAGE where TAG = ''' + DateToStr(Date) + ''' and USERNAME = ''' + SQL_Escape(ComboBox1.Text) + '''';
78 daniel-mar 376
    test.Open;
377
    if test.RecordCount = 0 then
378
    begin
379
      ADOTable1TAG.AsDateTime := Date;
380
      ADOTable1KOMMEN.AsString := TimeToStr(Time);
381
      ADOTable1FREIER_TAG.AsBoolean := (DayOfWeek(Date) = 1{Sunday}) or
382
                                       (DayOfWeek(Date) = 7{Saturday});
383
    end;
384
  finally
385
    test.Free;
386
  end;
387
 
388
  wwDBGrid1.SelectedField := ADOTable1TAG;
389
end;
390
 
391
procedure TForm1.ADOTable1PAUSE_ENDEGetText(Sender: TField; var Text: string;
392
  DisplayText: Boolean);
393
begin
394
  Text := Copy(Sender.AsString, 1, 5);
395
end;
396
 
397
procedure TForm1.ADOTable1PAUSE_ENDESetText(Sender: TField; const Text: string);
398
begin
399
  if Text = '' then
400
  begin
401
    ADOTable1PAUSE_ENDE.Clear;
402
  end
403
  else
404
  begin
80 daniel-mar 405
    if Pos(':', Text) = 0 then
406
      ADOTable1PAUSE_ENDE.AsString := Text + ':00'
407
    else
408
      ADOTable1PAUSE_ENDE.AsString := Text;
78 daniel-mar 409
  end;
410
end;
411
 
412
procedure TForm1.ADOTable1PAUSE_STARTGetText(Sender: TField; var Text: string;
413
  DisplayText: Boolean);
414
begin
415
  Text := Copy(Sender.AsString, 1, 5);
416
end;
417
 
418
procedure TForm1.ADOTable1PAUSE_STARTSetText(Sender: TField;
419
  const Text: string);
420
begin
421
  if Text = '' then
422
  begin
423
    ADOTable1PAUSE_START.Clear;
424
  end
425
  else
426
  begin
80 daniel-mar 427
    if Pos(':', Text) = 0 then
428
      ADOTable1PAUSE_START.AsString := Text + ':00'
429
    else
430
      ADOTable1PAUSE_START.AsString := Text;
78 daniel-mar 431
  end;
432
end;
433
 
434
procedure TForm1.ADOTable1SONSTIGER_ABZUGGetText(Sender: TField;
435
  var Text: string; DisplayText: Boolean);
436
begin
437
  Text := Copy(Sender.AsString, 1, 5);
438
end;
439
 
440
procedure TForm1.ADOTable1SONSTIGER_ABZUGSetText(Sender: TField;
441
  const Text: string);
442
begin
443
  if Text = '' then
444
  begin
445
    ADOTable1SONSTIGER_ABZUG.Clear;
446
  end
447
  else
448
  begin
80 daniel-mar 449
    if Pos(':', Text) = 0 then
450
      ADOTable1SONSTIGER_ABZUG.AsString := Text + ':00'
451
    else
452
      ADOTable1SONSTIGER_ABZUG.AsString := Text;
78 daniel-mar 453
  end;
454
end;
455
 
456
procedure TForm1.ADOTable1TAGChange(Sender: TField);
457
begin
458
  ADOTable1FREIER_TAG.AsBoolean := (DayOfWeek(ADOTable1TAG.AsDateTime) = 1{Sunday}) or
459
                                   (DayOfWeek(ADOTable1TAG.AsDateTime) = 7{Saturday});
460
  // TODO: "Wochentag" Feld aktualisieren
461
end;
462
 
463
procedure TForm1.ADOTable1TAGGetText(Sender: TField; var Text: string;
464
  DisplayText: Boolean);
465
begin
79 daniel-mar 466
  if IstLeer(Sender) then
467
    Text := Sender.AsString
468
  else
469
    Text := DateToStr(EchtesDatum(Sender));
78 daniel-mar 470
end;
471
 
472
procedure TForm1.ADOTable1TAGSetText(Sender: TField; const Text: string);
473
var
474
  i, punktCount: integer;
475
begin
476
  punktCount := 0;
477
  for i := 1 to Length(Text) do
478
  begin
479
    if Text[i] = '.' then inc(punktCount);
480
  end;
481
 
482
  if punktCount = 1 then
483
  begin
484
    ADOTable1TAG.AsString := Text + '.' + IntToStr(CurrentYear);
485
  end
486
  else if (PunktCount = 2) and EndsStr('.',Text) then
487
  begin
488
    ADOTable1TAG.AsString := Text + IntToStr(CurrentYear);
489
  end
490
  else
491
  begin
492
    ADOTable1TAG.AsString := Text;
493
  end;
494
end;
495
 
496
procedure TForm1.ADOTable1WOCHENTAGGetText(Sender: TField; var Text: string;
497
  DisplayText: Boolean);
498
begin
499
  try
500
    if ADOTable1TAG.AsString <> '' then
501
      Text := ShortDayNames[DayOfWeek(EchtesDatum(ADOTable1TAG))]
502
    else
503
      Text := '';
504
  except
505
    Text := '??';
506
  end;
507
end;
508
 
509
procedure TForm1.ADOTable1ZUHAUSEGetText(Sender: TField; var Text: string;
510
  DisplayText: Boolean);
511
begin
512
  Text := Copy(Sender.AsString, 1, 5);
513
end;
514
 
515
procedure TForm1.ADOTable1ZUHAUSESetText(Sender: TField; const Text: string);
516
begin
517
  if Text = '' then
518
  begin
519
    ADOTable1ZUHAUSE.Clear;
520
  end
521
  else
522
  begin
80 daniel-mar 523
    if Pos(':', Text) = 0 then
524
      ADOTable1ZUHAUSE.AsString := Text + ':00'
525
    else
526
      ADOTable1ZUHAUSE.AsString := Text;
78 daniel-mar 527
  end;
528
end;
529
 
530
procedure TForm1.Button1Click(Sender: TObject);
531
begin
532
  ReorgAll;
533
end;
534
 
535
procedure TForm1.ComboBox1Change(Sender: TObject);
536
begin
79 daniel-mar 537
  Label2.Caption := MinutenZuHF_Int(RegelArbeitszeit) + ' Std.';
538
 
539
  ADOTable1.DisableControls;
540
 
78 daniel-mar 541
  ADOTable1.Active := false;
79 daniel-mar 542
  ADOTable1.ReadOnly := false;
78 daniel-mar 543
  ADOTable1.Filter := 'USERNAME = ''' + SQL_Escape(ComboBox1.Text) + '''';
544
  ADOTable1.Filtered := true;
545
  ADOTable1.Active := true;
79 daniel-mar 546
 
547
  ReorgAll;
548
 
549
  ADOTable1.Active := false;
550
  ADOTable1.ReadOnly := ComboBox1.Text <> WUserName;
551
  ADOTable1.Active := true;
552
 
78 daniel-mar 553
  ADOTable1.Last;
554
  Button1.Enabled := not ADOTable1.ReadOnly;
555
 
79 daniel-mar 556
  ADOTable1.EnableControls;
78 daniel-mar 557
end;
558
 
559
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
560
begin
561
  if ADOTable1.State in [dsEdit, dsInsert] then
562
  begin
563
    try
564
      ADOTable1.Post;
565
    except
566
      on E: EAbort do
567
      begin
568
        exit;
569
      end;
570
    end;
571
  end;
572
end;
573
 
574
procedure TForm1.FormShow(Sender: TObject);
575
var
576
  test: TADOQuery;
577
  ini: TMemIniFile;
578
resourcestring
579
  DefaultConnectionString = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Zeiterfassung;' +
580
                            'Data Source=SHS\FiVe,49007;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MARSCHALL;Use Encryption for Data=False;Tag with column collation when possible=False;';
581
begin
582
  ini := TMemIniFile.Create(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + ChangeFileExt(ExtractFileName(ParamStr(0)), '.ini'));
583
  try
584
    ADOConnection1.ConnectionString := ini.ReadString('Connection', 'ConnectionString', DefaultConnectionString);
585
  finally
586
    ini.Free;
587
  end;
588
  ADOConnection1.Connected := true;
589
 
590
  {$REGION 'Username Combobox füllen'}
591
  test := TADOQuery.Create(nil);
592
  try
593
    test.Connection := ADOConnection1;
594
    test.Close;
595
    test.SQL.Text := 'select distinct USERNAME from TAGE';
596
    test.Open;
597
    ComboBox1.Items.Clear;
598
    while not test.EOF do
599
    begin
600
      ComboBox1.Items.Add(test.FieldByName('USERNAME').AsString);
601
      test.Next;
602
    end;
603
  finally
604
    test.Free;
605
  end;
606
 
607
  if ComboBox1.Items.IndexOf(WUserName) = -1 then
608
    ComboBox1.Items.Add(WUserName);
609
 
610
  ComboBox1.Sorted := true;
611
 
612
  ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(WUserName);
613
 
614
  ComboBox1Change(ComboBox1);
615
  {$ENDREGION}
616
 
617
  if wwDBGrid1.CanFocus then wwDBGrid1.SetFocus;
618
  wwDBGrid1.SelectedField := ADOTable1TAG;
619
end;
620
 
621
procedure TForm1.wwDBGrid1CalcCellColors(Sender: TObject; Field: TField;
622
  State: TGridDrawState; Highlight: Boolean; AFont: TFont; ABrush: TBrush);
623
begin
624
  if Highlight then exit;
625
 
79 daniel-mar 626
  if (Field.FieldName = ADOTable1WOCHENTAG.FieldName) or
627
     (Field.FieldName = ADOTable1BERSTUNDEN.FieldName) or
78 daniel-mar 628
     (Field.FieldName = ADOTable1BERSTUNDEN_SALDO.FieldName) then
629
  begin
630
    ABrush.Color := clBtnFace;
631
  end;
632
 
633
  if (Field.FieldName = ADOTable1BERSTUNDEN.FieldName) then
634
  begin
635
    if ADOTable1BERSTUNDEN.AsInteger < 0 then
636
    begin
637
      AFont.Color := clRed;
638
    end;
639
  end;
640
 
641
  if (Field.FieldName = ADOTable1BERSTUNDEN_SALDO.FieldName) then
642
  begin
643
    if ADOTable1BERSTUNDEN_SALDO.AsInteger < 0 then
644
    begin
645
      AFont.Color := clRed;
646
    end;
647
  end;
648
end;
649
 
650
end.