Statistiques
| Révision:

root / UFConfig.pas @ 3

Historique | Voir | Annoter | Télécharger (27,38 ko)

1
unit UFConfig;
2

    
3
interface
4

    
5
uses
6
  Windows, Forms, Classes, Controls, Messages, Dialogs, ComCtrls, StdCtrls,
7
  Buttons, ExtCtrls, ExtDlgs, PBNumEdit, PBEdit, PBSuperSpin;
8

    
9
type
10
  TFConfig = class(TForm)
11
    PC: TPageControl;
12
    TSAliment: TTabSheet;
13
    PBoutons: TPanel;
14
    BBOk: TBitBtn;
15
    BBCancel: TBitBtn;
16
    GBFolder: TGroupBox;
17
    TSGeneral: TTabSheet;
18
    LGal: TLabel;
19
    GBTeneur: TGroupBox;
20
    GBDigest: TGroupBox;
21
    CBRap: TComboBox;
22
    CBTCompo: TComboBox;
23
    CBTAA: TComboBox;
24
    CBTAG: TComboBox;
25
    CBTMacro: TComboBox;
26
    CBTOligo: TComboBox;
27
    CBTFibres: TComboBox;
28
    CBDig: TComboBox;
29
    CBdCompo: TComboBox;
30
    CBdAA: TComboBox;
31
    CBAffMP: TCheckBox;
32
    LCompo: TLabel;
33
    LAA: TLabel;
34
    LAG: TLabel;
35
    LMacro: TLabel;
36
    LOligo: TLabel;
37
    LFibres: TLabel;
38
    GBExpr: TGroupBox;
39
    GBWindow: TGroupBox;
40
    PBHeight: TPBNumEdit;
41
    LWidth: TLabel;
42
    SBWindow: TSpeedButton;
43
    PBWidth: TPBNumEdit;
44
    LHeight: TLabel;
45
    PBTop: TPBNumEdit;
46
    LTop: TLabel;
47
    PBLeft: TPBNumEdit;
48
    LLeft: TLabel;
49
    TSTruie: TTabSheet;
50
    GBAliGest: TGroupBox;
51
    LAliDuree: TLabel;
52
    LAliQuantite: TLabel;
53
    GBAli1: TGroupBox;
54
    PBDuree1: TPBSuperSpin;
55
    PBQuantite1: TPBSuperSpin;
56
    GBAli3: TGroupBox;
57
    PBDuree3: TPBSuperSpin;
58
    PBQuantite3: TPBSuperSpin;
59
    CBTypeAliGest: TComboBox;
60
    PBAugment: TPBSuperSpin;
61
    LAugment: TLabel;
62
    GBAli2: TGroupBox;
63
    PBDuree2: TPBNumEdit;
64
    PBQuantite2: TPBSuperSpin;
65
    TSMessages: TTabSheet;
66
    CBAffCorrCUD: TCheckBox;
67
    TSPorc: TTabSheet;
68
    GBXCrois: TGroupBox;
69
    GBCarcasse: TGroupBox;
70
    GBXTruie: TGroupBox;
71
    CBXCrois: TComboBox;
72
    LXCrois: TLabel;
73
    CBXTruie: TComboBox;
74
    LXTruie: TLabel;
75
    CBTete: TCheckBox;
76
    CBLangue: TCheckBox;
77
    CBPieds: TCheckBox;
78
    CBQueue: TCheckBox;
79
    CBHampe: TCheckBox;
80
    CBPanne: TCheckBox;
81
    CBAffUnitProfilP: TCheckBox;
82
    CBAffPDMoy: TCheckBox;
83
    CBAffPrecocite: TCheckBox;
84
    CBAffEntretien: TCheckBox;
85
    GBProfilP: TGroupBox;
86
    GBAliMat: TGroupBox;
87
    CBAffCalcAli: TCheckBox;
88
    CBAffGraphAli: TCheckBox;
89
    GBLocal: TGroupBox;
90
    LLanguage: TLabel;
91
    LMonnaie: TLabel;
92
    PBMonnaie: TPBEdit;
93
    EFolder: TEdit;
94
    SBFolder: TSpeedButton;
95
    GBSimulT: TGroupBox;
96
    CBAffOptInit: TCheckBox;
97
    CBAffSimulT: TCheckBox;
98
    GBLogo: TGroupBox;
99
    SBLogo: TSpeedButton;
100
    ELogo: TEdit;
101
    OPDLogo: TOpenPictureDialog;
102
    GBExcelFile: TGroupBox;
103
    SBExcelFile: TSpeedButton;
104
    EExcelFile: TEdit;
105
    ODExcelFile: TOpenDialog;
106
    GBWarning: TGroupBox;
107
    SBWarning: TSpeedButton;
108
    CBLanguage: TComboBox;
109
    GBIntake: TGroupBox;
110
    GBFat: TGroupBox;
111
    GBLean: TGroupBox;
112
    RBIC: TRadioButton;
113
    RBEA: TRadioButton;
114
    RBP2: TRadioButton;
115
    RBUserFat: TRadioButton;
116
    RBTMP: TRadioButton;
