Statistiques
| Révision:

root / UFLogeT.pas @ 3

Historique | Voir | Annoter | Télécharger (21,733 ko)

1
unit UFLogeT ;
2

    
3
interface
4

    
5
uses
6
  Windows, Forms, Classes, Controls, StdCtrls, Buttons, ExtCtrls, ComCtrls,
7
  PBNumEdit, PBSuperSpin, JvEnterTab, JvExControls, UVariables;
8

    
9
type
10
  TFLogeT = class(TForm)
11
    GBLogement: TGroupBox;
12
    CBLoge: TComboBox;
13
    LBRule: TListBox;
14
    LNo: TLabel;
15
    LModeFin: TLabel;
16
    GBLoge: TGroupBox;
17
    GBRule: TGroupBox;
18
    SBAddRule: TSpeedButton;
19
    SBDelRule: TSpeedButton;
20
    SBAddLoge: TSpeedButton;
21
    SBDelLoge: TSpeedButton;
22
    SBRename: TSpeedButton;
23
    SBComment: TSpeedButton;
24
    GBEnd: TGroupBox;
25
    LUnitFin: TLabel;
26
    PBValFin: TPBNumEdit;
27
    CBModeFin: TComboBox;
28
    TC: TTabControl;
29
    LTyp: TLabel;
30
    CBTyp: TComboBox;
31
    LSol: TLabel;
32
    CBSol: TComboBox;
33
    LTemp: TLabel;
34
    PBTemp: TPBSuperSpin;
35
    GBComport: TGroupBox;
36
    LDebout: TLabel;
37
    PBAct: TPBSuperSpin;
38
    TBAct: TTrackBar;
39
    LCalme: TLabel;
40
    LMoyenne: TLabel;
41
    LActive: TLabel;
42
    SBReset: TSpeedButton;
43
    SBSave: TSpeedButton;
44
    SBPrint: TSpeedButton;
45
    PLoge: TPanel;
46
    GBParam: TGroupBox;
47
    PAct: TPanel;
48
    JvEnterAsTab: TJvEnterAsTab;
49
    procedure FormShow(Sender: TObject);
50
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
51
    procedure LBRuleDrawItem(Control: TWinControl; Index: Integer;
52
      Rect: TRect; State: TOwnerDrawState);
53
    procedure CBLogeChange(Sender: TObject);
54
    procedure SBAddLogeClick(Sender: TObject);
55
    procedure SBDelLogeClick(Sender: TObject);
56
    procedure SBAddRuleClick(Sender: TObject);
57
    procedure SBDelRuleClick(Sender: TObject);
58
    procedure LBRuleClick(Sender: TObject);
59
    procedure FormActivate(Sender: TObject);
60
    procedure FormDeactivate(Sender: TObject);
61
    procedure SBRenameClick(Sender: TObject);
62
    procedure SBCommentClick(Sender: TObject);
63
    procedure PBValFinChange(Sender: TObject);
64
    procedure TCChange(Sender: TObject);
65
    procedure CBTypChange(Sender: TObject);
66
    procedure CBSolChange(Sender: TObject);
67
    procedure PBTempChange(Sender: TObject);
68
    procedure PBActChange(Sender: TObject);
69
    procedure TBActChange(Sender: TObject);
70
    procedure SBResetClick(Sender: TObject);
71
    procedure SBSaveClick(Sender: TObject);
72
    procedure SBPrintClick(Sender: TObject);
73
    procedure FormCreate(Sender: TObject);
74
  private
75
    { D?clarations priv?es }
76
    Update, Modified : boolean ;
77
    IdxLogeT, NbRule, NumRule : integer ;
78
    Rule : array[1..MAX_RULE] of RecRuleLogeT ;
79
    procedure Save ;
80
  public
81
    { D?clarations publiques }
82
    function StrModeFin (etat, regle : integer) : string ;
83
  end;
84

    
85
var
86
  FLogeT: TFLogeT;
87

    
88
implementation
89

    
90
uses
91
  Dialogs, Graphics, SysUtils, gnugettext, UStrings, UInit, UUtil, UFindRec,
