Statistiques
| Révision:

root / UFResBesGestE.pas @ 3

Historique | Voir | Annoter | Télécharger (13,597 ko)

1 3 avalancogn
unit UFResBesGestE;
2
3
interface
4
5
uses
6
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7
  Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, CheckLst, Menus, Printers,
8
  Math, Contnrs, PBNumEdit, PBSuperSpin, Grids, TeEngine, Series, TeeProcs,
9
  Chart, TeeEdit, UVariables, gnugettext;
10
11
type
12
  TFResBesGestE = class(TForm)
13
    PC: TPageControl;
14
    TabNRJ: TTabSheet;
15
    TabAA: TTabSheet;
16
    CBAA3: TComboBox;
17
    CBAA4: TComboBox;
18
    GBAAY: TGroupBox;
19
    Graph: TChart;
20
    GBNRJY: TGroupBox;
21
    CBNRJ3: TComboBox;
22
    LBAA: TListBox;
23
    LBNRJ: TListBox;
24
    TSAli: TTabSheet;
25
    TSMin: TTabSheet;
26
    GBMinY: TGroupBox;
27
    CBMin3: TComboBox;
28
    CBMin4: TComboBox;
29
    CBNRJ4: TComboBox;
30
    PM: TPopupMenu;
31
    MI3D: TMenuItem;
32
    MIPreview: TMenuItem;
33
    MIPrint: TMenuItem;
34
    PD: TPrintDialog;
35
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
36
    procedure FormShow(Sender: TObject);
37
    procedure PCChange(Sender: TObject);
38
    procedure CBNRJ3Change(Sender: TObject);
39
    procedure CBNRJ4Change(Sender: TObject);
40
    procedure CBAA3Change(Sender: TObject);
41
    procedure CBAA4Change(Sender: TObject);
42
    procedure CBAli2Change(Sender: TObject);
43
    procedure CBMin3Change(Sender: TObject);
44
    procedure CBMin4Change(Sender: TObject);
45
    procedure MI3DClick(Sender: TObject);
46
    procedure MIPreviewClick(Sender: TObject);
47
    procedure MIPrintClick(Sender: TObject);
48
    procedure FormCreate(Sender: TObject);
49
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
50
  private
51
    { D?clarations priv?es }
52
    BarAli : TBarSeries ;
53
    ListNRJ : TStrings ;
54
    BarNRJ : array of TBarSeries ;
55
    ListAA : TStrings ;
56
    BarAA35 : TBarSeries ;
57
    BarAA105 : TBarSeries ;
58
    BarMin35 : TBarSeries ;
59
    BarMin105 : TBarSeries ;
60
    procedure ResetGraph ;
61
    procedure InitAli ;
62
    procedure AffGraphAli ;
63
    procedure InitNRJ ;
64
    procedure AffGraphNRJ ;
65
    procedure InitAA ;
66
    procedure AffGraphAA ;
67
    procedure InitMin ;
68
    procedure AffGraphMin ;
69
  public
70
    { D?clarations publiques }
71
  end;
72
73
var
74
  FResBesGestE: TFResBesGestE;
75
76
implementation
77
78
uses
79
  UStrings, UFindRec, UUtil, UEchelle, UFBesGestE, UFPrevGraph ;
80
81
{$R *.dfm}
82
83
{ TFResBesGestE }
84
85
procedure TFResBesGestE.FormCreate(Sender: TObject);
86
begin
87
  if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1
88
  then
89
    Font.Name := 'Arial Unicode MS';
90
  TranslateComponent(Self);
91
  Constraints.MinWidth := 544 + (Width - ClientWidth);
92
  Width := 640;
93
  Constraints.MinHeight := 400 + (Height - ClientHeight);
94
  Height := 480;
95
  CBNRJ3.ItemIndex := 0;
96
  CBNRJ4.Items.Add(Format('%s/%s', [StrMJ, StrJ]));
97
  CBNRJ4.Items.Add('%');
98
  CBNRJ4.ItemIndex := 0;
99
  CBAA3.ItemIndex := 0;
100
  CBAA4.Items.Add(Format('%s/%s', [StrG, StrJ]));
101
  CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
102
  CBAA4.ItemIndex := 0;
103
  CBMin3.ItemIndex := 0;