117
    RBUserLean: TRadioButton;
118
    SBUserFat: TSpeedButton;
119
    SBUserLean: TSpeedButton;
120
    CheckBoxUpdates: TCheckBox;
121
    procedure FormShow(Sender: TObject);
122
    procedure CBLanguageChange(Sender: TObject);
123
    procedure CBRapChange(Sender: TObject);
124
    procedure CBDigChange(Sender: TObject);
125
    procedure CBTCompoChange(Sender: TObject);
126
    procedure CBTAAChange(Sender: TObject);
127
    procedure CBTAGChange(Sender: TObject);
128
    procedure CBTMacroChange(Sender: TObject);
129
    procedure CBTOligoChange(Sender: TObject);
130
    procedure CBTFibresChange(Sender: TObject);
131
    procedure CBdCompoChange(Sender: TObject);
132
    procedure CBdAAChange(Sender: TObject);
133
    procedure CBAffMPClick(Sender: TObject);
134
    procedure PBMonnaieChange(Sender: TObject);
135
    procedure SBWindowClick(Sender: TObject);
136
    procedure CBTypeAliGestChange(Sender: TObject);
137
    procedure PBDuree1Change(Sender: TObject);
138
    procedure PBDuree3Change(Sender: TObject);
139
    procedure PBQuantite1Change(Sender: TObject);
140
    procedure PBQuantite2Change(Sender: TObject);
141
    procedure PBQuantite3Change(Sender: TObject);
142
    procedure PBAugmentChange(Sender: TObject);
143
    procedure CBXTruieChange(Sender: TObject);
144
    procedure CBXCroisChange(Sender: TObject);
145
    procedure CBTeteClick(Sender: TObject);
146
    procedure CBLangueClick(Sender: TObject);
147
    procedure CBPiedsClick(Sender: TObject);
148
    procedure CBQueueClick(Sender: TObject);
149
    procedure CBHampeClick(Sender: TObject);
150
    procedure CBPanneClick(Sender: TObject);
151
    procedure SBFolderClick(Sender: TObject);
152
    procedure FormCreate(Sender: TObject);
153
    procedure CBLanguageDrawItem(Control: TWinControl; Index: Integer;
154
      Rect: TRect; State: TOwnerDrawState);
155
    procedure SBLogoClick(Sender: TObject);
156
    procedure EFolderChange(Sender: TObject);
157
    procedure ELogoChange(Sender: TObject);
158
    procedure SBExcelFileClick(Sender: TObject);
159
    procedure EExcelFileChange(Sender: TObject);
160
    procedure SBWarningClick(Sender: TObject);
161
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
162
    procedure RBFeedInfoClick(Sender: TObject);
163
    procedure RBFatInfoClick(Sender: TObject);
164
    procedure RBLeanInfoClick(Sender: TObject);
165
    procedure SBUserFatClick(Sender: TObject);
166
    procedure SBUserLeanClick(Sender: TObject);
167
    procedure CheckBoxUpdatesClick(Sender: TObject);
168
  private
169
    { D?clarations priv?es }
170
    Update: boolean;
171
    function StrEquation(Name: String; PVV: Boolean; a, b, c: Double): String;
172
  public
173
    { D?clarations publiques }
174
  end;
175

    
176
var
177
  FConfig: TFConfig;
178

    
179
implementation
180

    
181
uses
182
  FileCtrl, Graphics, SysUtils, gnugettext, UVariables, UStrings, UUtil,
183
  UFUserEquation, UFMenu;
184

    
185
{$R *.dfm}
186

    
187
{ TFConfig }
188

    
189
procedure TFConfig.FormCreate(Sender: TObject);
190
var
191
  BorderSize: Integer;
192
begin
193
  if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1
194
  then
195
    Font.Name := 'Arial Unicode MS';
196
  TranslateComponent(Self);
197
  Constraints.MinWidth := 480 + (Width - ClientWidth);
198
  Width := Constraints.MinWidth;
199
  Constraints.MinHeight := 436 + (Height - ClientHeight);
200
  Height := Constraints.MinHeight;
201
  // Initialisation
202
  BorderSize := (FMenu.Width - FMenu.ClientWidth) div 2;
203
  PBWidth.MaxValue := Screen.WorkAreaWidth + BorderSize * 2;
204
  PBWidth.MinValue := FMenu.Constraints.MinWidth;
205
  PBHeight.MaxValue := Screen.WorkAreaHeight + BorderSize * 2;
206
  PBHeight.MinValue := FMenu.Constraints.MinHeight;
207
  PBLeft.MaxValue := PBWidth.MaxValue - PBWidth.MinValue;
208
  PBLeft.MinValue := - BorderSize;
209
  PBTop.MaxValue := PBHeight.MaxValue - PBHeight.MinValue;
210
  PBTop.MinValue := - BorderSize;
211
  DefaultInstance.GetListOfLanguages('default', CBLanguage.Items);
212
  CBLanguage.Items.Add('en_US');
213
  RBIC.Caption := Format('%s = %s / %s', [_('F:G'), _('Feed usage'), _('Body weight gain')]);