92
  UFComment, UFRapLogeT ;
93

    
94
{$R *.dfm}
95

    
96
{ TFLogeT }
97

    
98
procedure TFLogeT.FormCreate(Sender: TObject);
99
begin
100
  if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1
101
  then
102
    Font.Name := 'Arial Unicode MS';
103
  TranslateComponent(Self);
104
  Constraints.MinWidth := 616 + (Width - ClientWidth);
105
  Width := Constraints.MinWidth;
106
  Constraints.MinHeight := 516 + (Height - ClientHeight);
107
  Height := Constraints.MinHeight;
108
  CBModeFin.ItemIndex := 0;
109
  LTemp.Caption := Format('%s (%s)', [LTemp.Caption, StrDegC]);
110
end;
111

    
112
procedure TFLogeT.FormShow (Sender : TObject) ;
113
begin
114
  Modified := FALSE ;
115
  StringsLogeT (CBLoge.Items, TRUE) ;
116
  SBAddLoge.Enabled := IsComplete or (ListLogeT.Count < 5) ;
117
  SBSave.Enabled := IsComplete or IsEducation ;
118
  IdxLogeT := -1 ;
119
//  CBLogeChange (nil) ;
120
end ;
121

    
122
procedure TFLogeT.FormClose (Sender : TObject ; var Action : TCloseAction) ;
123
begin
124
  if Modified then Save ;
125
  Action := caFree ;
126
  NumWinLogeT := -1 ;
127
end ;
128

    
129
procedure TFLogeT.FormActivate (Sender : TObject) ;
130
begin
131
//  if IdxLogeT <> -1
132
//  then
133
//    PLogeT := ListLogeT[IdxLogeT] ;
134
  CBLogeChange (nil) ;
135
  GBParam.Enabled := IsComplete or IsEducation or IsEvaluation ;
136
  SBAddRule.Visible := GBParam.Enabled ;
137
  SBDelRule.Visible := GBParam.Enabled ;
138
end ;
139

    
140
procedure TFLogeT.FormDeactivate (Sender : TObject) ;
141
begin
142
  if Modified then Save ;
143
end ;
144

    
145
procedure TFLogeT.Save ;
146
var
147
  s : string ;
148
begin
149
  Modified := FALSE ;
150
  if IsComplete or IsEducation
151
  then
152
    if MessageDlg (Caption + sLineBreak + MsgSave, mtConfirmation, [mbYes, mbNo], 0) = mrYes
153
    then
154
    begin
155
      SaveLogeT ;
156
      if not LogeTValid (PLogeT)
157
      then
158
        MessageDlg(Format (MsgInvalidData, [Caption, PLogeT.Nom]), mtWarning, [mbOK], 0) ;
159
    end
160
    else
161
    begin
162
      LoadLogeT ;
163
      s := CBLoge.Text ;
164
      StringsLogeT (CBLoge.Items, TRUE) ;
165
      if FindIdxLogeT (s) = -1
166
      then
167
      begin
168
        IdxLogeT := -1 ;
169
        CBLogeChange (nil) ;
170
      end
171
      else
172
        CBLoge.ItemIndex := CBLoge.Items.IndexOf (s) ;
173
    end ;
174
end ;
175

    
176
procedure TFLogeT.CBLogeChange (Sender : TObject) ;
177
begin
178
  if (IdxLogeT <> -1) and (CBLoge.Text <> PLogeT.Nom)
179
  then
180
    if Modified then Save ;
181
  IdxLogeT := FindIdxLogeT (CBLoge.Text) ;
182
  if IdxLogeT = -1
183
  then
184
  begin
185
    CBLoge.Repaint ;
186
    SBDelLoge.Enabled := FALSE ;
187
    SBRename.Enabled := FALSE ;
188
    SBComment.Enabled := FALSE ;
189
    SBSave.Enabled := FALSE ;
190
    SBPrint.Enabled := FALSE ;
191
    TC.Visible := FALSE ;
192
  end
193
  else // Affichage de l'enregistrement
194
  begin
195
    SBDelLoge.Enabled := TRUE ;