104
  CBMin4.Items.Add(Format('%s/%s', [StrG, StrJ]));
105
  CBMin4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
106
  CBMin4.ItemIndex := 0;
107
end;
108
109
procedure TFResBesGestE.FormShow (Sender : TObject) ;
110
begin
111
  MIPrint.Enabled := IsComplete or IsEducation ;
112
  // Aliment
113
  InitAli ;
114
  // Energie
115
  InitNRJ ;
116
  // Acides Amin?s
117
  InitAA ;
118
  // Min?raux
119
  InitMin ;
120
  // Affichage principal
121
  PC.ActivePageIndex := 0 ;
122
  PCChange (nil) ;
123
end ;
124
125
procedure TFResBesGestE.FormClose (Sender : TObject ; var Action : TCloseAction) ;
126
var
127
  i : integer ;
128
begin
129
  // Aliment
130
  BarAli.Free ;
131
  // Energie
132
  for i := 0 to ListNRJ.Count - 1 do
133
    BarNRJ[i].Free ;
134
  SetLength (BarNRJ, 0) ;
135
  ListNRJ.Free ;
136
  // Acides Amin?s
137
  BarAA35.Free ;
138
  BarAA105.Free ;
139
  ListAA.Free ;
140
  // Min?raux
141
  BarMin35.Free ;
142
  BarMin105.Free ;
143
end ;
144
145
procedure TFResBesGestE.PCChange (Sender : TObject) ;
146
begin
147
  case PC.ActivePageIndex of
148
    0 : // Aliment
149
      AffGraphAli ;
150
    1 : // Energie
151
      AffGraphNRJ ;
152
    2 : // Acides Amin?s
153
      AffGraphAA ;
154
    3 : // Min?raux
155
      AffGraphMin ;
156
  end ;
157
end ;
158
159
procedure TFResBesGestE.ResetGraph ;
160
var
161
  i : integer ;
162
begin
163
  Graph.UndoZoom ;
164
  Graph.View3D := FALSE ;
165
  Graph.Legend.Visible := TRUE ;
166
  Graph.Legend.Inverted := TRUE ;
167
  Graph.Title.Text.Clear ;
168
  Graph.SubTitle.Text.Clear ;
169
  Graph.LeftAxis.Automatic := FALSE ;
170
  Graph.BottomAxis.MinimumOffset := 0;
171
  Graph.BottomAxis.MaximumOffset := 0;
172
  // Aliment
173
  BarAli.Active := FALSE ;
174
  // Energie
175
  for i := 0 to ListNRJ.Count - 1 do
176
    BarNRJ[i].Active := FALSE ;
177
  // Acides Amin?s
178
  BarAA35.Active := FALSE ;
179
  BarAA105.Active := FALSE ;
180
  // Min?raux
181
  BarMin35.Active := FALSE ;
182
  BarMin105.Active := FALSE ;
183
end ;
184
185
procedure TFResBesGestE.MI3DClick (Sender : TObject) ;
186
begin
187
  Graph.View3D := not (Graph.View3D) ;
188
end ;
189
190
procedure TFResBesGestE.MIPreviewClick (Sender : TObject) ;
191
begin
192
  FPrevGraph := TFPrevGraph.Create (Self) ;
193
  with FPrevGraph do
194
  begin
195
    TPPGraph.Panels.Add (Graph) ;
196
    ShowModal ;
197
    Release ;
198
  end ;
199
end ;
200
201
procedure TFResBesGestE.MIPrintClick (Sender : TObject) ;
202
begin
203
  if PD.Execute
204
  then
205
  begin
206
    Printer.Orientation := poLandscape ;
207
    Graph.Print ;
208
  end ;
209
end ;
210
211
/////////////////
212
//   Aliment   //
213
/////////////////
214
procedure TFResBesGestE.InitAli ;
215
begin
216
  // BarAli : s?rie (barre) graphique
217
  BarAli := TBarSeries.Create (Graph) ;
218
  BarAli.ParentChart := Graph ;
219
  BarAli.Title := ' ' ;
220
  BarAli.SeriesColor := clTeal ;
221
  BarAli.BarPen.Color := BarAli.SeriesColor ;
222
  BarAli.Marks.Style := smsValue ;