214
  RBEA.Caption := Format('%s = %s / %s', [_('G:F'), _('Body weight gain'), _('Feed usage')]);
215
  RBP2.Caption := StrEquation(StrP2, False, 6.96, 0, 0.375);
216
  if Length(UserFatShortName) = 0
217
  then
218
    RBUserFat.Caption := StrEquation(_('UserP2'), UserFatPVV, UserFatA, UserFatB, UserFatC)
219
  else
220
    RBUserFat.Caption := StrEquation(UserFatShortName, UserFatPVV, UserFatA, UserFatB, UserFatC);
221
  if Length(UserFatLongName) = 0
222
  then
223
    RBUserFat.Hint := _('User backfat thickness')
224
  else
225
    RBUserFat.Hint := UserFatLongName;
226
  RBTMP.Caption := StrEquation(StrTMP, True, 57.43, 95.68, -62.68);
227
  if Length(UserLeanShortName) = 0
228
  then
229
    RBUserLean.Caption := StrEquation(_('UserLean'), UserLeanPVV, UserLeanA, UserLeanB, UserLeanC)
230
  else
231
    RBUserLean.Caption := StrEquation(UserLeanShortName, UserLeanPVV, UserLeanA, UserLeanB, UserLeanC);
232
  if Length(UserLeanLongName) = 0
233
  then
234
    RBUserLean.Hint := _('User lean')
235
  else
236
    RBUserLean.Hint := UserLeanLongName;
237
  PC.ActivePageIndex := 0;
238
end;
239

    
240
procedure TFConfig.FormShow(Sender: TObject);
241
begin
242
  NewFolder := Folder;
243
  NewLogo := Logo;
244
  NewLanguageCode := LanguageCode;
245
  Update := TRUE;
246
  // G?n?ral
247
  EFolder.Text := Folder;
248
  EExcelFile.Text := ExcelFile;
249
  PBWidth.AsInteger := FMenu.Width;
250
  PBHeight.AsInteger := FMenu.Height;
251
  PBLeft.AsInteger := FMenu.Left;
252
  PBTop.AsInteger := FMenu.Top;
253
  ELogo.Text := Logo;
254
  CBLanguage.ItemIndex := CBLanguage.Items.IndexOf(LanguageCode);
255
  PBMonnaie.Text := CurrencySign;
256
  CheckBoxUpdates.Checked := CheckForUpdates;
257
  // Mati?res premi?res et aliments
258
  CBRap.ItemIndex := ConfRap;
259
  CBDig.ItemIndex := ConfDig;
260
  CBDigChange(nil);
261
  CBTCompo.ItemIndex := ConfTCompo;
262
  CBTAA.ItemIndex := ConfTAA;
263
  CBTAG.ItemIndex := ConfTAG;
264
  CBTMacro.ItemIndex := ConfTMacro;
265
  CBTOligo.ItemIndex := ConfTOligo;
266
  CBTFibres.ItemIndex := ConfTFibres;
267
  CBdCompo.ItemIndex := ConfdCompo;
268
  CBdAA.ItemIndex := ConfdAA;
269
  CBAffMP.Checked := ConfAffMP;
270
  // Truie
271
  CBXTruie.ItemIndex := XTruie;
272
  CBTypeAliGest.ItemIndex := TypeAliGest;
273
  CBTypeAliGestChange(nil);
274
  // Porc croissance
275
  CBXCrois.ItemIndex := XCrois;
276
  CBTete.Checked := CarTete;
277
  CBTeteClick(nil);
278
  CBLangue.Checked := CarLangue;
279
  CBPieds.Checked := CarPieds;
280
  CBQueue.Checked := CarQueue;
281
  CBHampe.Checked := CarHampe;
282
  CBPanne.Checked := CarPanne;
283
  if FeedInfo = 0
284
  then // Indice de consommation
285
    RBIC.Checked := True
286
  else // Efficacit? alimentaire
287
    RBEA.Checked := True;
288
  if FatInfo = 0
289
  then // P2
290
    RBP2.Checked := True
291
  else // User defined
292
    RBUserFat.Checked := True;
293
  if LeanInfo = 0
294
  then // TMP
295
    RBTMP.Checked := True
296
  else // User defined
297
    RBUserLean.Checked := True;
298
  Update := False;
299
  PC.ActivePageIndex := 0;
300
end ;
301

    
302
procedure TFConfig.WMSysCommand(var Message: TWMSysCommand);
303
begin
304
  if Message.CmdType = SC_MINIMIZE
305
  then
306
    Application.Minimize
307
  else
308
    inherited;
309
end;
310

    
311
// G?n?ral
312

    
313
procedure TFConfig.SBFolderClick(Sender: TObject);
314
var
315
  NewDir: String;
316
begin
317
  NewDir := NewFolder;
318
  if SelectDirectory(StrSelectDir, '', NewDir)
319
  and DirectoryExists(NewDir)
320
  and (NewDir <> NewFolder)
321
  then
322
    EFolder.Text := NewDir;
323
end;
324

    
325
procedure TFConfig.EFolderChange(Sender: TObject);
326
begin
327
  ConfigChanged := TRUE;