196
    SBRename.Enabled := TRUE ;
197
    SBComment.Enabled := TRUE ;
198
    SBSave.Enabled := TRUE ;
199
    SBPrint.Enabled := TRUE ;
200
    TC.Visible := TRUE ;
201
    PLogeT := ListLogeT[IdxLogeT] ;
202
    with PLogeT^ do
203
      CBLoge.Hint := Memo ;
204
    TCChange (nil) ;
205
  end ;
206
end ;
207

    
208
procedure TFLogeT.SBAddLogeClick (Sender : TObject) ;
209
var
210
  i, n, q : integer ;
211
  s : string ;
212
  ok : boolean ;
213
  PBackup : PRecLogeT ;
214
begin
215
  if Modified then Save ;
216
  if IdxLogeT = -1
217
  then
218
    q := mrNo
219
  else
220
    q := MessageDlg (MsgCopy, mtConfirmation, [mbYes, mbNo], 0) ;
221
  // Saisie du nouveau nom
222
  s := '' ;
223
  repeat
224
    if InputQuery (FLogeT.Caption, MsgName, s)
225
    then // V?rification du nom
226
    begin
227
      s := Trim (s) ; // Suppression des espaces au d?but et ? la fin
228
      if s = ''
229
      then // Pas de nom
230
      begin
231
        ok := FALSE ;
232
        MessageDlg (MsgNameEmpty, mtWarning, [mbOk], 0) ;
233
      end
234
      else
235
        if Length (s) > 25
236
        then // Nom trop long
237
        begin
238
          ok := FALSE ;
239
          MessageDlg (Format (MsgNameTooLarge, [25]), mtWarning, [mbOk], 0) ;
240
          s := Copy (s, 1, 25) ;
241
        end
242
        else
243
        begin
244
          ok := TRUE ;
245
          i := 0 ;
246
          while ok and (i < ListLogeT.Count) do
247
          begin
248
            PLogeT := ListLogeT[i] ;
249
            if PLogeT.Nom = s
250
            then // Nom d?j? utilis?
251
            begin
252
              ok := FALSE ;
253
              MessageDlg (MsgNameExists, mtWarning, [mbOk], 0) ;
254
            end
255
            else
256
              Inc (i) ;
257
          end ;
258
        end ;
259
    end
260
    else // Annulation
261
    begin
262
      s := '' ;
263
      if (IdxLogeT <> -1)
264
      then
265
        PLogeT := ListLogeT[IdxLogeT] ;
266
      ok := TRUE ;
267
    end ;
268
  until ok ;
269
  if s <> ''
270
  then // Cr?ation du nouvel enregistrement
271
  begin
272
    // Recherche du premier num?ro libre
273
    n := 0 ;
274
    repeat
275
      Inc (n) ;
276
      ok := TRUE ;
277
      i := 0 ;
278
      while ok and (i < ListLogeT.Count) do
279
      begin
280
        PLogeT := ListLogeT[i] ;
281
        if PLogeT.Num = n
282
        then
283
          ok := FALSE
284
        else
285
          Inc (i) ;
286
      end ;
287
    until ok ;
288
    New (PLogeT) ;
289
    with PLogeT^ do
290
    begin
291
      Nom := s ;
292
      Num := n ;
293
      if q = mrYes
294
      then
295
      begin
296
        PBackup := ListLogeT[IdxLogeT] ;
297
        Memo := PBackup.Memo ;
298
        NbRuleGest := PBackup.NbRuleGest ;
299
        RuleGest := PBackup.RuleGest ;
300
        NbRuleLact := PBackup.NbRuleLact ;
301
        RuleLact := PBackup.RuleLact ;
302
        NbRuleISSF := PBackup.NbRuleISSF ;
303
        RuleISSF := PBackup.RuleISSF ;
304
      end
305
      else
306
      begin
307
        Memo := '' ;
308
        NbRuleGest := 1 ;
309
        for i := 1 to MAX_RULE do
310
          with RuleGest[i] do
311
          begin
312
            ModeFin := -1 ;
313
            ValFin := 0 ;
314
            Typ := 0 ;