223
  BarAli.Marks.ArrowLength := 0 ;
224
  BarAli.Marks.Arrow.Visible := FALSE ;
225
  BarAli.Marks.Brush.Style := bsClear ;
226
  BarAli.Marks.Frame.Visible := FALSE ;
227
  BarAli.Marks.Font.Style := [fsBold] ;
228
  Graph.AddSeries (BarAli) ;
229
end ;
230
231
procedure TFResBesGestE.AffGraphAli ;
232
var
233
  j : integer ;
234
235
  // Ordonn?e
236
  function AliY : double ;
237
  begin
238
    with FBesGestE do
239
      if (AppEMTot[j] = 0)
240
      then
241
        result := 0
242
      else
243
        result := BesEMTot[j] * AppAliTot[j] / AppEMTot[j] ;
244
  end ;
245
246
// AffGraphAli
247
begin
248
  ResetGraph ;
249
  Graph.Legend.Visible := FALSE ;
250
  Graph.Title.Text.Add (TSAli.Caption) ;
251
  Graph.LeftAxis.Title.Caption := Format ('%s (%s/%s)', [TSAli.Caption, StrKg, StrJ]) ;
252
  Graph.BottomAxis.Title.Caption := _('Litter');
253
  // Affichage de la barre
254
  BarAli.Active := TRUE ;
255
  BarAli.Clear ;
256
  for j := 1 to NB_CYCLES do
257
    BarAli.AddBar (AliY, Format ('%d', [j]), clTeeColor) ;
258
  AjustEchelle (Graph) ;
259
end ;
260
261
procedure TFResBesGestE.CBAli2Change(Sender: TObject);
262
begin
263
264
end;
265
266
/////////////////
267
//   Energie   //
268
/////////////////
269
procedure TFResBesGestE.InitNRJ ;
270
const
271
  TabColor : array[0..4] of TColor
272
    = (clOlive, clGray, clAqua, clPurple, clNavy) ;
273
var
274
  i : integer ;
275
begin
276
  // ListNRJ : liste pour l'?nergie
277
  ListNRJ := TStringList.Create ;
278
  ListNRJ.Assign (LBNRJ.Items) ;
279
  // BarNRJ : s?ries (barres) graphiques
280
  SetLength (BarNRJ, ListNRJ.Count) ;
281
  for i := 0 to ListNRJ.Count - 1 do
282
  begin
283
    BarNRJ[i] := TBarSeries.Create (Graph) ;
284
    BarNRJ[i].ParentChart := Graph ;
285
    BarNRJ[i].Title := ListNRJ[i] ;
286
    BarNRJ[i].SeriesColor := TabColor[i] ;
287
    BarNRJ[i].BarPen.Color := BarNRJ[i].SeriesColor ;
288
    BarNRJ[i].Marks.Visible := FALSE ;
289
    Graph.AddSeries (BarNRJ[i]) ;
290
  end ;
291
end ;
292
293
procedure TFResBesGestE.AffGraphNRJ ;
294
var
295
  i, j : integer ;
296
  m : double ;
297
298
  // Ordonn?e
299
  function NRJY : double ;
300
  begin
301
    case i of
302
      0 : // Entretien
303
        result := FBesGestE.BesEMEntTot[j] ;
304
      1 : // Activit?
305
        result := FBesGestE.BesEMActTot[j] ;
306
      2 : // Thermor?gulation
307
        result := FBesGestE.BesEMTheTot[j] ;
308
      3 : // Port?e
309
        result := FBesGestE.BesEMPortTot[j] ;
310
      4 : // R?serve
311
        result := FBesGestE.BesEMResTot[j] ;
312
      else
313
        result := 0 ;
314
    end ;
315
  end ;
316
317
// AffGraphNRJ
318
begin
319
  ResetGraph ;
320
  Graph.Title.Text.Add (TabNRJ.Caption) ;
321
  Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBNRJ3.Text, CBNRJ4.Text]) ;
322
  Graph.BottomAxis.Title.Caption := _('Litter');
323
  // Affichage des barres
324
  for i := 0 to ListNRJ.Count - 1 do
325
    BarNRJ[i].Active := TRUE ;
326
  for i := 0 to ListNRJ.Count - 1 do
327
    BarNRJ[i].Clear ;