328
  NewFolder := EFolder.Text;
329
end;
330

    
331
procedure TFConfig.SBExcelFileClick(Sender: TObject);
332
begin
333
  ODExcelFile.FileName := ExcelFile;
334
  if ODExcelFile.Execute and (ODExcelFile.FileName <> ExcelFile)
335
  then
336
    EExcelFile.Text := ODExcelFile.FileName;
337
end;
338

    
339
procedure TFConfig.EExcelFileChange(Sender: TObject);
340
begin
341
  ConfigChanged := TRUE;
342
  ExcelFile := EExcelFile.Text;
343
end;
344

    
345
procedure TFConfig.SBWindowClick(Sender: TObject);
346
begin
347
  ConfigChanged := TRUE;
348
  MainLeft := PBLeft.AsInteger;
349
  MainTop := PBTop.AsInteger;
350
  MainWidth := PBWidth.AsInteger;
351
  MainHeight := PBHeight.AsInteger;
352
  with FMenu do
353
  if (PBWidth.AsInteger <> Width)
354
  or (PBHeight.AsInteger <> Height)
355
  or (PBLeft.AsInteger <> Left)
356
  or (PBTop.AsInteger <> Top)
357
  then // Taille et position de la fen?tre principale
358
  begin
359
    SetBounds(MainLeft, MainTop, MainWidth, MainHeight);
360
    FormResize(nil);
361
  end;
362
end;
363

    
364
procedure TFConfig.SBLogoClick(Sender: TObject);
365
begin
366
  OPDLogo.FileName := NewLogo;
367
  if OPDLogo.Execute and (OPDLogo.FileName <> NewLogo)
368
  then
369
    ELogo.Text := OPDLogo.FileName;
370
end;
371

    
372
procedure TFConfig.ELogoChange(Sender: TObject);
373
begin
374
  ConfigChanged := TRUE;
375
  NewLogo := ELogo.Text;
376
end;
377

    
378
procedure TFConfig.CBLanguageDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
379
var
380
  LanguageName: String;
381
begin
382
  with Control as TComboBox do
383
  begin
384
    // Conversion du code ISO en nom (d?j? traduit)
385
    LanguageName := dgettext('languagecodes', Items[Index]);
386
    // Cadre
387
    Canvas.FillRect(Rect);
388
    // Texte
389
    Canvas.TextOut(Rect.Left + 2, Rect.Top, LanguageName);
390
  end;
391
end;
392

    
393
procedure TFConfig.CBLanguageChange(Sender: TObject);
394
begin
395
  if not Update
396
  then
397
  begin
398
    NewLanguageCode := CBLanguage.Items[CBLanguage.ItemIndex];
399
    ConfigChanged := TRUE;
400
  end;
401
end;
402

    
403
procedure TFConfig.PBMonnaieChange(Sender: TObject);
404
begin
405
  if not Update
406
  then
407
  begin
408
    CurrencySign := PBMonnaie.Text;
409
    ConfigChanged := TRUE;
410
  end;
411
end;
412

    
413
procedure TFConfig.SBWarningClick(Sender: TObject);
414
begin
415
  // R?activation pour la session courante
416
  AffCorrCUD := True;
417
  AffCalcAli := True;
418
  AffGraphAli := True;
419
  AffUnitProfilP := True;
420
  AffPDMoy := True;
421
  AffPrecocite := True;
422
  AffEntretien := True;
423
  AffOptInit := True;
424
  AffSimulT := True;
425
  AffBesoin := True;
426
  // R?activation globale
427
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'CorrCUD', True);
428
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'CalcAli', True);
429
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'GraphAli', True);
430
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'UnitProfilP', True);
431
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'PDMoy', True);
432
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'Precocite', True);
433
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'Entretien', True);
434
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'OptInit', True);
435
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'SimulT', True);
436
  BdRWriteBoolean('\Software\InraPorc\Config\Messages', 'Besoin', True);
437
end;
438

    
439
// Mati?res premi?res et aliments
440

    
441
procedure TFConfig.CBRapChange (Sender : TObject) ;
442
begin
443
  if not Update
444
  then
445
  begin
446
    ConfRap := CBRap.ItemIndex ;
447
    ConfigChanged := TRUE ;
448
  end ;
449
end ;
450

    
451
procedure TFConfig.CBDigChange (Sender : TObject) ;
452
begin
453
  if CBDig.ItemIndex = 0
454
  then // CUD
455
  begin
456
    CBDCompo.Enabled := FALSE ;
457
    CBDAA.Enabled := FALSE ;
458
  end
459
  else // Teneur digestible
460
  begin
461
    CBDCompo.Enabled := TRUE ;
462
    CBDAA.Enabled := TRUE ;
463
  end ;
464
  if not Update
465
  then
466
  begin
467
    ConfDig := CBDig.ItemIndex ;
468
    if CBDig.ItemIndex = 0
469
    then // CUD
470
    begin
471
      Update := TRUE ;
472
      CBdCompo.ItemIndex := 1; // %
473
      CBdAA.ItemIndex := 1; // %
474
      Update := FALSE ;
475
    end ;
476
    ConfDCompo := CBDCompo.ItemIndex ;