315
            Sol := 0 ;
316
            Temp := 20 ;
317
            Act := 240 ;
318
          end ;
319
        NbRuleLact := 1 ;
320
        for i := 1 to MAX_RULE do
321
          with RuleLact[i] do
322
          begin
323
            ModeFin := -1 ;
324
            ValFin := 0 ;
325
            Typ := 0 ;
326
            Sol := 0 ;
327
            Temp := 20 ;
328
            Act := 240 ;
329
          end ;
330
        NbRuleISSF := 1 ;
331
        for i := 1 to MAX_RULE do
332
          with RuleISSF[i] do
333
          begin
334
            ModeFin := -1 ;
335
            ValFin := 0 ;
336
            Typ := 0 ;
337
            Sol := 0 ;
338
            Temp := 20 ;
339
            Act := 240 ;
340
          end ;
341
      end ;
342
    end ;
343
    ListLogeT.Add (PLogeT) ;
344
    CBLoge.Items.Add (PLogeT.Nom) ;
345
    CBLoge.ItemIndex := CBLoge.Items.IndexOf (PLogeT.Nom) ;
346
    CBLogeChange (nil) ;
347
    Modified := TRUE ;
348
    SBAddLoge.Enabled := IsComplete or (ListLogeT.Count < 5) ;
349
    SBCommentClick (nil) ;
350
  end ;
351
end ;
352

    
353
procedure TFLogeT.SBDelLogeClick (Sender : TObject) ;
354
begin
355
  if LogeTUsed (PLogeT.Num)
356
  then // Enregistrement utilis?
357
    MessageDlg (MsgDelErr, mtWarning, [mbOk], 0)
358
  else // Suppression de l'enregistrement
359
    if MessageDlg (MsgDel, mtConfirmation, [mbYes, mbNo], 0) = mrYes
360
    then
361
    begin
362
      Dispose (PLogeT) ;
363
      ListLogeT.Delete (IdxLogeT) ;
364
      SaveLogeT ; // Sauvegarde !
365
      Modified := FALSE ;
366
      CBLoge.DeleteSelected ;
367
      IdxLogeT := -1 ;
368
      CBLoge.ItemIndex := -1 ;
369
      CBLogeChange (nil) ;
370
      SBAddLoge.Enabled := IsComplete or (ListLogeT.Count < 5) ;
371
    end ;
372
end ;
373

    
374
procedure TFLogeT.SBRenameClick (Sender : TObject) ;
375
var
376
  i : integer ;
377
  s : string ;
378
  ok : boolean ;
379
begin
380
  // Saisie du nouveau nom
381
  s := CBLoge.Text ;
382
  repeat
383
    if InputQuery (FLogeT.Caption, MsgRename, s) and (s <> CBLoge.Text)
384
    then // V?rification du nom
385
    begin
386
      s := Trim (s) ; // Suppression des espaces au d?but et ? la fin
387
      if s = ''
388
      then // Pas de nom
389
      begin
390
        ok := FALSE ;
391
        MessageDlg (MsgNameEmpty, mtWarning, [mbOk], 0) ;
392
      end
393
      else
394
        if Length (s) > 25
395
        then // Nom trop long
396
        begin
397
          ok := FALSE ;
398
          MessageDlg (Format (MsgNameTooLarge, [25]), mtWarning, [mbOk], 0) ;
399
          s := Copy (s, 1, 25) ;
400
        end
401
        else
402
        begin
403
          ok := TRUE ;
404
          i := 0 ;
405
          while ok and (i < ListLogeT.Count) do
406
          begin
407
            PLogeT := ListLogeT[i] ;
408
            if PLogeT.Nom = s
409
            then // Nom d?j? utilis?
410
            begin
411
              ok := FALSE ;
412
              MessageDlg (MsgNameExists, mtWarning, [mbOk], 0) ;
413
            end
414
            else
415
              Inc (i) ;
416
          end ;
417
        end ;
418
    end
419
    else // Annulation
420
    begin
421
      s := '' ;
422
      ok := TRUE ;
423
    end ;
424
  until ok ;