328
  if (CBNRJ4.ItemIndex = 1)
329
  then
330
    for i := 0 to ListNRJ.Count - 1 do
331
      BarNRJ[i].MultiBar := mbStacked100
332
  else
333
    for i := 0 to ListNRJ.Count - 1 do
334
      BarNRJ[i].MultiBar := mbStacked ;
335
  for j := 1 to NB_CYCLES do
336
  begin
337
    case CBNRJ3.ItemIndex of
338
      0 : // Energie digestible
339
        m := FBesGestE.AppEDTot[j] / FBesGestE.AppEMTot[j] ;
340
      2 : // Energie nette
341
        m := FBesGestE.AppENTot[j] / FBesGestE.AppEMTot[j] ;
342
      else
343
        m := 1 ;
344
    end ;
345
    for i := 0 to ListNRJ.Count - 1 do
346
      BarNRJ[i].AddBar (NRJY * m, Format ('%d', [j]), clTeeColor) ;
347
  end ;
348
  AjustEchelle (Graph) ;
349
end ;
350
351
procedure TFResBesGestE.CBNRJ3Change (Sender : TObject) ;
352
begin
353
  AffGraphNRJ ;
354
end ;
355
356
procedure TFResBesGestE.CBNRJ4Change (Sender : TObject) ;
357
begin
358
  AffGraphNRJ ;
359
end ;
360
361
///////////////////////
362
//   Acides amin?s   //
363
///////////////////////
364
procedure TFResBesGestE.InitAA ;
365
const
366
  TabColor : array[0..3] of TColor
367
    = (clOlive, clPurple, clNavy, clGreen) ;
368
begin
369
  // ListAA : liste pour les acides amin?s
370
  ListAA := TStringList.Create ;
371
  ListAA.Assign (LBAA.Items) ;
372
  // BarAA35 et BarAA105 : s?ries (barres) graphiques
373
  BarAA35 := TBarSeries.Create (Graph) ;
374
  BarAA35.ParentChart := Graph ;
375
  BarAA35.Title := Str35j ;
376
  BarAA35.SeriesColor := clGreen ;
377
  BarAA35.BarPen.Color := BarAA35.SeriesColor ;
378
  BarAA35.Marks.Visible := FALSE ;
379
  Graph.AddSeries (BarAA35) ;
380
  BarAA105 := TBarSeries.Create (Graph) ;
381
  BarAA105.ParentChart := Graph ;
382
  BarAA105.Title := Str105j ;
383
  BarAA105.SeriesColor := clNavy ;
384
  BarAA105.BarPen.Color := BarAA105.SeriesColor ;
385
  BarAA105.Marks.Visible := FALSE ;
386
  Graph.AddSeries (BarAA105) ;
387
end ;
388
389
procedure TFResBesGestE.AffGraphAA ;
390
var
391
  h, i, j : integer ;
392
393
  // Ordonn?e
394
  function AAY : double ;
395
  var
396
    a : integer ;
397
    d : double ;
398
  begin
399
    case h of
400
      3 : // met+cys
401
        a := 13 ;
402
      7 : // phe+tyr
403
        a := 14 ;
404
      else
405
        a := h ;
406
    end ;
407
    // Diviseur
408
    case CBAA4.ItemIndex of
409
      1 : // Aliment
410
        d := FBesGestE.BesEMTot[j] * FBesGestE.AppAliTot[j] / FBesGestE.AppEMTot[j] ;
411
      else
412
        d := 1 ;
413
    end ;
414
    result := FBesGestE.BesAA[j, a, i] / d ;
415
  end ;
416
417
// AffGraphAA
418
begin
419
  ResetGraph ;
420
  Graph.Title.Text.Add (TabAA.Caption) ;
421
  Graph.SubTitle.Text.Add(StrDigestStd);
422
  Graph.Legend.Inverted := FALSE ;
423
  Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBAA3.Text, CBAA4.Text]) ;
424
  Graph.BottomAxis.Title.Caption := _('Litter');
425
  // Affichage des barres
426
  BarAA35.Active := TRUE ;
427
  BarAA105.Active := TRUE ;
428
  BarAA35.Clear ;
429
  BarAA105.Clear ;
430
  BarAA35.MultiBar := mbSide ;