477
    ConfDAA := CBDAA.ItemIndex ;
478
    ConfigChanged := TRUE ;
479
  end ;
480
end ;
481

    
482
procedure TFConfig.CBTCompoChange (Sender : TObject) ;
483
begin
484
  if not Update
485
  then
486
  begin
487
    ConfTCompo := CBTCompo.ItemIndex ;
488
    ConfigChanged := TRUE ;
489
  end ;
490
end ;
491

    
492
procedure TFConfig.CBTAAChange (Sender : TObject) ;
493
begin
494
  if not Update
495
  then
496
  begin
497
    ConfTAA := CBTAA.ItemIndex ;
498
    ConfigChanged := TRUE ;
499
  end ;
500
end ;
501

    
502
procedure TFConfig.CBTAGChange (Sender : TObject) ;
503
begin
504
  if not Update
505
  then
506
  begin
507
    ConfTAG := CBTAG.ItemIndex ;
508
    ConfigChanged := TRUE ;
509
  end ;
510
end ;
511

    
512
procedure TFConfig.CBTMacroChange (Sender : TObject) ;
513
begin
514
  if not Update
515
  then
516
  begin
517
    ConfTMacro := CBTMacro.ItemIndex ;
518
    ConfigChanged := TRUE ;
519
  end ;
520
end ;
521

    
522
procedure TFConfig.CBTOligoChange (Sender : TObject) ;
523
begin
524
  if not Update
525
  then
526
  begin
527
    ConfTOligo := CBTOligo.ItemIndex ;
528
    ConfigChanged := TRUE ;
529
  end ;
530
end ;
531

    
532
procedure TFConfig.CBTFibresChange (Sender : TObject) ;
533
begin
534
  if not Update
535
  then
536
  begin
537
    ConfTFibres := CBTFibres.ItemIndex ;
538
    ConfigChanged := TRUE ;
539
  end ;
540
end ;
541

    
542
procedure TFConfig.CBdCompoChange (Sender : TObject) ;
543
begin
544
  if not Update
545
  then
546
  begin
547
    ConfdCompo := CBdCompo.ItemIndex ;
548
    ConfigChanged := TRUE ;
549
  end ;
550
end ;
551

    
552
procedure TFConfig.CBdAAChange (Sender : TObject) ;
553
begin
554
  if not Update
555
  then
556
  begin
557
    ConfdAA := CBdAA.ItemIndex ;
558
    ConfigChanged := TRUE ;
559
  end ;
560
end ;
561

    
562
procedure TFConfig.CBAffMPClick (Sender : TObject) ;
563
begin
564
  if not Update
565
  then
566
  begin
567
    ConfAffMP := CBAffMP.Checked ;
568
    ConfigChanged := TRUE ;
569
  end ;
570
end ;
571

    
572
// Truie
573

    
574
procedure TFConfig.CBXTruieChange(Sender: TObject);
575
begin
576
  if not Update
577
  then
578
  begin
579
    XTruie := CBXTruie.ItemIndex ;
580
    ConfigChanged := TRUE ;
581
  end ;
582
end;
583

    
584
procedure TFConfig.CheckBoxUpdatesClick(Sender: TObject);
585
begin
586
  if not Update
587
  then
588
  begin
589
    CheckForUpdates := CheckBoxUpdates.Checked;
590
    ConfigChanged := TRUE;
591
  end;
592
end;
593

    
594
procedure TFConfig.CBTypeAliGestChange(Sender: TObject);
595
var
596
  etat : boolean ;
597
begin
598
  etat := Update ;
599
  Update := TRUE ;
600
  case CBTypeAliGest.ItemIndex of
601
    0 : // Une p?riode - Quantit? constante
602
    begin
603
      PBDuree1.Visible := FALSE ;
604
      PBDuree3.Visible := FALSE ;
605
      PBQuantite1.Visible := FALSE ;
606
      PBQuantite2.Visible := FALSE ;
607
      PBQuantite3.Visible := FALSE ;
608
      PBAugment.Visible := FALSE ;
609
      PBDuree2.AsInteger := DureeGest ;
610
    end ;
611
    1 : // Deux p?riodes - Quantit? finale fix?e
612
    begin
613
      PBDuree1.Visible := FALSE ;
614
      PBDuree3.Visible := TRUE ;
615
      PBQuantite1.Visible := FALSE ;
616
      PBQuantite2.Visible := FALSE ;
617
      PBQuantite3.Visible := TRUE ;
618
      PBAugment.Visible := FALSE ;
619
      PBDuree2.AsInteger := DureeGest - Duree3 ;
620
      if ActiveControl <> PBDuree3
621
      then
622
        PBDuree3.AsInteger := Duree3 ;
623
      if ActiveControl <> PBQuantite3
624
      then
625
        PBQuantite3.AsFloat := Quantite3 ;
626
    end ;
627
    2 : // Deux p?riodes - Augmentation fix?e
628
    begin
629
      PBDuree1.Visible := FALSE ;
630
      PBDuree3.Visible := TRUE ;
631
      PBQuantite1.Visible := FALSE ;