425
  PLogeT := ListLogeT[IdxLogeT] ;
426
  if s <> ''
427
  then // Renommer l'enregistrement
428
  begin
429
    PLogeT.Nom := s ;
430
    Modified := TRUE ;
431
    StringsLogeT (CBLoge.Items, TRUE) ;
432
    CBLoge.ItemIndex := CBLoge.Items.IndexOf (s) ;
433
  end ;
434
end ;
435

    
436
procedure TFLogeT.SBCommentClick (Sender : TObject) ;
437
begin
438
  // Saisie du commentaire
439
  FComment := TFComment.Create (Self) ;
440
  with FComment do
441
  begin
442
    Memo.Text := PLogeT.Memo ;
443
    if ShowModal = mrOk
444
    then // Commenter l'enregistrement
445
    begin
446
      PLogeT.Memo := Memo.Text ;
447
      Modified := TRUE ;
448
      CBLoge.Hint := PLogeT.Memo ;
449
    end ;
450
    Release ;
451
  end ;
452
end ;
453

    
454
procedure TFLogeT.SBSaveClick(Sender: TObject);
455
begin
456
  SaveLogeT ;
457
  if not LogeTValid (PLogeT)
458
  then
459
    MessageDlg(Format (MsgInvalidData, [Caption, PLogeT.Nom]), mtWarning, [mbOK], 0) ;
460
  Modified := FALSE ;
461
end;
462

    
463
procedure TFLogeT.SBPrintClick(Sender: TObject);
464
begin
465
  FRapLogeT := TFRapLogeT.Create (Self) ;
466
  FRapLogeT.QRRapport.PreviewModal ;
467
  FRapLogeT.Release ;
468
end;
469

    
470
procedure TFLogeT.TCChange (Sender : TObject) ;
471
var
472
  i : integer ;
473
begin
474
  if TC.TabIndex = 1
475
  then // Lactation
476
    GBComport.Visible := FALSE
477
  else
478
    GBComport.Visible := TRUE ;
479
  case TC.TabIndex of
480
    0 : // Gestation
481
      with PLogeT^ do
482
      begin
483
        NbRule := NbRuleGest ;
484
        for i := 1 to MAX_RULE do
485
          Rule[i] := RuleGest[i] ;
486
      end ;
487
    1 : // Lactation
488
      with PLogeT^ do
489
      begin
490
        NbRule := NbRuleLact ;
491
        for i := 1 to MAX_RULE do
492
          Rule[i] := RuleLact[i] ;
493
      end ;
494
    2 : // I.S.S.F.
495
      with PLogeT^ do
496
      begin
497
        NbRule := NbRuleISSF ;
498
        for i := 1 to MAX_RULE do
499
          Rule[i] := RuleISSF[i] ;
500
      end ;
501
  end ;
502
  LBRule.Clear ;
503
  with PLogeT^ do
504
    for i := 1 to NbRule do
505
      LBRule.Items.Add ('') ;
506
  LBRule.ItemIndex := 0 ;
507
  LBRuleClick (nil) ;
508
end ;
509

    
510
procedure TFLogeT.LBRuleClick (Sender : TObject) ;
511
begin
512
  NumRule := LBRule.ItemIndex + 1 ;
513
  if LBRule.Items.Count < MAX_RULE
514
  then
515
    SBAddRule.Enabled := TRUE
516
  else
517
    SBAddRule.Enabled := FALSE ;
518
  if NumRule = NbRule
519
  then // Fin
520
    SBDelRule.Enabled := FALSE
521
  else
522
    SBDelRule.Enabled := TRUE ;
523
  GBEnd.Visible := SBDelRule.Enabled ;
524
  with Rule[NumRule] do
525
  begin
526
    Update := TRUE ;
527
    PBValFin.AsInteger := ValFin ;
528
    CBTyp.ItemIndex := Typ ;
529
    CBSol.ItemIndex := Sol ;
530
    PBTemp.AsInteger := Temp ;
531
    PBAct.AsInteger := Act ;
532
    TBAct.Position := Act ;
533
    Update := FALSE ;
534
  end ;