431
  BarAA105.MultiBar := mbSide ;
432
  h := CBAA3.ItemIndex + 1 ;
433
  for j := 1 to NB_CYCLES do
434
  begin
435
    i := 35 ;
436
    BarAA35.AddBar (AAY, Format ('%d', [j]), clTeeColor) ;
437
    i := 105 ;
438
    BarAA105.AddBar (AAY, Format ('%d', [j]), clTeeColor) ;
439
  end ;
440
  AjustEchelle (Graph) ;
441
end ;
442
443
procedure TFResBesGestE.CBAA3Change (Sender : TObject) ;
444
begin
445
  AffGraphAA ;
446
end ;
447
448
procedure TFResBesGestE.CBAA4Change (Sender : TObject) ;
449
begin
450
  AffGraphAA ;
451
end ;
452
453
//////////////////
454
//   Min?raux   //
455
//////////////////
456
procedure TFResBesGestE.InitMin ;
457
begin
458
  // BarMin35 et BarMin105 : s?ries (barres) graphiques
459
  BarMin35 := TBarSeries.Create (Graph) ;
460
  BarMin35.ParentChart := Graph ;
461
  BarMin35.Title := Str35j ;
462
  BarMin35.SeriesColor := clGreen ;
463
  BarMin35.BarPen.Color := BarMin35.SeriesColor ;
464
  BarMin35.Marks.Visible := FALSE ;
465
  Graph.AddSeries (BarMin35) ;
466
  BarMin105 := TBarSeries.Create (Graph) ;
467
  BarMin105.ParentChart := Graph ;
468
  BarMin105.Title := Str105j ;
469
  BarMin105.SeriesColor := clNavy ;
470
  BarMin105.BarPen.Color := BarMin105.SeriesColor ;
471
  BarMin105.Marks.Visible := FALSE ;
472
  Graph.AddSeries (BarMin105) ;
473
end ;
474
475
procedure TFResBesGestE.AffGraphMin ;
476
var
477
  i, j : integer ;
478
479
  // Ordonn?e
480
  function MinY : double ;
481
  var
482
    d : double ;
483
  begin
484
    // Diviseur
485
    case CBMin4.ItemIndex of
486
      1 : // Aliment
487
        d := FBesGestE.AppAli[j, i] ;
488
      else
489
        d := 1 ;
490
    end ;
491
    case CBMin3.ItemIndex of
492
      0 : // Phosphore digestible
493
        result := FBesGestE.BesP[j, i] / d ;
494
      1 : // Calcium total
495
        result := FBesGestE.BesCa[j, i] / d ;
496
      else
497
        result := 0 ;
498
    end ;
499
  end ;
500
501
// AffGraphMin
502
begin
503
  ResetGraph ;
504
  Graph.Title.Text.Add (TSMin.Caption) ;
505
  Graph.Legend.Inverted := FALSE ;
506
  Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBMin3.Text, CBMin4.Text]) ;
507
  Graph.BottomAxis.Title.Caption := _('Litter');
508
  // Affichage de la barre
509
  BarMin35.Active := TRUE ;
510
  BarMin105.Active := TRUE ;
511
  BarMin35.Clear ;
512
  BarMin105.Clear ;
513
  BarMin35.MultiBar := mbSide ;
514
  BarMin105.MultiBar := mbSide ;
515
  for j := 1 to NB_CYCLES do
516
  begin
517
    i := 35 ;
518
    BarMin35.AddBar (MinY, Format ('%d', [j]), clTeeColor) ;
519
    i := 105 ;
520
    BarMin105.AddBar (MinY, Format ('%d', [j]), clTeeColor) ;
521
  end ;
522
  AjustEchelle (Graph) ;
523
end ;
524
525
procedure TFResBesGestE.CBMin3Change(Sender: TObject);
526
begin
527
  AffGraphMin ;
528
end;
529
530
procedure TFResBesGestE.CBMin4Change(Sender: TObject);
531
begin
532
  AffGraphMin ;
533
end;
534
535
procedure TFResBesGestE.WMSysCommand(var Message: TWMSysCommand);
536
begin
537
  if Message.CmdType = SC_MINIMIZE
538
  then
539
    Application.Minimize
540
  else
541
    inherited;
542
end;
543
544
end.