632
      PBQuantite2.Visible := FALSE ;
633
      PBQuantite3.Visible := FALSE ;
634
      PBAugment.Visible := TRUE ;
635
      PBDuree2.AsInteger := DureeGest - Duree3 ;
636
      if ActiveControl <> PBDuree3
637
      then
638
        PBDuree3.AsInteger := Duree3 ;
639
      if ActiveControl <> PBAugment
640
      then
641
        PBAugment.AsFloat := Augment ;
642
    end ;
643
    3 : // Trois p?riodes - Augmentation et quantit? finale fix?es
644
    begin
645
      PBDuree1.Visible := TRUE ;
646
      PBDuree3.Visible := TRUE ;
647
      PBQuantite1.Visible := FALSE ;
648
      PBQuantite2.Visible := FALSE ;
649
      PBQuantite3.Visible := TRUE ;
650
      PBAugment.Visible := TRUE ;
651
      if ActiveControl <> PBDuree1
652
      then
653
        PBDuree1.AsInteger := Duree1 ;
654
      PBDuree2.AsInteger := DureeGest - Duree1 - Duree3 ;
655
      if ActiveControl <> PBDuree3
656
      then
657
        PBDuree3.AsInteger := Duree3 ;
658
      if ActiveControl <> PBAugment
659
      then
660
        PBAugment.AsFloat := Augment ;
661
      if ActiveControl <> PBQuantite3
662
      then
663
        PBQuantite3.AsFloat := Quantite3 ;
664
    end ;
665
    4 : // Trois p?riodes - Quantit?s des p?riodes 2 et 3 fix?es
666
    begin
667
      PBDuree1.Visible := TRUE ;
668
      PBDuree3.Visible := TRUE ;
669
      PBQuantite1.Visible := FALSE ;
670
      PBQuantite2.Visible := TRUE ;
671
      PBQuantite3.Visible := TRUE ;
672
      PBAugment.Visible := FALSE ;
673
      if ActiveControl <> PBDuree1
674
      then
675
        PBDuree1.AsInteger := Duree1 ;
676
      PBDuree2.AsInteger := DureeGest - Duree1 - Duree3 ;
677
      if ActiveControl <> PBDuree3
678
      then
679
        PBDuree3.AsInteger := Duree3 ;
680
      if ActiveControl <> PBQuantite2
681
      then
682
        PBQuantite2.AsFloat := Quantite2 ;
683
      if ActiveControl <> PBQuantite3
684
      then
685
        PBQuantite3.AsFloat := Quantite3 ;
686
    end ;
687
    5 : // Trois p?riodes - Augmentation et quantit? initiale fix?es
688
    begin
689
      PBDuree1.Visible := TRUE ;
690
      PBDuree3.Visible := TRUE ;
691
      PBQuantite1.Visible := TRUE ;
692
      PBQuantite2.Visible := FALSE ;
693
      PBQuantite3.Visible := FALSE ;
694
      PBAugment.Visible := TRUE ;
695
      if ActiveControl <> PBDuree1
696
      then
697
        PBDuree1.AsInteger := Duree1 ;
698
      PBDuree2.AsInteger := DureeGest - Duree1 - Duree3 ;
699
      if ActiveControl <> PBDuree3
700
      then
701
        PBDuree3.AsInteger := Duree3 ;
702
      if ActiveControl <> PBAugment
703
      then
704
        PBAugment.AsFloat := Augment ;
705
      if ActiveControl <> PBQuantite1
706
      then
707
        PBQuantite1.AsFloat := Quantite1 ;
708
    end ;
709
  end ;
710
  Update := etat ;
711
  if not Update
712
  then
713
  begin
714
    TypeAliGest := CBTypeAliGest.ItemIndex ;
715
    ConfigChanged := TRUE ;
716
  end ;
717
end;
718

    
719
procedure TFConfig.PBDuree1Change(Sender: TObject);
720
begin
721
  if not Update
722
  then
723
  begin
724
    Duree1 := PBDuree1.AsInteger ;
725
    CBTypeALiGestChange (nil) ;
726
    ConfigChanged := TRUE ;
727
  end ;
728
end;
729

    
730
procedure TFConfig.PBDuree3Change(Sender: TObject);
731
begin
732
  if not Update
733
  then
734
  begin
735
    Duree3 := PBDuree3.AsInteger ;
736
    CBTypeALiGestChange (nil) ;
737
    ConfigChanged := TRUE ;
738
  end ;
739
end;
740

    
741
procedure TFConfig.PBQuantite1Change(Sender: TObject);
742
begin
743
  if not Update
744
  then
745
  begin
746
    Quantite1 := PBQuantite1.AsFloat ;
747
    CBTypeALiGestChange (nil) ;
748
    ConfigChanged := TRUE ;
749
  end ;
750
end;
751

    
752
procedure TFConfig.PBQuantite2Change(Sender: TObject);
753
begin
754
  if not Update
755
  then
756
  begin
757
    Quantite2 := PBQuantite2.AsFloat ;
758
    CBTypeALiGestChange (nil) ;
759
    ConfigChanged := TRUE ;
760
  end ;