535
end ;
536

    
537
procedure TFLogeT.LBRuleDrawItem (Control : TWinControl ; Index : Integer ;
538
  Rect : TRect ; State : TOwnerDrawState) ;
539
begin
540
  with (Control as TListBox).Canvas do
541
  begin
542
    // Cadre principal
543
    FillRect (Rect) ;
544
    // Texte
545
    SetTextAlign (Handle, TA_LEFT) ;
546
    Rect.Left := 22 ;
547
    TextRect (Rect, Rect.Left, Rect.Top, StrModeFin (TC.TabIndex, Index + 1)) ;
548
    Rect.Left := 0 ;
549
    // Num?ro
550
    SetTextAlign (Handle, TA_RIGHT) ;
551
    Rect.Right := 14 ;
552
    TextRect (Rect, Rect.Right, Rect.Top, Format ('%d', [Index + 1])) ;
553
  end ;
554
end ;
555

    
556
procedure TFLogeT.SBAddRuleClick (Sender : TObject) ;
557
var
558
  i : integer ;
559
begin
560
  for i := NbRule downto NumRule do
561
    Rule[i + 1] := Rule[i] ;
562
  with Rule[NumRule] do
563
  begin
564
    ModeFin := 0 ;
565
    ValFin := 0 ;
566
  end ;
567
  Inc (NbRule) ;
568
  case TC.TabIndex of
569
    0 : // Gestation
570
      with PLogeT^ do
571
      begin
572
        NbRuleGest := NbRule ;
573
        for i := 1 to MAX_RULE do
574
          RuleGest[i] := Rule[i] ;
575
      end ;
576
    1 : // Lactation
577
      with PLogeT^ do
578
      begin
579
        NbRuleLact := NbRule ;
580
        for i := 1 to MAX_RULE do
581
          RuleLact[i] := Rule[i] ;
582
      end ;
583
    2 : // I.S.S.F.
584
      with PLogeT^ do
585
      begin
586
        NbRuleISSF := NbRule ;
587
        for i := 1 to MAX_RULE do
588
          RuleISSF[i] := Rule[i] ;
589
      end ;
590
  end ;
591
  LBRule.Items.Add ('') ;
592
  LBRule.ItemIndex := NumRule - 1 ;
593
  LBRuleClick (nil) ;
594
  Modified := TRUE ;
595
  ActiveControl := PBValFin ;
596
end ;
597

    
598
procedure TFLogeT.SBDelRuleClick (Sender : TObject) ;
599
var
600
  i : integer ;
601
begin
602
  Dec (NbRule) ;
603
  for i := NumRule to NbRule do
604
    Rule[i] := Rule[i + 1] ;
605
  case TC.TabIndex of
606
    0 : // Gestation
607
      with PLogeT^ do
608
      begin
609
        NbRuleGest := NbRule ;
610
        for i := 1 to MAX_RULE do
611
          RuleGest[i] := Rule[i] ;
612
      end ;
613
    1 : // Lactation
614
      with PLogeT^ do
615
      begin
616
        NbRuleLact := NbRule ;
617
        for i := 1 to MAX_RULE do
618
          RuleLact[i] := Rule[i] ;
619
      end ;
620
    2 : // I.S.S.F.
621
      with PLogeT^ do
622
      begin
623
        NbRuleISSF := NbRule ;
624
        for i := 1 to MAX_RULE do
625
          RuleISSF[i] := Rule[i] ;
626
      end ;
627
  end ;
628
  i := NumRule ; // Position courante
629
  LBRule.DeleteSelected ;
630
  LBRule.ItemIndex := i - 1 ;
631
  LBRuleClick (nil) ;
632
  ActiveControl := LBRule ;
633
  Modified := TRUE ;
634
end ;
635

    
636
procedure TFLogeT.PBValFinChange (Sender : TObject) ;
637
begin
638
  if not Update
639
  then
640
  begin
641
    Modified := TRUE ;
642
    Rule[NumRule].ValFin := PBValFin.AsInteger ;
643
    case TC.TabIndex of
644
      0 : // Gestation
645
        with PLogeT^ do
646
        begin