761
end;
762

    
763
procedure TFConfig.PBQuantite3Change(Sender: TObject);
764
begin
765
  if not Update
766
  then
767
  begin
768
    Quantite3 := PBQuantite3.AsFloat ;
769
    CBTypeALiGestChange (nil) ;
770
    ConfigChanged := TRUE ;
771
  end ;
772
end;
773

    
774
procedure TFConfig.PBAugmentChange(Sender: TObject);
775
begin
776
  if not Update
777
  then
778
  begin
779
    Augment := PBAugment.AsFloat ;
780
    CBTypeAliGestChange (nil) ;
781
    ConfigChanged := TRUE ;
782
  end ;
783
end;
784

    
785
// Porc croissance
786

    
787
procedure TFConfig.CBXCroisChange(Sender: TObject);
788
begin
789
  if not Update
790
  then
791
  begin
792
    XCrois := CBXCrois.ItemIndex ;
793
    ConfigChanged := TRUE ;
794
  end ;
795
end;
796

    
797
procedure TFConfig.CBTeteClick(Sender: TObject);
798
begin
799
  if CBTete.Checked
800
  then
801
    CBLangue.Enabled := TRUE
802
  else
803
  begin
804
    CarLangue := FALSE ;
805
    CBLangue.Checked := FALSE ;
806
    CBLangue.Enabled := FALSE ;
807
  end ;
808
  if not Update
809
  then
810
  begin
811
    CarTete := CBTete.Checked ;
812
    ConfigChanged := TRUE ;
813
  end ;
814
end;
815

    
816
procedure TFConfig.CBLangueClick(Sender: TObject);
817
begin
818
  if not Update
819
  then
820
  begin
821
    CarLangue := CBLangue.Checked ;
822
    ConfigChanged := TRUE ;
823
  end ;
824
end;
825

    
826
procedure TFConfig.CBPiedsClick(Sender: TObject);
827
begin
828
  if not Update
829
  then
830
  begin
831
    CarPieds := CBPieds.Checked ;
832
    ConfigChanged := TRUE ;
833
  end ;
834
end;
835

    
836
procedure TFConfig.CBQueueClick(Sender: TObject);
837
begin
838
  if not Update
839
  then
840
  begin
841
    CarQueue := CBQueue.Checked ;
842
    ConfigChanged := TRUE ;
843
  end ;
844
end;
845

    
846
procedure TFConfig.CBHampeClick(Sender: TObject);
847
begin
848
  if not Update
849
  then
850
  begin
851
    CarHampe := CBHampe.Checked ;
852
    ConfigChanged := TRUE ;
853
  end ;
854
end;
855

    
856
procedure TFConfig.CBPanneClick(Sender: TObject);
857
begin
858
  if not Update
859
  then
860
  begin
861
    CarPanne := CBPanne.Checked ;
862
    ConfigChanged := TRUE ;
863
  end ;
864
end;
865

    
866
procedure TFConfig.RBFeedInfoClick(Sender: TObject);
867
begin
868
  if not Update
869
  then
870
  begin
871
    ConfigChanged := True;
872
    if RBIC.Checked
873
    then // Indice de consommation
874
      FeedInfo := 0
875
    else // Efficacit? alimentaire
876
      FeedInfo := 1;
877
  end;
878
end;
879

    
880
procedure TFConfig.RBFatInfoClick(Sender: TObject);
881
begin
882
  if not Update
883
  then
884
  begin
885
    ConfigChanged := True;
886
    if RBP2.Checked
887
    then // P2
888
      FatInfo := 0
889
    else // User defined
890
      FatInfo := -1;
891
  end;
892
end;
893

    
894
procedure TFConfig.SBUserFatClick(Sender: TObject);
895
begin
896
  FUserEquation := TFUserEquation.Create(Self);
897
  with FUserEquation do
898
  begin
899
    EShortName.Text := UserFatShortName;
900
    ELongName.Text := UserFatLongName;
901
    if UserFatPVV then RBRatioPVV.Checked := True;
902
    VEA.AsFloat := UserFatA;
903
    VEB.AsFloat := UserFatB;
904
    VEC.AsFloat := UserFatC;
905
    if ShowModal = mrOk
906
    then
907
    begin
908
      ConfigChanged := True;
909
      UserFatShortName := Trim(EShortName.Text);
910
      UserFatLongName := Trim(ELongName.Text);
911
      UserFatPVV := RBRatioPVV.Checked;
912
      UserFatA := VEA.AsFloat;
913
      UserFatB := VEB.AsFloat;
914
      UserFatC := VEC.AsFloat;
915
      if Length(UserFatShortName) = 0
916
      then
917
        RBUserFat.Caption := StrEquation(_('UserP2'), UserFatPVV, UserFatA, UserFatB, UserFatC)
918
      else
919
        RBUserFat.Caption := StrEquation(UserFatShortName, UserFatPVV, UserFatA, UserFatB, UserFatC);
920
      if Length(UserFatLongName) = 0
921
      then
922
        RBUserFat.Hint := _('User backfat thickness')
923
      else
924
        RBUserFat.Hint := UserFatLongName;
925
    end;