647
          NbRuleGest := NbRule ;
648
          RuleGest[NumRule] := Rule[NumRule] ;
649
        end ;
650
      1 : // Lactation
651
        with PLogeT^ do
652
        begin
653
          NbRuleLact := NbRule ;
654
          RuleLact[NumRule] := Rule[NumRule] ;
655
        end ;
656
      2 : // I.S.S.F.
657
        with PLogeT^ do
658
        begin
659
          NbRuleISSF := NbRule ;
660
          RuleISSF[NumRule] := Rule[NumRule] ;
661
        end ;
662
    end ;
663
    LBRule.Repaint ;
664
  end ;
665
end ;
666

    
667
procedure TFLogeT.CBTypChange (Sender : TObject) ;
668
begin
669
  if not Update
670
  then
671
  begin
672
    Modified := TRUE ;
673
    Rule[NumRule].Typ := CBTyp.ItemIndex ;
674
    case TC.TabIndex of
675
      0 : // Gestation
676
        with PLogeT^ do
677
        begin
678
          NbRuleGest := NbRule ;
679
          RuleGest[NumRule] := Rule[NumRule] ;
680
        end ;
681
      1 : // Lactation
682
        with PLogeT^ do
683
        begin
684
          NbRuleLact := NbRule ;
685
          RuleLact[NumRule] := Rule[NumRule] ;
686
        end ;
687
      2 : // I.S.S.F.
688
        with PLogeT^ do
689
        begin
690
          NbRuleISSF := NbRule ;
691
          RuleISSF[NumRule] := Rule[NumRule] ;
692
        end ;
693
    end ;
694
//    LBRule.Repaint ;
695
    Update := TRUE ;
696
    if CBTyp.ItemIndex = 2
697
    then // Plein-air
698
    begin
699
      CBSol.ItemIndex := -1 ;
700
      CBSol.Enabled := FALSE ;
701
    end
702
    else
703
    begin
704
      CBSol.ItemIndex := Rule[NumRule].Sol ;
705
      CBSol.Enabled := TRUE ;
706
    end ;
707
    Update := FALSE ;
708
  end ;
709
end ;
710

    
711
procedure TFLogeT.CBSolChange (Sender : TObject) ;
712
begin
713
  if not Update
714
  then
715
  begin
716
    Modified := TRUE ;
717
    Rule[NumRule].Sol := CBSol.ItemIndex ;
718
    case TC.TabIndex of
719
      0 : // Gestation
720
        with PLogeT^ do
721
        begin
722
          NbRuleGest := NbRule ;
723
          RuleGest[NumRule] := Rule[NumRule] ;
724
        end ;
725
      1 : // Lactation
726
        with PLogeT^ do
727
        begin
728
          NbRuleLact := NbRule ;
729
          RuleLact[NumRule] := Rule[NumRule] ;
730
        end ;
731
      2 : // I.S.S.F.
732
        with PLogeT^ do
733
        begin
734
          NbRuleISSF := NbRule ;
735
          RuleISSF[NumRule] := Rule[NumRule] ;
736
        end ;
737
    end ;
738
//    LBRule.Repaint ;
739
  end ;
740
end ;
741

    
742
procedure TFLogeT.PBTempChange (Sender : TObject) ;
743
begin
744
  if not Update
745
  then
746
  begin
747
    Modified := TRUE ;
748
    Rule[NumRule].Temp := PBTemp.AsInteger ;
749
    case TC.TabIndex of
750
      0 : // Gestation
751
        with PLogeT^ do
752
        begin
753
          NbRuleGest := NbRule ;
754
          RuleGest[NumRule] := Rule[NumRule] ;
755
        end ;
756
      1 : // Lactation
757
        with PLogeT^ do
758
        begin
759
          NbRuleLact := NbRule ;
760
          RuleLact[NumRule] := Rule[NumRule] ;
761
        end ;
762
      2 : // I.S.S.F.
763
        with PLogeT^ do
764
        begin
765
          NbRuleISSF := NbRule ;
766
          RuleISSF[NumRule] := Rule[NumRule] ;
767
        end ;
768
    end ;
769
//    LBRule.Repaint ;
770
  end ;
771
end ;
772

    
773
procedure TFLogeT.PBActChange (Sender : TObject) ;
774
begin
775
  if not Update
776
  then
777
  begin
778
    Modified := TRUE ;
779
    Rule[NumRule].Act := PBAct.AsInteger ;
780
    TBAct.Position := PBAct.AsInteger ;
781
    case TC.TabIndex of
782
      0 : // Gestation
783
        with PLogeT^ do
784
        begin
785
          NbRuleGest := NbRule ;
786
          RuleGest[NumRule] := Rule[NumRule] ;
787
        end ;
788
      1 : // Lactation
789
        with PLogeT^ do
790
        begin
791
          NbRuleLact := NbRule ;
792
          RuleLact[NumRule] := Rule[NumRule] ;
793
        end ;
794
      2 : // I.S.S.F.
795
        with PLogeT^ do
796
        begin
797
          NbRuleISSF := NbRule ;
798
          RuleISSF[NumRule] := Rule[NumRule] ;
799
        end ;
800
    end ;
801
//    LBRule.Repaint ;
802
  end ;
803
end ;
804

    
805
procedure TFLogeT.TBActChange (Sender : TObject) ;
806
begin
807
  if not Update
808
    and (TBAct.Position >= TBAct.Min)
809
    and (TBAct.Position <= TBAct.Max)
810
  then
811
  begin
812
    Modified := TRUE ;
813
    Rule[NumRule].Act := TBAct.Position ;
814
    PBAct.AsInteger := TBAct.Position ;
815
    case TC.TabIndex of
816
      0 : // Gestation
817
        with PLogeT^ do
818
        begin
819
          NbRuleGest := NbRule ;
820
          RuleGest[NumRule] := Rule[NumRule] ;
821
        end ;
822
      1 : // Lactation
823
        with PLogeT^ do
824
        begin
825
          NbRuleLact := NbRule ;
826
          RuleLact[NumRule] := Rule[NumRule] ;
827
        end ;
828
      2 : // I.S.S.F.
829
        with PLogeT^ do
830
        begin
831
          NbRuleISSF := NbRule ;
832
          RuleISSF[NumRule] := Rule[NumRule] ;
833
        end ;
834
    end ;
835
//    LBRule.Repaint ;
836
  end ;
837
  TBAct.SelEnd := TBAct.Position ;
838
end ;
839

    
840
procedure TFLogeT.SBResetClick (Sender : TObject) ;
841
begin
842
  PBAct.AsInteger := Round ((PBAct.MinValue + PBAct.MaxValue) / 2) ;
843
end ;
844

    
845
function TFLogeT.StrModeFin (etat, regle : integer) : string ;
846
var
847
  Nb : integer ;
848
  Rec : RecRuleLogeT ;
849
begin
850
  case etat of
851
    0 : // Gestation
852
      Nb := PLogeT.NbRuleGest ;
853
    1 : // Lactation
854
      Nb := PLogeT.NbRuleLact ;
855
    else // I.S.S.F.
856
      Nb := PLogeT.NbRuleISSF ;
857
  end ;
858
  if regle = Nb
859
  then // Fin
860
    case etat of
861
      0 : // Gestation
862
        result := StrMiseBas ;
863
      1 : // Lactation
864
        result := StrSevrage ;
865
      2 : // I.S.S.F.
866
        result := StrSaillie ;
867
    end
868
  else
869
  begin
870
    case etat of
871
      0 : // Gestation
872
        Rec := PLogeT.RuleGest[regle] ;
873
      1 : // Lactation
874
        Rec := PLogeT.RuleLact[regle] ;
875
      2 : // I.S.S.F.
876
        Rec := PLogeT.RuleISSF[regle] ;
877
    end ;
878
    with Rec do
879
      case ModeFin of
880
        0 : // Dur?e
881
          result := Format ('%s = %d %s', [CBModeFin.Items[ModeFin], ValFin, StrJ]) ;
882
        else
883
          result := '' ;
884
      end ;
885
  end ;
886
end ;
887

    
888
end.