926
    Release;
927
  end;
928
end;
929

    
930
procedure TFConfig.RBLeanInfoClick(Sender: TObject);
931
begin
932
  if not Update
933
  then
934
  begin
935
    ConfigChanged := True;
936
    if RBTMP.Checked
937
    then // TMP
938
      LeanInfo := 0
939
    else // User defined
940
      LeanInfo := -1;
941
  end;
942
end;
943

    
944
procedure TFConfig.SBUserLeanClick(Sender: TObject);
945
begin
946
  FUserEquation := TFUserEquation.Create(Self);
947
  with FUserEquation do
948
  begin
949
    EShortName.Text := UserLeanShortName;
950
    ELongName.Text := UserLeanLongName;
951
    if UserLeanPVV then RBRatioPVV.Checked := True;
952
    VEA.AsFloat := UserLeanA;
953
    VEB.AsFloat := UserLeanB;
954
    VEC.AsFloat := UserLeanC;
955
    if ShowModal = mrOk
956
    then
957
    begin
958
      ConfigChanged := True;
959
      UserLeanShortName := Trim(EShortName.Text);
960
      UserLeanLongName := Trim(ELongName.Text);
961
      UserLeanPVV := RBRatioPVV.Checked;
962
      UserLeanA := VEA.AsFloat;
963
      UserLeanB := VEB.AsFloat;
964
      UserLeanC := VEC.AsFloat;
965
      if Length(UserLeanShortName) = 0
966
      then
967
        RBUserLean.Caption := StrEquation(_('UserLean'), UserLeanPVV, UserLeanA, UserLeanB, UserLeanC)
968
      else
969
        RBUserLean.Caption := StrEquation(UserLeanShortName, UserLeanPVV, UserLeanA, UserLeanB, UserLeanC);
970
      if Length(UserLeanLongName) = 0
971
      then
972
        RBUserLean.Hint := _('User lean')
973
      else
974
        RBUserLean.Hint := UserLeanLongName;
975
    end;
976
    Release;
977
  end;
978
end;
979

    
980
function TFConfig.StrEquation(Name: String; PVV: Boolean; a, b, c: Double): String;
981
var
982
  BUnit, CUnit: String;
983
begin
984
  if PVV
985
  then
986
    BUnit := Format('%s/%s', [StrP, StrPVV])
987
  else
988
    BUnit := StrP;
989
  if PVV
990
  then
991
    CUnit := Format('%s/%s', [StrL, StrPVV])
992
  else
993
    CUnit := StrL;
994
  if c = 0
995
  then
996
    if b = 0
997
    then
998
      Result := Format('%s = %s', [Name, DblToStr(a, 5)])
999
    else
1000
      if a = 0
1001
      then
1002
        Result := Format('%s = %s %s', [Name, DblToStr(b, 5), BUnit])
1003
      else
1004
        if b < 0
1005
        then
1006
          Result := Format('%s = %s - %s %s', [Name, DblToStr(a, 5), DblToStr(Abs(b), 5), BUnit])
1007
        else
1008
          Result := Format('%s = %s + %s %s', [Name, DblToStr(a, 5), DblToStr(b, 5), BUnit])
1009
  else
1010
    if b = 0
1011
    then
1012
      if a = 0
1013
      then
1014
        Result := Format('%s = %s %s', [Name, DblToStr(c, 5), CUnit])
1015
      else
1016
        if c < 0
1017
        then
1018
          Result := Format('%s = %s - %s %s', [Name, DblToStr(a, 5), DblToStr(Abs(c), 5), CUnit])
1019
        else
1020
          Result := Format('%s = %s + %s %s', [Name, DblToStr(a, 5), DblToStr(c, 5), CUnit])
1021
    else
1022
      if a = 0
1023
      then
1024
        if c < 0
1025
        then
1026
          Result := Format('%s = %s %s - %s %s', [Name, DblToStr(b, 5), BUnit, DblToStr(Abs(c), 5), CUnit])
1027
        else
1028
          Result := Format('%s = %s %s + %s %s', [Name, DblToStr(b, 5), BUnit, DblToStr(c, 5), CUnit])
1029
      else
1030
        if c < 0
1031
        then
1032
          if b < 0
1033
          then
1034
            Result := Format('%s = %s - %s %s - %s %s', [Name, DblToStr(a, 5), DblToStr(Abs(b), 5), BUnit, DblToStr(Abs(c), 5), CUnit])
1035
          else
1036
            Result := Format('%s = %s + %s %s - %s %s', [Name, DblToStr(a, 5), DblToStr(b, 5), BUnit, DblToStr(Abs(c), 5), CUnit])
1037
        else
1038
          if b < 0
1039
          then
1040
            Result := Format('%s = %s - %s %s + %s %s', [Name, DblToStr(a, 5), DblToStr(Abs(b), 5), BUnit, DblToStr(c, 5), CUnit])
1041
          else
1042
            Result := Format('%s = %s + %s %s + %s %s', [Name, DblToStr(a, 5), DblToStr(b, 5), BUnit, DblToStr(c, 5), CUnit]);
1043
end;
1044

    
1045
end.