root / UFCompSimulP.pas
Historique | Voir | Annoter | Télécharger (114,951 ko)
1 | 3 | avalancogn | unit UFCompSimulP;
|
---|---|---|---|
2 | |||
3 | interface
|
||
4 | |||
5 | uses
|
||
6 | Windows, Forms, Classes, Controls, Messages, Dialogs, StdCtrls, ExtCtrls, |
||
7 | ComCtrls, Menus, TeeProcs, TeEngine, Series, Chart; |
||
8 | |||
9 | type
|
||
10 | TFCompSimulP = class(TForm)
|
||
11 | PC: TPageControl; |
||
12 | TabRej: TTabSheet; |
||
13 | CBRej3: TComboBox; |
||
14 | CBRej4: TComboBox; |
||
15 | TabPerf: TTabSheet; |
||
16 | CBPerf4: TComboBox; |
||
17 | CBPerf3: TComboBox; |
||
18 | CBPerf2: TComboBox; |
||
19 | TabAli: TTabSheet; |
||
20 | TabAA: TTabSheet; |
||
21 | TabNRJ: TTabSheet; |
||
22 | CBAli4: TComboBox; |
||
23 | CBAA3: TComboBox; |
||
24 | CBAA4: TComboBox; |
||
25 | CBNRJ3: TComboBox; |
||
26 | CBNRJ4: TComboBox; |
||
27 | CBPerf1: TComboBox; |
||
28 | CBAA1: TComboBox; |
||
29 | CBAA5A: TComboBox; |
||
30 | CBAA2: TComboBox; |
||
31 | CBNRJ1: TComboBox; |
||
32 | CBNRJ2: TComboBox; |
||
33 | CBNRJ5: TComboBox; |
||
34 | GBPerfX: TGroupBox; |
||
35 | GBPerfY: TGroupBox; |
||
36 | GBAAX: TGroupBox; |
||
37 | GBNRJX: TGroupBox; |
||
38 | GBAliY: TGroupBox; |
||
39 | GBAAY: TGroupBox; |
||
40 | GBNRJY: TGroupBox; |
||
41 | GBRejY: TGroupBox; |
||
42 | GBAAT: TGroupBox; |
||
43 | GBRejT: TGroupBox; |
||
44 | GBRejX: TGroupBox; |
||
45 | GBAliX: TGroupBox; |
||
46 | GBAliT: TGroupBox; |
||
47 | GBPerfT: TGroupBox; |
||
48 | GBNRJT: TGroupBox; |
||
49 | Graph: TChart; |
||
50 | LBNRJ: TListBox; |
||
51 | LBRej: TListBox; |
||
52 | LBAA: TListBox; |
||
53 | CBAA5B: TComboBox; |
||
54 | CBPerf3Global: TComboBox; |
||
55 | CBNRJ3Valeurs: TComboBox; |
||
56 | TabMin: TTabSheet; |
||
57 | GBMinY: TGroupBox; |
||
58 | CBMin3: TComboBox; |
||
59 | CBMin4: TComboBox; |
||
60 | GBMinX: TGroupBox; |
||
61 | GBMinT: TGroupBox; |
||
62 | CBAli3: TComboBox; |
||
63 | LBMin: TListBox; |
||
64 | CBMin1: TComboBox; |
||
65 | CBMin2: TComboBox; |
||
66 | CBMin5B: TComboBox; |
||
67 | CBMin5A: TComboBox; |
||
68 | PM: TPopupMenu; |
||
69 | MI3D: TMenuItem; |
||
70 | MIPreview: TMenuItem; |
||
71 | MIPrint: TMenuItem; |
||
72 | PD: TPrintDialog; |
||
73 | CBAli5: TComboBox; |
||
74 | CBAli1: TComboBox; |
||
75 | procedure FormShow(Sender: TObject);
|
||
76 | procedure FormClose(Sender: TObject; var Action: TCloseAction); |
||
77 | procedure PCChange(Sender: TObject);
|
||
78 | procedure CBRej3Change(Sender: TObject);
|
||
79 | procedure CBRej4Change(Sender: TObject);
|
||
80 | procedure CBPerf2Change(Sender: TObject);
|
||
81 | procedure CBPerf3Change(Sender: TObject);
|
||
82 | procedure CBAli4Change(Sender: TObject);
|
||
83 | procedure CBAA3Change(Sender: TObject);
|
||
84 | procedure CBAA4Change(Sender: TObject);
|
||
85 | procedure CBNRJ3Change(Sender: TObject);
|
||
86 | procedure CBNRJ4Change(Sender: TObject);
|
||
87 | procedure CBPerf1Change(Sender: TObject);
|
||
88 | procedure CBPerf4Change(Sender: TObject);
|
||
89 | procedure CBAA1Change(Sender: TObject);
|
||
90 | procedure CBAA5Change(Sender: TObject);
|
||
91 | procedure CBAA2Change(Sender: TObject);
|
||
92 | procedure CBNRJ1Change(Sender: TObject);
|
||
93 | procedure CBNRJ2Change(Sender: TObject);
|
||
94 | procedure CBNRJ5Change(Sender: TObject);
|
||
95 | procedure CBMin3Change(Sender: TObject);
|
||
96 | procedure CBMin4Change(Sender: TObject);
|
||
97 | procedure CBAli3Change(Sender: TObject);
|
||
98 | procedure FormCreate(Sender: TObject);
|
||
99 | procedure CBMin1Change(Sender: TObject);
|
||
100 | procedure CBMin2Change(Sender: TObject);
|
||
101 | procedure CBMin5Change(Sender: TObject);
|
||
102 | procedure MI3DClick(Sender: TObject);
|
||
103 | procedure MIPreviewClick(Sender: TObject);
|
||
104 | procedure MIPrintClick(Sender: TObject);
|
||
105 | procedure CBAli1Change(Sender: TObject);
|
||
106 | procedure CBAli5Change(Sender: TObject);
|
||
107 | procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; |
||
108 | private
|
||
109 | { D?clarations priv?es }
|
||
110 | LinePerf: array[1..5] of TLineSeries; |
||
111 | BarPerf: TBarSeries; |
||
112 | ListAli, ListMat: TStrings; |
||
113 | CompositionComplete: boolean; |
||
114 | BarAli: array of TBarSeries; |
||
115 | BarMat: TBarSeries; |
||
116 | ListAA: TStrings; |
||
117 | BarAA: array of TBarSeries; |
||
118 | LineAA: array[1..5] of TLineSeries; |
||
119 | ListNRJ: TStrings; |
||
120 | BarNRJ: array of TBarSeries; |
||
121 | LineNRJ: array[1..5] of TLineSeries; |
||
122 | ListMin: TStrings; |
||
123 | BarMin: array of TBarSeries; |
||
124 | LineMin: array[1..5] of TLineSeries; |
||
125 | ListRej: TStrings; |
||
126 | BarRej: array of TBarSeries; |
||
127 | procedure ResetGraph;
|
||
128 | procedure InitPerf;
|
||
129 | procedure AffGraphPerf;
|
||
130 | procedure InitAli;
|
||
131 | procedure AffGraphAli;
|
||
132 | procedure InitAA;
|
||
133 | procedure AffGraphAA;
|
||
134 | procedure InitNRJ;
|
||
135 | procedure AffGraphNRJ;
|
||
136 | procedure InitMin;
|
||
137 | procedure AffGraphMin;
|
||
138 | procedure InitRej;
|
||
139 | procedure AffGraphRej;
|
||
140 | public
|
||
141 | { D?clarations publiques }
|
||
142 | end;
|
||
143 | |||
144 | var
|
||
145 | FCompSimulP: TFCompSimulP; |
||
146 | |||
147 | implementation
|
||
148 | |||
149 | uses
|
||
150 | Graphics, Printers, Math, SysUtils, gnugettext, UVariables, UStrings, |
||
151 | UFindRec, UUtil, UEchelle, UCalcul, UFSimulP, UFPrevGraph, UFWarning; |
||
152 | |||
153 | {$R *.dfm}
|
||
154 | |||
155 | { TFCompSimulP }
|
||
156 | |||
157 | procedure TFCompSimulP.FormCreate(Sender: TObject);
|
||
158 | begin
|
||
159 | if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1 |
||
160 | then
|
||
161 | Font.Name := 'Arial Unicode MS';
|
||
162 | TranslateComponent(Self); |
||
163 | Constraints.MinWidth := 544 + (Width - ClientWidth);
|
||
164 | Width := 640;
|
||
165 | Constraints.MinHeight := 360 + (Height - ClientHeight);
|
||
166 | Height := 480;
|
||
167 | CBPerf1.ItemIndex := 0;
|
||
168 | CBPerf2.ItemIndex := 0;
|
||
169 | CBPerf3.ItemIndex := 0;
|
||
170 | CBPerf3Global.ItemIndex := 0;
|
||
171 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Weight gain'), _('g'), _('d')])); |
||
172 | CBPerf4.Items.Add(Format('%s (%s)', [_('Body weight'), _('kg')])); |
||
173 | CBPerf4.ItemIndex := 0;
|
||
174 | CBAli1.ItemIndex := 0;
|
||
175 | CBAli3.ItemIndex := 0;
|
||
176 | CBAli4.Items.Add(StrKg); |
||
177 | CBAli4.Items.Add(Format('%s/%s', [StrKg, StrJ]));
|
||
178 | CBAli4.Items.Add('%');
|
||
179 | CBAli4.ItemIndex := 0;
|
||
180 | CBAli5.ItemIndex := 0;
|
||
181 | CBAA1.ItemIndex := 0;
|
||
182 | CBAA2.ItemIndex := 0;
|
||
183 | CBAA3.ItemIndex := 1;
|
||
184 | CBAA4.Items.Add(StrG); |
||
185 | CBAA4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
186 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
187 | CBAA4.Items.Add('%');
|
||
188 | CBAA4.ItemIndex := 0;
|
||
189 | CBAA5A.ItemIndex := 0;
|
||
190 | CBAA5B.ItemIndex := 0;
|
||
191 | CBNRJ1.ItemIndex := 0;
|
||
192 | CBNRJ2.ItemIndex := 0;
|
||
193 | CBNRJ3.ItemIndex := 0;
|
||
194 | CBNRJ3Valeurs.ItemIndex := 0;
|
||
195 | CBNRJ4.Items.Add(StrMJ); |
||
196 | CBNRJ4.Items.Add(Format('%s/%s', [StrMJ, StrJ]));
|
||
197 | CBNRJ4.Items.Add(Format('%s/%s %s', [StrMJ, StrKg, StrAlimentUnit]));
|
||
198 | CBNRJ4.Items.Add('%');
|
||
199 | CBNRJ4.ItemIndex := 0;
|
||
200 | CBNRJ5.ItemIndex := 0;
|
||
201 | CBMin1.ItemIndex := 0;
|
||
202 | CBMin2.ItemIndex := 0;
|
||
203 | CBMin3.ItemIndex := 0;
|
||
204 | CBMin4.Items.Add(StrG); |
||
205 | CBMin4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
206 | CBMin4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
207 | CBMin4.Items.Add('%');
|
||
208 | CBMin4.ItemIndex := 0;
|
||
209 | CBMin5A.ItemIndex := 0;
|
||
210 | CBMin5B.ItemIndex := 0;
|
||
211 | CBRej3.ItemIndex := 0;
|
||
212 | CBRej4.Items.Add(StrG); |
||
213 | CBRej4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
214 | CBRej4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
215 | CBRej4.Items.Add('%');
|
||
216 | CBRej4.ItemIndex := 0;
|
||
217 | end;
|
||
218 | |||
219 | procedure TFCompSimulP.FormShow(Sender: TObject);
|
||
220 | var
|
||
221 | k: integer; |
||
222 | begin
|
||
223 | MIPrint.Enabled := IsComplete or IsEducation;
|
||
224 | // Bas de page du graphique
|
||
225 | Graph.Foot.Text.Clear; |
||
226 | case FSimulP.PC.ActivePageIndex of |
||
227 | 1: // Comparaison |
||
228 | for k := 5 downto 1 do |
||
229 | if TabSimulP[k].Ok
|
||
230 | then
|
||
231 | begin
|
||
232 | if FSimulP.RBCompSimul.Checked
|
||
233 | then // Simulations simples |
||
234 | Graph.Foot.Text.Add(Format(StrSimulComp, [k, FindNomSimulP(TabSimulP[k].Simul)])) |
||
235 | else // Un ?l?ment d'une simulation |
||
236 | begin
|
||
237 | if FSimulP.RBCompProfil.Checked
|
||
238 | then // Profil animal |
||
239 | Graph.Foot.Text.Add(Format(StrSimulProfil, [k, FindNomSimulP(TabSimulP[k].Simul), FindNomProfilP(TabSimulP[k].Profil)])); |
||
240 | if FSimulP.RBCompSeqAli.Checked
|
||
241 | then // S?quence alimentaire |
||
242 | Graph.Foot.Text.Add(Format(StrSimulSeqAli, [k, FindNomSimulP(TabSimulP[k].Simul), FindNomSeqAliP(TabSimulP[k].SeqAli)])); |
||
243 | if FSimulP.RBCompRation.Checked
|
||
244 | then // Plan de rationnement |
||
245 | Graph.Foot.Text.Add(Format(StrSimulRation, [k, FindNomSimulP(TabSimulP[k].Simul), FindNomRationP(TabSimulP[k].Ration)])); |
||
246 | end;
|
||
247 | end;
|
||
248 | 2: // Sensibilit? |
||
249 | Graph.Foot.Text.Add(Format(StrSimulSens, [FSimulP.CBVariable.Text, FSimulP.CBSensSimul.Text])); |
||
250 | end;
|
||
251 | // Aliment
|
||
252 | InitAli; |
||
253 | // Performances
|
||
254 | InitPerf; |
||
255 | // Acides amin?s
|
||
256 | InitAA; |
||
257 | // Energie
|
||
258 | InitNRJ; |
||
259 | // Min?raux
|
||
260 | InitMin; |
||
261 | // Rejets
|
||
262 | InitRej; |
||
263 | // Abscisses par d?faut
|
||
264 | CBPerf2.ItemIndex := XCrois; |
||
265 | CBAA2.ItemIndex := XCrois; |
||
266 | CBNRJ2.ItemIndex := XCrois; |
||
267 | // Affichage principal
|
||
268 | PC.ActivePageIndex := 0;
|
||
269 | PCChange (nil);
|
||
270 | end;
|
||
271 | |||
272 | procedure TFCompSimulP.FormClose (Sender: TObject; var Action: TCloseAction); |
||
273 | var
|
||
274 | i, k: integer; |
||
275 | begin
|
||
276 | // Performances
|
||
277 | BarPerf.Free; |
||
278 | for k := 1 to 5 do |
||
279 | if TabSimulP[k].Ok
|
||
280 | then
|
||
281 | LinePerf[k].Free; |
||
282 | // Aliment
|
||
283 | BarMat.Free; |
||
284 | for i := 0 to ListAli.Count - 1 do |
||
285 | BarAli[i].Free; |
||
286 | SetLength(BarAli, 0);
|
||
287 | ListMat.Free; |
||
288 | ListAli.Free; |
||
289 | // Acides amin?s
|
||
290 | for k := 1 to 5 do |
||
291 | if TabSimulP[k].Ok
|
||
292 | then
|
||
293 | LineAA[k].Free; |
||
294 | for i := 0 to ListAA.Count - 1 do |
||
295 | BarAA[i].Free; |
||
296 | SetLength(BarAA, 0);
|
||
297 | ListAA.Free; |
||
298 | // Energie
|
||
299 | for k := 1 to 5 do |
||
300 | if TabSimulP[k].Ok
|
||
301 | then
|
||
302 | LineNRJ[k].Free; |
||
303 | for i := 0 to ListNRJ.Count - 1 do |
||
304 | BarNRJ[i].Free; |
||
305 | SetLength(BarNRJ, 0);
|
||
306 | ListNRJ.Free; |
||
307 | // Min?raux
|
||
308 | for k := 1 to 5 do |
||
309 | if TabSimulP[k].Ok
|
||
310 | then
|
||
311 | LineMin[k].Free; |
||
312 | for i := 0 to ListMin.Count - 1 do |
||
313 | BarMin[i].Free; |
||
314 | SetLength(BarMin, 0);
|
||
315 | ListMin.Free; |
||
316 | // Rejets
|
||
317 | for i := 0 to ListRej.Count - 1 do |
||
318 | BarRej[i].Free; |
||
319 | SetLength(BarRej, 0);
|
||
320 | ListRej.Free; |
||
321 | end;
|
||
322 | |||
323 | procedure TFCompSimulP.PCChange(Sender: TObject);
|
||
324 | begin
|
||
325 | case PC.ActivePageIndex of |
||
326 | 0: // Performances |
||
327 | AffGraphPerf; |
||
328 | 1: // Aliment |
||
329 | AffGraphAli; |
||
330 | 2: // Acides amin?s |
||
331 | AffGraphAA; |
||
332 | 3: // Energie |
||
333 | AffGraphNRJ; |
||
334 | 4: // Min?raux |
||
335 | AffGraphMin; |
||
336 | 5: // Rejets |
||
337 | AffGraphRej; |
||
338 | end;
|
||
339 | end;
|
||
340 | |||
341 | procedure TFCompSimulP.ResetGraph;
|
||
342 | var
|
||
343 | i, k: integer; |
||
344 | begin
|
||
345 | Graph.UndoZoom; |
||
346 | Graph.Legend.Visible := TRUE; |
||
347 | Graph.Title.Text.Clear; |
||
348 | Graph.SubTitle.Text.Clear; |
||
349 | Graph.BottomAxis.MinimumOffset := 0;
|
||
350 | Graph.BottomAxis.MaximumOffset := 0;
|
||
351 | // Performances
|
||
352 | for k := 1 to 5 do |
||
353 | if TabSimulP[k].Ok
|
||
354 | then
|
||
355 | LinePerf[k].Active := FALSE; |
||
356 | BarPerf.Active := FALSE; |
||
357 | // Aliment
|
||
358 | for i := 0 to ListAli.Count - 1 do |
||
359 | BarAli[i].Active := FALSE; |
||
360 | BarMat.Active := FALSE; |
||
361 | // Acides amin?s
|
||
362 | for i := 0 to ListAA.Count - 1 do |
||
363 | BarAA[i].Active := FALSE; |
||
364 | for k := 1 to 5 do |
||
365 | if TabSimulP[k].Ok
|
||
366 | then
|
||
367 | LineAA[k].Active := FALSE; |
||
368 | // Energie
|
||
369 | for i := 0 to ListNRJ.Count - 1 do |
||
370 | BarNRJ[i].Active := FALSE; |
||
371 | for k := 1 to 5 do |
||
372 | if TabSimulP[k].Ok
|
||
373 | then
|
||
374 | LineNRJ[k].Active := FALSE; |
||
375 | // Min?raux
|
||
376 | for i := 0 to ListMin.Count - 1 do |
||
377 | BarMin[i].Active := FALSE; |
||
378 | for k := 1 to 5 do |
||
379 | if TabSimulP[k].Ok
|
||
380 | then
|
||
381 | LineMin[k].Active := FALSE; |
||
382 | // Rejets
|
||
383 | for i := 0 to ListRej.Count - 1 do |
||
384 | BarRej[i].Active := FALSE; |
||
385 | end;
|
||
386 | |||
387 | procedure TFCompSimulP.MI3DClick(Sender: TObject);
|
||
388 | begin
|
||
389 | Graph.View3D := not (Graph.View3D);
|
||
390 | end;
|
||
391 | |||
392 | procedure TFCompSimulP.MIPreviewClick(Sender: TObject);
|
||
393 | begin
|
||
394 | FPrevGraph := TFPrevGraph.Create(Self); |
||
395 | with FPrevGraph do |
||
396 | begin
|
||
397 | TPPGraph.Panels.Add(Graph); |
||
398 | ShowModal; |
||
399 | Release; |
||
400 | end;
|
||
401 | end;
|
||
402 | |||
403 | procedure TFCompSimulP.MIPrintClick(Sender: TObject);
|
||
404 | begin
|
||
405 | if PD.Execute
|
||
406 | then
|
||
407 | begin
|
||
408 | Printer.Orientation := poLandscape; |
||
409 | Graph.Print; |
||
410 | end;
|
||
411 | end;
|
||
412 | |||
413 | //////////////////////
|
||
414 | // Performances //
|
||
415 | //////////////////////
|
||
416 | procedure TFCompSimulP.InitPerf;
|
||
417 | const
|
||
418 | TabColor: array[1..5] of TColor |
||
419 | = (clRed, clGreen, clYellow, clBlue, clFuchsia); |
||
420 | var
|
||
421 | k: integer; |
||
422 | begin
|
||
423 | // LinePerf : s?ries (lignes) graphiques
|
||
424 | for k := 1 to 5 do |
||
425 | if TabSimulP[k].Ok
|
||
426 | then
|
||
427 | begin
|
||
428 | LinePerf[k] := TLineSeries.Create (Graph); |
||
429 | LinePerf[k].ParentChart := Graph; |
||
430 | case FSimulP.PC.ActivePageIndex of |
||
431 | 1: // Comparaison |
||
432 | LinePerf[k].Title := Format('Simulation %d', [k]);
|
||
433 | 2: // Sensibilit? |
||
434 | if FSimulP.CBVariable.ItemIndex = 6 |
||
435 | then // Gaspillage |
||
436 | if TabSimulP[k].Variation > 0 |
||
437 | then
|
||
438 | LinePerf[k].Title := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
439 | else
|
||
440 | LinePerf[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
441 | else
|
||
442 | LinePerf[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
443 | end;
|
||
444 | LinePerf[k].SeriesColor := TabColor[k]; |
||
445 | LinePerf[k].LinePen.Color := LinePerf[k].SeriesColor; |
||
446 | LinePerf[k].LinePen.Width := 2;
|
||
447 | Graph.AddSeries (LinePerf[k]); |
||
448 | end;
|
||
449 | // BarPerf : s?rie (barre) graphique
|
||
450 | BarPerf := TBarSeries.Create(Graph); |
||
451 | BarPerf.ParentChart := Graph; |
||
452 | // BarPerf.Title := ' ';
|
||
453 | BarPerf.SeriesColor := clTeal; |
||
454 | BarPerf.BarPen.Color := BarPerf.SeriesColor; |
||
455 | //BarPerf.Marks.Visible := FALSE;
|
||
456 | BarPerf.Marks.ArrowLength := -16;
|
||
457 | BarPerf.Marks.Arrow.Visible := FALSE; |
||
458 | BarPerf.Marks.Brush.Style := bsClear; |
||
459 | BarPerf.Marks.Frame.Visible := FALSE; |
||
460 | BarPerf.Marks.Style := smsValue; |
||
461 | //BarPerf.AutoMarkPosition := FALSE;
|
||
462 | Graph.AddSeries(BarPerf); |
||
463 | end;
|
||
464 | |||
465 | procedure TFCompSimulP.AffGraphPerf;
|
||
466 | var
|
||
467 | j, k: integer; |
||
468 | cumul: double; |
||
469 | |||
470 | // Abscisse
|
||
471 | function PerfX: double;
|
||
472 | begin
|
||
473 | case CBPerf1.ItemIndex of |
||
474 | 0: // Affichage dynamique |
||
475 | case CBPerf2.ItemIndex of |
||
476 | 0: // Poids vif |
||
477 | result := PResSimulP.TabResult[2, j];
|
||
478 | 1: // Age |
||
479 | result := PResSimulP.TabResult[1, j];
|
||
480 | 2: // Jours |
||
481 | result := j; |
||
482 | 3: // Semaines |
||
483 | result := j / 7;
|
||
484 | else
|
||
485 | result := 0;
|
||
486 | end;
|
||
487 | else
|
||
488 | result := 0;
|
||
489 | end;
|
||
490 | end;
|
||
491 | |||
492 | // Ordonn?e
|
||
493 | function PerfY: double;
|
||
494 | var
|
||
495 | h: integer; |
||
496 | v, conso, gain: double; |
||
497 | begin
|
||
498 | case CBPerf1.ItemIndex of |
||
499 | 0: // Affichage dynamique |
||
500 | case CBPerf3.ItemIndex of |
||
501 | 0: // Body weight |
||
502 | case CBPerf4.ItemIndex of |
||
503 | 0: // Weight gain (g/d) |
||
504 | result := PResSimulP.TabResult[84, j] * 1000; |
||
505 | 1: // Body weight (kg) |
||
506 | result := PResSimulP.TabResult[2, j];
|
||
507 | else
|
||
508 | result := 0;
|
||
509 | end;
|
||
510 | 1: // Time |
||
511 | case CBPerf4.ItemIndex of |
||
512 | 0: // Age (d) |
||
513 | result := PResSimulP.TabResult[1, j];
|
||
514 | else
|
||
515 | result := 0;
|
||
516 | end;
|
||
517 | 2: // Feed usage |
||
518 | case CBPerf4.ItemIndex of |
||
519 | 0: // Feed usage (kg/d) |
||
520 | result := PResSimulP.TabResult[113, j];
|
||
521 | 1: // Feed usage (kg DM/d) |
||
522 | result := PResSimulP.TabResult[106, j] * PResSimulP.TabResult[113, j]; |
||
523 | 2: // Feed usage (MJ DE/d) |
||
524 | result := PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]; |
||
525 | 3: // Feed usage (MJ ME/d) |
||
526 | result := PResSimulP.TabResult[89, j] * PResSimulP.TabResult[113, j]; |
||
527 | 4: // Feed usage (MJ NE/d) |
||
528 | result := PResSimulP.TabResult[90, j] * PResSimulP.TabResult[113, j]; |
||
529 | 5: // Total feed usage (kg) |
||
530 | begin
|
||
531 | cumul := cumul + PResSimulP.TabResult[113, j];
|
||
532 | result := cumul; |
||
533 | end;
|
||
534 | 6: // Total feed usage (kg DM) |
||
535 | begin
|
||
536 | cumul := cumul + PResSimulP.TabResult[106, j] * PResSimulP.TabResult[113, j]; |
||
537 | result := cumul; |
||
538 | end;
|
||
539 | 7: // Total feed usage (MJ DE) |
||
540 | begin
|
||
541 | cumul := cumul + PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]; |
||
542 | result := cumul; |
||
543 | end;
|
||
544 | 8: // Total feed usage (MJ ME) |
||
545 | begin
|
||
546 | cumul := cumul + PResSimulP.TabResult[89, j] * PResSimulP.TabResult[113, j]; |
||
547 | result := cumul; |
||
548 | end;
|
||
549 | 9: // Total feed usage (MJ NE) |
||
550 | begin
|
||
551 | cumul := cumul + PResSimulP.TabResult[90, j] * PResSimulP.TabResult[113, j]; |
||
552 | result := cumul; |
||
553 | end;
|
||
554 | else
|
||
555 | result := 0;
|
||
556 | end;
|
||
557 | 3: // Feed wastage |
||
558 | case CBPerf4.ItemIndex of |
||
559 | 0: // Feed wastage (%) |
||
560 | result := PResSimulP.TabResult[112, j] * 100; |
||
561 | 1: // Total feed wastage (kg) |
||
562 | begin
|
||
563 | cumul := cumul + PResSimulP.TabResult[113, j] - PResSimulP.TabResult[11, j]; |
||
564 | result := cumul; |
||
565 | end;
|
||
566 | else
|
||
567 | result := 0;
|
||
568 | end;
|
||
569 | 4: // Feed intake |
||
570 | case CBPerf4.ItemIndex of |
||
571 | 0: // Feed intake (kg/d) |
||
572 | result := PResSimulP.TabResult[11, j];
|
||
573 | 1: // Feed intake (kg DM/d) |
||
574 | result := PResSimulP.TabResult[106, j] * PResSimulP.TabResult[11, j]; |
||
575 | 2: // Feed intake (MJ DE/d) |
||
576 | result := PResSimulP.TabResult[109, j] * PResSimulP.TabResult[11, j]; |
||
577 | 3: // Feed intake (MJ ME/d) |
||
578 | result := PResSimulP.TabResult[89, j] * PResSimulP.TabResult[11, j]; |
||
579 | 4: // Feed intake (MJ NE/d) |
||
580 | result := PResSimulP.TabResult[90, j] * PResSimulP.TabResult[11, j]; |
||
581 | 5: // Total feed intake (kg) |
||
582 | begin
|
||
583 | cumul := cumul + PResSimulP.TabResult[11, j];
|
||
584 | result := cumul; |
||
585 | end;
|
||
586 | 6: // Total feed intake (kg DM) |
||
587 | begin
|
||
588 | cumul := cumul + PResSimulP.TabResult[106, j] * PResSimulP.TabResult[11, j]; |
||
589 | result := cumul; |
||
590 | end;
|
||
591 | 7: // Total feed intake (MJ DE) |
||
592 | begin
|
||
593 | cumul := cumul + PResSimulP.TabResult[109, j] * PResSimulP.TabResult[11, j]; |
||
594 | result := cumul; |
||
595 | end;
|
||
596 | 8: // Total feed intake (MJ ME) |
||
597 | begin
|
||
598 | cumul := cumul + PResSimulP.TabResult[89, j] * PResSimulP.TabResult[11, j]; |
||
599 | result := cumul; |
||
600 | end;
|
||
601 | 9: // Total feed intake (MJ NE) |
||
602 | begin
|
||
603 | cumul := cumul + PResSimulP.TabResult[90, j] * PResSimulP.TabResult[11, j]; |
||
604 | result := cumul; |
||
605 | end;
|
||
606 | else
|
||
607 | result := 0;
|
||
608 | end;
|
||
609 | 5: // Feed:Gain |
||
610 | if PResSimulP.TabResult[84, j] <> 0 |
||
611 | then
|
||
612 | case CBPerf4.ItemIndex of |
||
613 | 0: // Feed:Gain (kg/kg) |
||
614 | result := PResSimulP.TabResult[113, j] / PResSimulP.TabResult[84, j]; |
||
615 | 1: // Feed:Gain (kg DM/kg) |
||
616 | result := (PResSimulP.TabResult[106, j] * PResSimulP.TabResult[113, j]) / PResSimulP.TabResult[84, j]; |
||
617 | 2: // Feed:Gain (MJ DE/kg) |
||
618 | result := (PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]) / PResSimulP.TabResult[84, j]; |
||
619 | 3: // Feed:Gain (MJ ME/kg) |
||
620 | result := (PResSimulP.TabResult[89, j] * PResSimulP.TabResult[113, j]) / PResSimulP.TabResult[84, j]; |
||
621 | 4: // Feed:Gain (MJ NE/kg) |
||
622 | result := (PResSimulP.TabResult[90, j] * PResSimulP.TabResult[113, j]) / PResSimulP.TabResult[84, j]; |
||
623 | else
|
||
624 | result := 0;
|
||
625 | end
|
||
626 | else
|
||
627 | result := 0;
|
||
628 | 6: // Gain:Feed |
||
629 | case CBPerf4.ItemIndex of |
||
630 | 0: // Gain:Feed (kg/kg) |
||
631 | if PResSimulP.TabResult[113, j] <> 0 |
||
632 | then
|
||
633 | result := PResSimulP.TabResult[84, j] / PResSimulP.TabResult[113, j] |
||
634 | else
|
||
635 | result := 0;
|
||
636 | 1: // Gain:Feed (kg/kg DM) |
||
637 | if (PResSimulP.TabResult[113, j] <> 0) and (PResSimulP.TabResult[106, j] <> 0) |
||
638 | then
|
||
639 | result := PResSimulP.TabResult[84, j] / (PResSimulP.TabResult[106, j] * PResSimulP.TabResult[113, j]) |
||
640 | else
|
||
641 | result := 0;
|
||
642 | 2: // Gain:Feed (kg/MJ DE) |
||
643 | if (PResSimulP.TabResult[113, j] <> 0) and (PResSimulP.TabResult[109, j] <> 0) |
||
644 | then
|
||
645 | result := PResSimulP.TabResult[84, j] / (PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]) |
||
646 | else
|
||
647 | result := 0;
|
||
648 | 3: // Gain:Feed (kg/MJ ME) |
||
649 | if (PResSimulP.TabResult[113, j] <> 0) and (PResSimulP.TabResult[89, j] <> 0) |
||
650 | then
|
||
651 | result := PResSimulP.TabResult[84, j] / (PResSimulP.TabResult[89, j] * PResSimulP.TabResult[113, j]) |
||
652 | else
|
||
653 | result := 0;
|
||
654 | 4: // Gain:Feed (kg/MJ NE) |
||
655 | if (PResSimulP.TabResult[113, j] <> 0) and (PResSimulP.TabResult[90, j] <> 0) |
||
656 | then
|
||
657 | result := PResSimulP.TabResult[84, j] / (PResSimulP.TabResult[90, j] * PResSimulP.TabResult[113, j]) |
||
658 | else
|
||
659 | result := 0;
|
||
660 | else
|
||
661 | result := 0;
|
||
662 | end;
|
||
663 | 7: // Protein |
||
664 | case CBPerf4.ItemIndex of |
||
665 | 0: // Protein deposition (g/d) |
||
666 | result := PResSimulP.TabResult[79, j];
|
||
667 | 1: // Protein mass (kg) |
||
668 | result := PResSimulP.TabResult[49, j];
|
||
669 | 2: // Protein content (% of BW gain) |
||
670 | if PResSimulP.TabResult[84, j] <> 0 |
||
671 | then
|
||
672 | result := (PResSimulP.TabResult[79, j] / 1000) / PResSimulP.TabResult[84, j] * 100 |
||
673 | else
|
||
674 | result := 0;
|
||
675 | 3: // Protein content (% in BW) |
||
676 | if PResSimulP.TabResult[2, j] <> 0 |
||
677 | then
|
||
678 | result := PResSimulP.TabResult[49, j] / PResSimulP.TabResult[2, j] * 100 |
||
679 | else
|
||
680 | result := 0;
|
||
681 | else
|
||
682 | result := 0;
|
||
683 | end;
|
||
684 | 8: // Lipid |
||
685 | case CBPerf4.ItemIndex of |
||
686 | 0: // Lipid deposition (g/d) |
||
687 | result := PResSimulP.TabResult[80, j];
|
||
688 | 1: // Lipid mass (kg) |
||
689 | result := PResSimulP.TabResult[50, j];
|
||
690 | 2: // Lipid content (% of BW gain) |
||
691 | if PResSimulP.TabResult[84, j] <> 0 |
||
692 | then
|
||
693 | result := (PResSimulP.TabResult[80, j] / 1000) / PResSimulP.TabResult[84, j] * 100 |
||
694 | else
|
||
695 | result := 0;
|
||
696 | 3: // Lipid content (% in BW) |
||
697 | if PResSimulP.TabResult[2, j] <> 0 |
||
698 | then
|
||
699 | result := PResSimulP.TabResult[50, j] / PResSimulP.TabResult[2, j] * 100 |
||
700 | else
|
||
701 | result := 0;
|
||
702 | else
|
||
703 | result := 0;
|
||
704 | end;
|
||
705 | 9: // Carcass |
||
706 | case CBPerf4.ItemIndex of |
||
707 | 0: // Dressing percentage |
||
708 | result := CalcRC(PResSimulP.TabResult[2, PResSimulP.NbJSim], CalcRCStd(PProfilP.PVFin, PProfilP.Carcasse), PResSimulP.TabResult[2, j]) * 100; |
||
709 | 1: // Backfat thickness |
||
710 | if FatInfo = 0 |
||
711 | then // P2 |
||
712 | result := CalcP2(PResSimulP.TabResult[50, j])
|
||
713 | else // User defined |
||
714 | result := CalcUserFat(PResSimulP.TabResult[48, j], PResSimulP.TabResult[49, j], PResSimulP.TabResult[50, j]); |
||
715 | 2: // Lean meat percentage |
||
716 | if LeanInfo = 0 |
||
717 | then // TMP |
||
718 | result := CalcTMP(PResSimulP.TabResult[48, j], PResSimulP.TabResult[49, j], PResSimulP.TabResult[50, j]) |
||
719 | else // User defined |
||
720 | result := CalcUserLean(PResSimulP.TabResult[48, j], PResSimulP.TabResult[49, j], PResSimulP.TabResult[50, j]); |
||
721 | else
|
||
722 | result := 0;
|
||
723 | end;
|
||
724 | else
|
||
725 | result := 0;
|
||
726 | end;
|
||
727 | 1: // Affichage global |
||
728 | begin
|
||
729 | v := 0;
|
||
730 | case CBPerf3Global.ItemIndex of |
||
731 | 0: // Body weight |
||
732 | case CBPerf4.ItemIndex of |
||
733 | 0: // Weight gain (g/d) |
||
734 | for h := 1 to PresSimulP.NbJSim do |
||
735 | v := v + PResSimulP.TabResult[84, h] * 1000 / PresSimulP.NbJSim; |
||
736 | 1: // Weight gain (kg) |
||
737 | for h := 1 to PresSimulP.NbJSim do |
||
738 | v := v + PResSimulP.TabResult[84, h];
|
||
739 | end;
|
||
740 | 1: // Time |
||
741 | case CBPerf4.ItemIndex of |
||
742 | 0: // Duration (d) |
||
743 | v := PresSimulP.NbJSim; |
||
744 | end;
|
||
745 | 2: // Feed usage |
||
746 | case CBPerf4.ItemIndex of |
||
747 | 0: // Feed usage (kg/d) |
||
748 | for h := 1 to PresSimulP.NbJSim do |
||
749 | v := v + PResSimulP.TabResult[113, h] / PresSimulP.NbJSim;
|
||
750 | 1: // Feed usage (kg DM/d) |
||
751 | for h := 1 to PresSimulP.NbJSim do |
||
752 | v := v + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[113, h] / PresSimulP.NbJSim; |
||
753 | 2: // Feed usage (MJ DE/d) |
||
754 | for h := 1 to PresSimulP.NbJSim do |
||
755 | v := v + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[113, h] / PresSimulP.NbJSim; |
||
756 | 3: // Feed usage (MJ ME/d) |
||
757 | for h := 1 to PresSimulP.NbJSim do |
||
758 | v := v + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[113, h] / PresSimulP.NbJSim; |
||
759 | 4: // Feed usage (MJ NE/d) |
||
760 | for h := 1 to PresSimulP.NbJSim do |
||
761 | v := v + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[113, h] / PresSimulP.NbJSim; |
||
762 | 5: // Total feed usage (kg) |
||
763 | for h := 1 to PresSimulP.NbJSim do |
||
764 | v := v + PResSimulP.TabResult[113, h];
|
||
765 | 6: // Total feed usage (kg DM) |
||
766 | for h := 1 to PresSimulP.NbJSim do |
||
767 | v := v + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[113, h]; |
||
768 | 7: // Total feed usage (MJ DE) |
||
769 | for h := 1 to PresSimulP.NbJSim do |
||
770 | v := v + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[113, h]; |
||
771 | 8: // Total feed usage (MJ ME) |
||
772 | for h := 1 to PresSimulP.NbJSim do |
||
773 | v := v + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[113, h]; |
||
774 | 9: // Total feed usage (MJ NE) |
||
775 | for h := 1 to PresSimulP.NbJSim do |
||
776 | v := v + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[113, h]; |
||
777 | end;
|
||
778 | 3: // Feed wastage |
||
779 | case CBPerf4.ItemIndex of |
||
780 | 0: // Feed wastage (%) |
||
781 | for h := 1 to PresSimulP.NbJSim do |
||
782 | v := v + PResSimulP.TabResult[112, h] * 100 / PresSimulP.NbJSim; |
||
783 | 1: // Total feed wastage (kg) |
||
784 | for h := 1 to PresSimulP.NbJSim do |
||
785 | v := v + PResSimulP.TabResult[113, h] - PResSimulP.TabResult[11, h]; |
||
786 | end;
|
||
787 | 4: // Feed intake |
||
788 | case CBPerf4.ItemIndex of |
||
789 | 0: // Feed intake (kg/d) |
||
790 | for h := 1 to PresSimulP.NbJSim do |
||
791 | v := v + PResSimulP.TabResult[11, h] / PresSimulP.NbJSim;
|
||
792 | 1: // Feed intake (kg DM/d) |
||
793 | for h := 1 to PresSimulP.NbJSim do |
||
794 | v := v + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[11, h] / PresSimulP.NbJSim; |
||
795 | 2: // Feed intake (MJ DE/d) |
||
796 | for h := 1 to PresSimulP.NbJSim do |
||
797 | v := v + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[11, h] / PresSimulP.NbJSim; |
||
798 | 3: // Feed intake (MJ ME/d) |
||
799 | for h := 1 to PresSimulP.NbJSim do |
||
800 | v := v + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[11, h] / PresSimulP.NbJSim; |
||
801 | 4: // Feed intake (MJ NE/d) |
||
802 | for h := 1 to PresSimulP.NbJSim do |
||
803 | v := v + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[11, h] / PresSimulP.NbJSim; |
||
804 | 5: // Total feed intake (kg) |
||
805 | for h := 1 to PresSimulP.NbJSim do |
||
806 | v := v + PResSimulP.TabResult[11, h];
|
||
807 | 6: // Total feed intake (kg DM) |
||
808 | for h := 1 to PresSimulP.NbJSim do |
||
809 | v := v + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[11, h]; |
||
810 | 7: // Total feed intake (MJ DE) |
||
811 | for h := 1 to PresSimulP.NbJSim do |
||
812 | v := v + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[11, h]; |
||
813 | 8: // Total feed intake (MJ ME) |
||
814 | for h := 1 to PresSimulP.NbJSim do |
||
815 | v := v + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[11, h]; |
||
816 | 9: // Total feed intake (MJ NE) |
||
817 | for h := 1 to PresSimulP.NbJSim do |
||
818 | v := v + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[11, h]; |
||
819 | end;
|
||
820 | 5: // Feed:Gain |
||
821 | begin
|
||
822 | conso := 0;
|
||
823 | for h := 1 to PresSimulP.NbJSim do |
||
824 | case CBPerf4.ItemIndex of |
||
825 | 0: // Feed:Gain (kg/kg) |
||
826 | conso := conso + PResSimulP.TabResult[113, h];
|
||
827 | 1: // Feed:Gain (kg DM/kg) |
||
828 | conso := conso + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[113, h]; |
||
829 | 2: // Feed:Gain (MJ DE/kg) |
||
830 | conso := conso + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[113, h]; |
||
831 | 3: // Feed:Gain (MJ ME/kg) |
||
832 | conso := conso + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[113, h]; |
||
833 | 4: // Feed:Gain (MJ NE/kg) |
||
834 | conso := conso + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[113, h]; |
||
835 | end;
|
||
836 | gain := 0;
|
||
837 | for h := 1 to PresSimulP.NbJSim do |
||
838 | gain := gain + PResSimulP.TabResult[84, h];
|
||
839 | if gain <> 0 |
||
840 | then
|
||
841 | v := conso / gain; |
||
842 | end;
|
||
843 | 6: // Gain:Feed |
||
844 | begin
|
||
845 | gain := 0;
|
||
846 | for h := 1 to PresSimulP.NbJSim do |
||
847 | gain := gain + PResSimulP.TabResult[84, h];
|
||
848 | conso := 0;
|
||
849 | for h := 1 to PresSimulP.NbJSim do |
||
850 | case CBPerf4.ItemIndex of |
||
851 | 0: // Gain:Feed (kg/kg) |
||
852 | conso := conso + PResSimulP.TabResult[113, h];
|
||
853 | 1: // Gain:Feed (kg/kg DM) |
||
854 | conso := conso + PResSimulP.TabResult[106, h] * PResSimulP.TabResult[113, h]; |
||
855 | 2: // Gain:Feed (kg/MJ DE) |
||
856 | conso := conso + PResSimulP.TabResult[109, h] * PResSimulP.TabResult[113, h]; |
||
857 | 3: // Gain:Feed (kg/MJ ME) |
||
858 | conso := conso + PResSimulP.TabResult[89, h] * PResSimulP.TabResult[113, h]; |
||
859 | 4: // Gain:Feed (kg/MJ NE) |
||
860 | conso := conso + PResSimulP.TabResult[90, h] * PResSimulP.TabResult[113, h]; |
||
861 | end;
|
||
862 | if conso <> 0 |
||
863 | then
|
||
864 | v := gain / conso; |
||
865 | end;
|
||
866 | 7: // Protein |
||
867 | case CBPerf4.ItemIndex of |
||
868 | 0: // Protein deposition (g/d) |
||
869 | for h := 1 to PresSimulP.NbJSim do |
||
870 | v := v + PResSimulP.TabResult[79, h] / PresSimulP.NbJSim;
|
||
871 | 1: // Protein deposition (kg) |
||
872 | for h := 1 to PresSimulP.NbJSim do |
||
873 | v := v + PResSimulP.TabResult[79, h] / 1000; |
||
874 | end;
|
||
875 | 8: // Lipid |
||
876 | case CBPerf4.ItemIndex of |
||
877 | 0: // Lipid deposition (g/d) |
||
878 | for h := 1 to PresSimulP.NbJSim do |
||
879 | v := v + PResSimulP.TabResult[80, h] / PresSimulP.NbJSim;
|
||
880 | 1: // Lipid deposition (kg) |
||
881 | for h := 1 to PresSimulP.NbJSim do |
||
882 | v := v + PResSimulP.TabResult[80, h] / 1000; |
||
883 | end;
|
||
884 | end;
|
||
885 | result := v; |
||
886 | end;
|
||
887 | else
|
||
888 | result := 0;
|
||
889 | end;
|
||
890 | end;
|
||
891 | |||
892 | // AffGraphPerf
|
||
893 | begin
|
||
894 | ResetGraph; |
||
895 | Graph.Legend.Inverted := FALSE; |
||
896 | Graph.Title.Text.Add(Format('%s (%s)', [TabPerf.Caption, CBPerf1.Text]));
|
||
897 | case CBPerf1.ItemIndex of |
||
898 | 0: // Affichage dynamique |
||
899 | begin
|
||
900 | Graph.LeftAxis.Title.Caption := CBPerf4.Text; |
||
901 | Graph.BottomAxis.Title.Caption := CBPerf2.Text; |
||
902 | // Affichage des lignes
|
||
903 | for k := 1 to 5 do |
||
904 | if TabSimulP[k].Ok
|
||
905 | then
|
||
906 | begin
|
||
907 | LinePerf[k].Active := TRUE; |
||
908 | LinePerf[k].Clear; |
||
909 | PResSimulP := TabSimulP[k].Result; |
||
910 | if TabSimulP[k].Profil = -1 |
||
911 | then // Profil de la simulation |
||
912 | PProfilP := ListProfilP[FindIdxProfilP(FindNomProfilP(PSimulP.Profil))] |
||
913 | else
|
||
914 | PProfilP := ListProfilP[FindIdxProfilP(FindNomProfilP(TabSimulP[k].Profil))]; |
||
915 | cumul := 0;
|
||
916 | for j := 1 to PresSimulP.NbJSim do |
||
917 | LinePerf[k].AddXY(PerfX, PerfY, '', clTeeColor);
|
||
918 | end;
|
||
919 | if CBPerf2.ItemIndex = 3 |
||
920 | then // Dur?e (semaine) |
||
921 | Graph.BottomAxis.Increment := 1
|
||
922 | else
|
||
923 | Graph.BottomAxis.Increment := 10;
|
||
924 | end;
|
||
925 | 1: // Affichage global |
||
926 | begin
|
||
927 | Graph.LeftAxis.Title.Caption := CBPerf4.Text; |
||
928 | Graph.Legend.Visible := FALSE; |
||
929 | case FSimulP.PC.ActivePageIndex of |
||
930 | 1: // Comparaison |
||
931 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
932 | 2: // Sensibilit? |
||
933 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
934 | end;
|
||
935 | // Affichage de la barre
|
||
936 | BarPerf.Active := TRUE; |
||
937 | BarPerf.Clear; |
||
938 | for k := 1 to 5 do |
||
939 | if TabSimulP[k].Ok
|
||
940 | then
|
||
941 | begin
|
||
942 | PResSimulP := TabSimulP[k].Result; |
||
943 | if TabSimulP[k].Profil = -1 |
||
944 | then // Profil de la simulation |
||
945 | PProfilP := ListProfilP[FindIdxProfilP(FindNomProfilP(PSimulP.Profil))] |
||
946 | else
|
||
947 | PProfilP := ListProfilP[FindIdxProfilP(FindNomProfilP(TabSimulP[k].Profil))]; |
||
948 | case FSimulP.PC.ActivePageIndex of |
||
949 | 1: // Comparaison |
||
950 | BarPerf.AddBar (PerfY, Format('%d', [k]), clTeeColor);
|
||
951 | 2: // Sensibilit? |
||
952 | if FSimulP.CBVariable.ItemIndex = 6 |
||
953 | then // Gaspillage |
||
954 | if TabSimulP[k].Variation > 0 |
||
955 | then
|
||
956 | BarPerf.AddBar(PerfY, Format('+%1.0f%%', [TabSimulP[k].Variation * 100]), clTeeColor) |
||
957 | else
|
||
958 | BarPerf.AddBar(PerfY, Format('%1.0f%%', [TabSimulP[k].Variation * 100]), clTeeColor) |
||
959 | else
|
||
960 | BarPerf.AddBar(PerfY, Format('%1.0f %%', [TabSimulP[k].Variation * 100]), clTeeColor); |
||
961 | end;
|
||
962 | end;
|
||
963 | BarPerf.ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
964 | end;
|
||
965 | end;
|
||
966 | AjustEchelle(Graph); |
||
967 | end;
|
||
968 | |||
969 | procedure TFCompSimulP.CBPerf1Change(Sender: TObject);
|
||
970 | begin
|
||
971 | CBPerf2.Visible := CBPerf1.ItemIndex = 0;
|
||
972 | CBPerf3.Visible := CBPerf1.ItemIndex = 0;
|
||
973 | CBPerf3Global.Visible := CBPerf1.ItemIndex = 1;
|
||
974 | CBPerf3Change(nil);
|
||
975 | end;
|
||
976 | |||
977 | procedure TFCompSimulP.CBPerf2Change(Sender: TObject);
|
||
978 | begin
|
||
979 | AffGraphPerf; |
||
980 | end;
|
||
981 | |||
982 | procedure TFCompSimulP.CBPerf3Change(Sender: TObject);
|
||
983 | begin
|
||
984 | CBPerf4.Items.Clear; |
||
985 | case CBPerf1.ItemIndex of |
||
986 | 0: // Affichage dynamique |
||
987 | case CBPerf3.ItemIndex of |
||
988 | 0: // Body weight |
||
989 | begin
|
||
990 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Weight gain'), _('g'), _('d')])); |
||
991 | CBPerf4.Items.Add(Format('%s (%s)', [_('Body weight'), _('kg')])); |
||
992 | end;
|
||
993 | 1: // Time |
||
994 | CBPerf4.Items.Add(Format('%s (%s)', [_('Age'), _('d')])); |
||
995 | 2: // Feed usage |
||
996 | begin
|
||
997 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('kg'), _('d')])); |
||
998 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('kg DM'), _('d')])); |
||
999 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ DE'), _('d')])); |
||
1000 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ ME'), _('d')])); |
||
1001 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ NE'), _('d')])); |
||
1002 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('kg')])); |
||
1003 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('kg DM')])); |
||
1004 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ DE')])); |
||
1005 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ ME')])); |
||
1006 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ NE')])); |
||
1007 | end;
|
||
1008 | 3: // Feed wastage |
||
1009 | begin
|
||
1010 | CBPerf4.Items.Add(Format('%s (%%)', [_('Feed wastage')])); |
||
1011 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed wastage'), _('kg')])); |
||
1012 | end;
|
||
1013 | 4: // Feed intake |
||
1014 | begin
|
||
1015 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('kg'), _('d')])); |
||
1016 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('kg DM'), _('d')])); |
||
1017 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ DE'), _('d')])); |
||
1018 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ ME'), _('d')])); |
||
1019 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ NE'), _('d')])); |
||
1020 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('kg')])); |
||
1021 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('kg DM')])); |
||
1022 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ DE')])); |
||
1023 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ ME')])); |
||
1024 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ NE')])); |
||
1025 | end;
|
||
1026 | 5: // Feed:Gain |
||
1027 | begin
|
||
1028 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('kg'), _('kg')])); |
||
1029 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('kg DM'), _('kg')])); |
||
1030 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ DE'), _('kg')])); |
||
1031 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ ME'), _('kg')])); |
||
1032 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ NE'), _('kg')])); |
||
1033 | end;
|
||
1034 | 6: // Gain:Feed |
||
1035 | begin
|
||
1036 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('kg')])); |
||
1037 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('kg DM')])); |
||
1038 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ DE')])); |
||
1039 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ ME')])); |
||
1040 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ NE')])); |
||
1041 | end;
|
||
1042 | 7: // Protein |
||
1043 | begin
|
||
1044 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Protein deposition'), _('g'), _('d')])); |
||
1045 | CBPerf4.Items.Add(Format('%s (%s)', [_('Protein mass'), _('kg')])); |
||
1046 | CBPerf4.Items.Add(Format('%s (%s)', [_('Protein content'), _('% BW gain')])); |
||
1047 | CBPerf4.Items.Add(Format('%s (%s)', [_('Protein content'), _('% BW')])); |
||
1048 | end;
|
||
1049 | 8: // Lipid |
||
1050 | begin
|
||
1051 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Lipid deposition'), _('g'), _('d')])); |
||
1052 | CBPerf4.Items.Add(Format('%s (%s)', [_('Lipid mass'), _('kg')])); |
||
1053 | CBPerf4.Items.Add(Format('%s (%s)', [_('Lipid content'), _('% BW gain')])); |
||
1054 | CBPerf4.Items.Add(Format('%s (%s)', [_('Lipid content'), _('% BW')])); |
||
1055 | end;
|
||
1056 | 9: // Carcass |
||
1057 | begin
|
||
1058 | CBPerf4.Items.Add(_('Dressing percentage'));
|
||
1059 | if FatInfo = 0 |
||
1060 | then // P2 |
||
1061 | CBPerf4.Items.Add(Format('%s (%s)', [_('Backfat thickness'), _('mm')])) |
||
1062 | else // User defined |
||
1063 | if Length(UserFatLongName) = 0 |
||
1064 | then
|
||
1065 | CBPerf4.Items.Add(Format('%s (%s)', [_('User-defined backfat thickness'), _('mm')])) |
||
1066 | else
|
||
1067 | CBPerf4.Items.Add(Format('%s (%s)', [UserFatLongName, _('mm')])); |
||
1068 | if LeanInfo = 0 |
||
1069 | then // TMP |
||
1070 | CBPerf4.Items.Add(Format('%s (%%)', [_('Lean meat')])) |
||
1071 | else // User defined |
||
1072 | if Length(UserLeanLongName) = 0 |
||
1073 | then
|
||
1074 | CBPerf4.Items.Add(Format('%s (%%)', [_('User-defined lean meat')])) |
||
1075 | else
|
||
1076 | CBPerf4.Items.Add(Format('%s (%%)', [UserLeanLongName]));
|
||
1077 | end;
|
||
1078 | end;
|
||
1079 | 1: // Affichage global |
||
1080 | case CBPerf3Global.ItemIndex of |
||
1081 | 0: // Body weight |
||
1082 | begin
|
||
1083 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Weight gain'), _('g'), _('d')])); |
||
1084 | CBPerf4.Items.Add(Format('%s (%s)', [_('Weight gain'), _('kg')])); |
||
1085 | end;
|
||
1086 | 1: // Time |
||
1087 | CBPerf4.Items.Add(Format('%s (%s)', [_('Duration'), _('d')])); |
||
1088 | 2: // Feed usage |
||
1089 | begin
|
||
1090 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('kg'), _('d')])); |
||
1091 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('kg DM'), _('d')])); |
||
1092 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ DE'), _('d')])); |
||
1093 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ ME'), _('d')])); |
||
1094 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed usage'), _('MJ NE'), _('d')])); |
||
1095 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('kg')])); |
||
1096 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('kg DM')])); |
||
1097 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ DE')])); |
||
1098 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ ME')])); |
||
1099 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed usage'), _('MJ NE')])); |
||
1100 | end;
|
||
1101 | 3: // Feed wastage |
||
1102 | begin
|
||
1103 | CBPerf4.Items.Add(Format('%s (%%)', [_('Feed wastage')])); |
||
1104 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed wastage'), _('kg')])); |
||
1105 | end;
|
||
1106 | 4: // Feed intake |
||
1107 | begin
|
||
1108 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('kg'), _('d')])); |
||
1109 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('kg DM'), _('d')])); |
||
1110 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ DE'), _('d')])); |
||
1111 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ ME'), _('d')])); |
||
1112 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Feed intake'), _('MJ NE'), _('d')])); |
||
1113 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('kg')])); |
||
1114 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('kg DM')])); |
||
1115 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ DE')])); |
||
1116 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ ME')])); |
||
1117 | CBPerf4.Items.Add(Format('%s (%s)', [_('Total feed intake'), _('MJ NE')])); |
||
1118 | end;
|
||
1119 | 5: // Feed:Gain |
||
1120 | begin
|
||
1121 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('kg'), _('kg')])); |
||
1122 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('kg DM'), _('kg')])); |
||
1123 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ DE'), _('kg')])); |
||
1124 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ ME'), _('kg')])); |
||
1125 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('F:G'), _('MJ NE'), _('kg')])); |
||
1126 | end;
|
||
1127 | 6: // Gain:Feed |
||
1128 | begin
|
||
1129 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('kg')])); |
||
1130 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('kg DM')])); |
||
1131 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ DE')])); |
||
1132 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ ME')])); |
||
1133 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('G:F'), _('kg'), _('MJ NE')])); |
||
1134 | end;
|
||
1135 | 7: // Protein |
||
1136 | begin
|
||
1137 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Protein deposition'), _('g'), _('d')])); |
||
1138 | CBPerf4.Items.Add(Format('%s (%s)', [_('Protein deposition'), _('kg')])); |
||
1139 | end;
|
||
1140 | 8: // Lipid |
||
1141 | begin
|
||
1142 | CBPerf4.Items.Add(Format('%s (%s/%s)', [_('Lipid deposition'), _('g'), _('d')])); |
||
1143 | CBPerf4.Items.Add(Format('%s (%s)', [_('Lipid deposition'), _('kg')])); |
||
1144 | end;
|
||
1145 | end;
|
||
1146 | end;
|
||
1147 | CBPerf4.ItemIndex := 0;
|
||
1148 | AffGraphPerf; |
||
1149 | end;
|
||
1150 | |||
1151 | procedure TFCompSimulP.CBPerf4Change(Sender: TObject);
|
||
1152 | begin
|
||
1153 | AffGraphPerf; |
||
1154 | end;
|
||
1155 | |||
1156 | /////////////////
|
||
1157 | // Aliment //
|
||
1158 | /////////////////
|
||
1159 | procedure TFCompSimulP.InitAli;
|
||
1160 | var
|
||
1161 | i, j, k: integer; |
||
1162 | nom: string;
|
||
1163 | begin
|
||
1164 | // ListAli : liste des aliments utilis?s
|
||
1165 | ListAli := TStringList.Create; |
||
1166 | for k := 1 to 5 do // 5 simulations |
||
1167 | if TabSimulP[k].Ok
|
||
1168 | then
|
||
1169 | for i := 1 to 2 do // 2 aliments |
||
1170 | for j := 1 to TabSimulP[k].Result.NbJSim do |
||
1171 | if TabSimulP[k].Result.TabResult[8 + i, j] > 0 |
||
1172 | then
|
||
1173 | begin
|
||
1174 | nom := FindNomAliment(Trunc(TabSimulP[k].Result.TabResult[6 + i, j]));
|
||
1175 | if ListAli.IndexOf (nom) = -1 |
||
1176 | then
|
||
1177 | ListAli.Add(nom); |
||
1178 | end;
|
||
1179 | // BarAli : s?ries (barres) graphiques
|
||
1180 | SetLength(BarAli, ListAli.Count); |
||
1181 | for i := 0 to ListAli.Count - 1 do |
||
1182 | begin
|
||
1183 | BarAli[i] := TBarSeries.Create(Graph); |
||
1184 | BarAli[i].ParentChart := Graph; |
||
1185 | BarAli[i].Title := ListAli[i]; |
||
1186 | BarAli[i].BarPen.Color := BarAli[i].SeriesColor; |
||
1187 | //BarAli[i].Marks.Visible := FALSE;
|
||
1188 | BarAli[i].Marks.ArrowLength := -16;
|
||
1189 | BarAli[i].Marks.Arrow.Visible := FALSE; |
||
1190 | BarAli[i].Marks.Brush.Style := bsClear; |
||
1191 | BarAli[i].Marks.Frame.Visible := FALSE; |
||
1192 | BarAli[i].Marks.Style := smsValue; |
||
1193 | //BarAli[i].AutoMarkPosition := FALSE;
|
||
1194 | Graph.AddSeries(BarAli[i]); |
||
1195 | end;
|
||
1196 | // ListMat : liste des mati?res premi?res utilis?es
|
||
1197 | CompositionComplete := TRUE; |
||
1198 | ListMat := TStringList.Create; |
||
1199 | for i := 0 to ListAli.Count - 1 do |
||
1200 | begin
|
||
1201 | PAliment := ListAliment[FindIdxAliment(ListAli[i])]; |
||
1202 | if PAliment.MP.NbMat > 0 |
||
1203 | then
|
||
1204 | for j := 0 to PAliment.MP.NbMat - 1 do |
||
1205 | begin
|
||
1206 | nom := FindNomMatiere(PAliment.MP.NumMat[j]); |
||
1207 | if ListMat.IndexOf(nom) = -1 |
||
1208 | then
|
||
1209 | ListMat.Add(nom); |
||
1210 | end
|
||
1211 | else
|
||
1212 | CompositionComplete := FALSE; |
||
1213 | end;
|
||
1214 | CBAli1.Visible := ConfAffMP and CompositionComplete;
|
||
1215 | CBAli5.Items.Assign(ListMat); |
||
1216 | CBAli5.ItemIndex := 0;
|
||
1217 | // BarMat : s?rie (barre) graphique
|
||
1218 | BarMat := TBarSeries.Create(Graph); |
||
1219 | BarMat.ParentChart := Graph; |
||
1220 | BarMat.SeriesColor := clTeal; |
||
1221 | BarMat.BarPen.Color := BarMat.SeriesColor; |
||
1222 | //BarMat.Marks.Visible := FALSE;
|
||
1223 | BarMat.Marks.ArrowLength := -16;
|
||
1224 | BarMat.Marks.Arrow.Visible := FALSE; |
||
1225 | BarMat.Marks.Brush.Style := bsClear; |
||
1226 | BarMat.Marks.Frame.Visible := FALSE; |
||
1227 | BarMat.Marks.Style := smsValue; |
||
1228 | Graph.AddSeries(BarMat); |
||
1229 | end;
|
||
1230 | |||
1231 | procedure TFCompSimulP.AffGraphAli;
|
||
1232 | var
|
||
1233 | i, k: integer; |
||
1234 | y: double; |
||
1235 | s: string;
|
||
1236 | |||
1237 | // Ordonn?e (Aliments)
|
||
1238 | function AliY: double;
|
||
1239 | var
|
||
1240 | h: integer; |
||
1241 | v, d: double; |
||
1242 | begin
|
||
1243 | // Diviseur
|
||
1244 | case CBAli3.ItemIndex of |
||
1245 | 0: // Quantit? |
||
1246 | case CBAli4.ItemIndex of |
||
1247 | 1: // Dur?e |
||
1248 | d := PresSimulP.NbJSim; |
||
1249 | else
|
||
1250 | d := 1;
|
||
1251 | end;
|
||
1252 | 1: // Co?t |
||
1253 | case CBAli4.ItemIndex of |
||
1254 | 1: // Dur?e |
||
1255 | d := PresSimulP.NbJSim; |
||
1256 | 2: // GMQ |
||
1257 | begin
|
||
1258 | d := 0;
|
||
1259 | if PresSimulP.NbJSim > 1 |
||
1260 | then
|
||
1261 | for h := 1 to PresSimulP.NbJSim do |
||
1262 | d := d + PResSimulP.TabResult[84, h];
|
||
1263 | end;
|
||
1264 | 3: // Aliment |
||
1265 | begin
|
||
1266 | d := 0;
|
||
1267 | if PresSimulP.NbJSim > 1 |
||
1268 | then
|
||
1269 | for h := 1 to PresSimulP.NbJSim do |
||
1270 | d := d + PResSimulP.TabResult[113, h];
|
||
1271 | end;
|
||
1272 | else
|
||
1273 | d := 1;
|
||
1274 | end;
|
||
1275 | else
|
||
1276 | d := 1;
|
||
1277 | end;
|
||
1278 | v := 0;
|
||
1279 | if PresSimulP.NbJSim > 1 |
||
1280 | then
|
||
1281 | for h := 1 to PresSimulP.NbJSim do |
||
1282 | begin
|
||
1283 | // Aliment 1
|
||
1284 | if (PResSimulP.TabResult[7, h] <> -1) and (FindNomAliment(Trunc(PresSimulP.TabResult[7, h])) = ListAli[i]) |
||
1285 | then
|
||
1286 | v := v + (PresSimulP.TabResult[113, h] * PresSimulP.TabResult[9, h] / 100); |
||
1287 | // Aliment 2
|
||
1288 | if (PResSimulP.TabResult[8, h] <> -1) and (FindNomAliment(Trunc(PresSimulP.TabResult[8, h])) = ListAli[i]) |
||
1289 | then
|
||
1290 | v := v + (PresSimulP.TabResult[113, h] * PresSimulP.TabResult[10, h] / 100); |
||
1291 | end;
|
||
1292 | if CBAli3.ItemIndex = 1 |
||
1293 | then // Co?t |
||
1294 | begin
|
||
1295 | PAliment := ListAliment[FindIdxAliment(ListAli[i])]; |
||
1296 | v := v * PAliment.Prix / 1000;
|
||
1297 | end;
|
||
1298 | result := v / d; |
||
1299 | end;
|
||
1300 | |||
1301 | // Ordonn?es (Mati?res premi?res)
|
||
1302 | function MatY: double;
|
||
1303 | var
|
||
1304 | g, h: integer; |
||
1305 | v, d: double; |
||
1306 | begin
|
||
1307 | // Diviseur
|
||
1308 | if CBAli4.ItemIndex = 1 |
||
1309 | then // Dur?e |
||
1310 | d := PresSimulP.NbJSim |
||
1311 | else
|
||
1312 | d := 1;
|
||
1313 | v := 0;
|
||
1314 | for h := 1 to PResSimulP.NbJSim do |
||
1315 | begin
|
||
1316 | if PResSimulP.TabResult[7, h] <> -1 |
||
1317 | then // Aliment 1 |
||
1318 | begin
|
||
1319 | PAliment := ListAliment[FindIdxAliment(FindNomAliment(Trunc(PResSimulP.TabResult[7, h])))];
|
||
1320 | for g := 0 to PAliment.MP.NbMat - 1 do |
||
1321 | if FindNomMatiere(PAliment.MP.NumMat[g]) = CBAli5.Text
|
||
1322 | then
|
||
1323 | v := v + (PAliment.MP.Qte[g] * PResSimulP.TabResult[113, h] * PResSimulP.TabResult[9, h] / 100); |
||
1324 | end;
|
||
1325 | if PResSimulP.TabResult[8, h] <> -1 |
||
1326 | then // Aliment 2 |
||
1327 | begin
|
||
1328 | PAliment := ListAliment[FindIdxAliment(FindNomAliment(Trunc(PResSimulP.TabResult[8, h])))];
|
||
1329 | for g := 0 to PAliment.MP.NbMat - 1 do |
||
1330 | if FindNomMatiere(PAliment.MP.NumMat[g]) = CBAli5.Text
|
||
1331 | then
|
||
1332 | v := v + (PAliment.MP.Qte[g] * PResSimulP.TabResult[113, h] * PResSimulP.TabResult[10, h] / 100); |
||
1333 | end;
|
||
1334 | end;
|
||
1335 | v := v / 1000; // Conversion g -> kg |
||
1336 | result := v / d; |
||
1337 | end;
|
||
1338 | |||
1339 | // AffGraphAli
|
||
1340 | begin
|
||
1341 | ResetGraph; |
||
1342 | if CBAli1.ItemIndex = 0 |
||
1343 | then // Aliments |
||
1344 | begin
|
||
1345 | Graph.Legend.Inverted := TRUE; |
||
1346 | Graph.Title.Text.Add(CBAli1.Text); |
||
1347 | end
|
||
1348 | else // Mati?res premi?res |
||
1349 | begin
|
||
1350 | Graph.Legend.Visible := FALSE; |
||
1351 | Graph.Title.Text.Add(Format('%s - %s', [CBAli1.Text, CBAli5.Text]));
|
||
1352 | end;
|
||
1353 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBAli3.Text, CBAli4.Text]);
|
||
1354 | case FSimulP.PC.ActivePageIndex of |
||
1355 | 1: // Comparaison |
||
1356 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
1357 | 2: // Sensibilit? |
||
1358 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
1359 | end;
|
||
1360 | // Affichage des barres
|
||
1361 | if CBAli1.ItemIndex = 0 |
||
1362 | then // Aliments |
||
1363 | begin
|
||
1364 | for i := 0 to ListAli.Count - 1 do |
||
1365 | BarAli[i].Active := TRUE; |
||
1366 | for i := 0 to ListAli.Count - 1 do |
||
1367 | BarAli[i].Clear; |
||
1368 | if ((CBAli4.ItemIndex = 2) and (CBAli3.ItemIndex = 0)) |
||
1369 | or ((CBAli4.ItemIndex = 4) and (CBAli3.ItemIndex = 1)) |
||
1370 | then
|
||
1371 | for i := 0 to ListAli.Count - 1 do |
||
1372 | BarAli[i].MultiBar := mbStacked100 |
||
1373 | else
|
||
1374 | for i := 0 to ListAli.Count - 1 do |
||
1375 | BarAli[i].MultiBar := mbStacked; |
||
1376 | for i := 0 to ListAli.Count - 1 do |
||
1377 | for k := 1 to 5 do |
||
1378 | if TabSimulP[k].Ok
|
||
1379 | then
|
||
1380 | begin
|
||
1381 | PResSimulP := TabSimulP[k].Result; |
||
1382 | y := AliY; |
||
1383 | case FSimulP.PC.ActivePageIndex of |
||
1384 | 1: // Comparaison |
||
1385 | s := Format('%d', [k]);
|
||
1386 | 2: // Sensibilit? |
||
1387 | if FSimulP.CBVariable.ItemIndex = 6 |
||
1388 | then // Gaspillage |
||
1389 | if TabSimulP[k].Variation > 0 |
||
1390 | then
|
||
1391 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1392 | else
|
||
1393 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1394 | else
|
||
1395 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
1396 | end;
|
||
1397 | if y > 0 |
||
1398 | then
|
||
1399 | BarAli[i].AddBar (y, s, clTeeColor) |
||
1400 | else
|
||
1401 | BarAli[i].AddNull (s); |
||
1402 | end;
|
||
1403 | for i := 0 to ListAli.Count - 1 do |
||
1404 | BarAli[i].ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
1405 | end
|
||
1406 | else // Mati?res premi?res |
||
1407 | begin
|
||
1408 | BarMat.Active := TRUE; |
||
1409 | BarMat.Clear; |
||
1410 | for k := 1 to 5 do |
||
1411 | if TabSimulP[k].Ok
|
||
1412 | then
|
||
1413 | begin
|
||
1414 | PResSimulP := TabSimulP[k].Result; |
||
1415 | y := MatY; |
||
1416 | case FSimulP.PC.ActivePageIndex of |
||
1417 | 1: // Comparaison |
||
1418 | s := Format('%d', [k]);
|
||
1419 | 2: // Sensibilit? |
||
1420 | if FSimulP.CBVariable.ItemIndex = 6 |
||
1421 | then // Gaspillage |
||
1422 | if TabSimulP[k].Variation > 0 |
||
1423 | then
|
||
1424 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1425 | else
|
||
1426 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1427 | else
|
||
1428 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
1429 | end;
|
||
1430 | if y > 0 |
||
1431 | then
|
||
1432 | BarMat.AddBar (y, s, clTeeColor) |
||
1433 | else
|
||
1434 | BarMat.AddNull (s); |
||
1435 | end;
|
||
1436 | BarMat.ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
1437 | end;
|
||
1438 | AjustEchelle(Graph); |
||
1439 | end;
|
||
1440 | |||
1441 | procedure TFCompSimulP.CBAli1Change(Sender: TObject);
|
||
1442 | begin
|
||
1443 | CBAli3.Enabled := CBAli1.ItemIndex = 0; // Aliments |
||
1444 | CBAli5.Visible := CBAli1.ItemIndex = 1; // Mati?res premi?res |
||
1445 | if CBAli1.ItemIndex = 1 |
||
1446 | then // Mati?res premi?res |
||
1447 | CBAli3.ItemIndex := 0;
|
||
1448 | CBAli3Change(nil);
|
||
1449 | end;
|
||
1450 | |||
1451 | procedure TFCompSimulP.CBAli3Change(Sender: TObject);
|
||
1452 | begin
|
||
1453 | CBAli4.Items.Clear; |
||
1454 | case CBAli3.ItemIndex of |
||
1455 | 0: // Quantit? |
||
1456 | begin
|
||
1457 | CBAli4.Items.Add(StrKg); |
||
1458 | CBAli4.Items.Add(Format('%s/%s', [StrKg, StrJ]));
|
||
1459 | if CBAli1.ItemIndex = 0 |
||
1460 | then // Aliments |
||
1461 | CBAli4.Items.Add('%');
|
||
1462 | end;
|
||
1463 | 1: // Co?t |
||
1464 | begin
|
||
1465 | CBAli4.Items.Add(CurrencySign); |
||
1466 | CBAli4.Items.Add(Format('%s/%s', [CurrencySign, StrJ]));
|
||
1467 | CBAli4.Items.Add(Format('%s/%s %s', [CurrencySign, StrKg, StrGMQUnit]));
|
||
1468 | CBAli4.Items.Add(Format('%s/%s %s', [CurrencySign, StrKg, StrAlimentUnit]));
|
||
1469 | CBAli4.Items.Add('%');
|
||
1470 | end;
|
||
1471 | end;
|
||
1472 | CBAli4.ItemIndex := 0;
|
||
1473 | AffGraphAli; |
||
1474 | end;
|
||
1475 | |||
1476 | procedure TFCompSimulP.CBAli4Change(Sender: TObject);
|
||
1477 | begin
|
||
1478 | AffGraphAli; |
||
1479 | end;
|
||
1480 | |||
1481 | procedure TFCompSimulP.CBAli5Change(Sender: TObject);
|
||
1482 | begin
|
||
1483 | AffGraphAli; |
||
1484 | end;
|
||
1485 | |||
1486 | ///////////////////////
|
||
1487 | // Acides amin?s //
|
||
1488 | ///////////////////////
|
||
1489 | procedure TFCompSimulP.InitAA;
|
||
1490 | const
|
||
1491 | TabColor1: array[0..8] of TColor |
||
1492 | = (clBlack, clTeal, clAqua, clOlive, clSilver, clPink, clGray, clRed, clGreen); |
||
1493 | TabColor2: array[1..5] of TColor |
||
1494 | = (clRed, clGreen, clYellow, clBlue, clFuchsia); |
||
1495 | var
|
||
1496 | i, k: integer; |
||
1497 | begin
|
||
1498 | // ListAA : liste pour les acides amin?s
|
||
1499 | ListAA := TStringList.Create; |
||
1500 | ListAA.Assign(LBAA.Items); |
||
1501 | // BarAA : s?ries (barres) graphiques
|
||
1502 | SetLength(BarAA, ListAA.Count); |
||
1503 | for i := 0 to ListAA.Count - 1 do |
||
1504 | begin
|
||
1505 | BarAA[i] := TBarSeries.Create(Graph); |
||
1506 | BarAA[i].ParentChart := Graph; |
||
1507 | BarAA[i].Title := ListAA[i]; |
||
1508 | BarAA[i].SeriesColor := TabColor1[i]; |
||
1509 | BarAA[i].BarPen.Color := BarAA[i].SeriesColor; |
||
1510 | BarAA[i].Marks.Visible := FALSE; |
||
1511 | {
|
||
1512 | BarAA[i].Marks.ArrowLength := -16;
|
||
1513 | BarAA[i].Marks.Arrow.Visible := FALSE;
|
||
1514 | BarAA[i].Marks.Brush.Style := bsClear;
|
||
1515 | BarAA[i].Marks.Frame.Visible := FALSE;
|
||
1516 | BarAA[i].Marks.Style := smsValue;
|
||
1517 | }
|
||
1518 | //BarAA[i].AutoMarkPosition := FALSE;
|
||
1519 | Graph.AddSeries(BarAA[i]); |
||
1520 | end;
|
||
1521 | // LineAA : s?ries (lignes) graphiques
|
||
1522 | for k := 1 to 5 do |
||
1523 | if TabSimulP[k].Ok
|
||
1524 | then
|
||
1525 | begin
|
||
1526 | LineAA[k] := TLineSeries.Create(Graph); |
||
1527 | LineAA[k].ParentChart := Graph; |
||
1528 | case FSimulP.PC.ActivePageIndex of |
||
1529 | 1 : // Comparaison |
||
1530 | LineAA[k].Title := Format('Simulation %d', [k]);
|
||
1531 | 2 : // Sensibilit? |
||
1532 | if FSimulP.CBVariable.ItemIndex = 6 |
||
1533 | then // Gaspillage |
||
1534 | if TabSimulP[k].Variation > 0 |
||
1535 | then
|
||
1536 | LineAA[k].Title := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1537 | else
|
||
1538 | LineAA[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
1539 | else
|
||
1540 | LineAA[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
1541 | end;
|
||
1542 | LineAA[k].SeriesColor := TabColor2[k]; |
||
1543 | LineAA[k].LinePen.Color := LineAA[k].SeriesColor; |
||
1544 | LineAA[k].LinePen.Width := 2;
|
||
1545 | Graph.AddSeries(LineAA[k]); |
||
1546 | end;
|
||
1547 | end;
|
||
1548 | |||
1549 | procedure TFCompSimulP.AffGraphAA;
|
||
1550 | var
|
||
1551 | i, j, k: integer; |
||
1552 | y: double; |
||
1553 | s: string;
|
||
1554 | |||
1555 | // Abscisse
|
||
1556 | function AAX: double;
|
||
1557 | begin
|
||
1558 | case CBAA1.ItemIndex of |
||
1559 | 1, 2: // Apport ou besoin |
||
1560 | case CBAA2.ItemIndex of |
||
1561 | 0: // Poids vif |
||
1562 | result := PResSimulP.TabResult[2, j];
|
||
1563 | 1: // Age |
||
1564 | result := PResSimulP.TabResult[1, j];
|
||
1565 | 2: // Jours |
||
1566 | result := j; |
||
1567 | 3: // Semaines |
||
1568 | result := j / 7;
|
||
1569 | else
|
||
1570 | result := 0;
|
||
1571 | end;
|
||
1572 | else
|
||
1573 | result := 0;
|
||
1574 | end;
|
||
1575 | end;
|
||
1576 | |||
1577 | // Ordonn?e
|
||
1578 | function AAY: double;
|
||
1579 | var
|
||
1580 | h: integer; |
||
1581 | v, d, endogeneAA, m75AA, AAk, bodyAA, AAingere, AAdigestible, PDAA, |
||
1582 | IngereSec, PV, PD, py1, AAPD, AAAA, AAenergie, PD3, PDapport, Gaspillage: double; |
||
1583 | begin
|
||
1584 | case CBAA1.ItemIndex of |
||
1585 | 0: // R?partition |
||
1586 | begin
|
||
1587 | // Diviseur
|
||
1588 | case CBAA4.ItemIndex of |
||
1589 | 1: // Dur?e |
||
1590 | d := PresSimulP.NbJSim; |
||
1591 | 2: // Aliment |
||
1592 | begin
|
||
1593 | d := 0;
|
||
1594 | if PresSimulP.NbJSim > 1 |
||
1595 | then
|
||
1596 | for h := 1 to PresSimulP.NbJSim do |
||
1597 | d := d + PresSimulP.TabResult[113, h];
|
||
1598 | end;
|
||
1599 | else
|
||
1600 | d := 1;
|
||
1601 | end;
|
||
1602 | v := 0;
|
||
1603 | case i of |
||
1604 | 0: // Gaspillage |
||
1605 | if CBAA5A.ItemIndex = 2 |
||
1606 | then // Total |
||
1607 | if PresSimulP.NbJSim > 1 |
||
1608 | then
|
||
1609 | for h := 1 to PresSimulP.NbJSim do |
||
1610 | begin
|
||
1611 | AAingere := PResSimulP.TabResult[93 + CBAA3.ItemIndex, h];
|
||
1612 | Gaspillage := PResSimulP.TabResult[112, h];
|
||
1613 | v := v + AAingere / (1 - Gaspillage) - AAingere;
|
||
1614 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1615 | then // met + cys, phe + tyr |
||
1616 | begin
|
||
1617 | AAingere := PresSimulP.TabResult[CBAA3.ItemIndex + 92, h];
|
||
1618 | v := v + AAingere / (1 - Gaspillage) - AAingere;
|
||
1619 | end;
|
||
1620 | end;
|
||
1621 | 1: // Indigestible |
||
1622 | if CBAA5A.ItemIndex = 2 |
||
1623 | then // Total |
||
1624 | if PresSimulP.NbJSim > 1 |
||
1625 | then
|
||
1626 | for h := 1 to PresSimulP.NbJSim do |
||
1627 | begin
|
||
1628 | AAingere := PresSimulP.TabResult[CBAA3.ItemIndex + 93, h];
|
||
1629 | AAdigestible := PresSimulP.TabResult[CBAA3.ItemIndex + 19, h];
|
||
1630 | v := v + (AAingere - AAdigestible); |
||
1631 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1632 | then // met + cys, phe + tyr |
||
1633 | begin
|
||
1634 | AAingere := PresSimulP.TabResult[CBAA3.ItemIndex + 92, h];
|
||
1635 | AAdigestible := PresSimulP.TabResult[CBAA3.ItemIndex + 18, h];
|
||
1636 | v := v + (AAingere - AAdigestible); |
||
1637 | end;
|
||
1638 | end;
|
||
1639 | 2: // Endog?ne basal |
||
1640 | if CBAA5A.ItemIndex <> 1 |
||
1641 | then // Total ou Digestible standardis? |
||
1642 | if PresSimulP.NbJSim > 1 |
||
1643 | then
|
||
1644 | for h := 1 to PresSimulP.NbJSim do |
||
1645 | begin
|
||
1646 | IngereSec := PresSimulP.TabResult[106, h] * PResSimulP.TabResult[11, h]; |
||
1647 | endogeneAA := AAendogene[CBAA3.ItemIndex]; |
||
1648 | v := v + (IngereSec * endogeneAA); |
||
1649 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1650 | then // met + cys, phe + tyr |
||
1651 | begin
|
||
1652 | endogeneAA := AAendogene[CBAA3.ItemIndex - 1];
|
||
1653 | v := v + (IngereSec * endogeneAA); |
||
1654 | end;
|
||
1655 | end;
|
||
1656 | 3: // Entretien |
||
1657 | if PresSimulP.NbJSim > 1 |
||
1658 | then
|
||
1659 | for h := 1 to PresSimulP.NbJSim do |
||
1660 | begin
|
||
1661 | PV := PresSimulP.TabResult[2, h];
|
||
1662 | m75AA := AAm75[CBAA3.ItemIndex]; |
||
1663 | v := v + (m75AA * Power(PV, 0.75));
|
||
1664 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1665 | then // met + cys, phe + tyr |
||
1666 | begin
|
||
1667 | m75AA := AAm75[CBAA3.ItemIndex - 1];
|
||
1668 | v := v + (m75AA * Power (PV, 0.75));
|
||
1669 | end;
|
||
1670 | end;
|
||
1671 | 4: // Oxydation minimale |
||
1672 | if PresSimulP.NbJSim > 1 |
||
1673 | then
|
||
1674 | for h := 1 to PresSimulP.NbJSim do |
||
1675 | begin
|
||
1676 | PD := PresSimulP.TabResult[79, h];
|
||
1677 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1678 | AAk := kAA[CBAA3.ItemIndex]; |
||
1679 | if AAk <= 1 |
||
1680 | then
|
||
1681 | v := v + (PD * bodyAA / AAk * (1 - AAk));
|
||
1682 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1683 | then // met + cys, phe + tyr |
||
1684 | begin
|
||
1685 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1686 | AAk := kAA[CBAA3.ItemIndex - 1];
|
||
1687 | if AAk <= 1 |
||
1688 | then
|
||
1689 | v := v + (PD * bodyAA / AAk * (1 - AAk));
|
||
1690 | end;
|
||
1691 | end;
|
||
1692 | 5: // D?p?t |
||
1693 | if PresSimulP.NbJSim > 1 |
||
1694 | then
|
||
1695 | for h := 1 to PresSimulP.NbJSim do |
||
1696 | begin
|
||
1697 | PD := PresSimulP.TabResult[79, h];
|
||
1698 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1699 | v := v + (PD * bodyAA); |
||
1700 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1701 | then // met + cys, phe + tyr |
||
1702 | begin
|
||
1703 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1704 | v := v + (PD * bodyAA); |
||
1705 | end;
|
||
1706 | end;
|
||
1707 | 6: // D?s?quilibre |
||
1708 | if PresSimulP.NbJSim > 1 |
||
1709 | then
|
||
1710 | if CBAA3.ItemIndex = 12 |
||
1711 | then // Arginine |
||
1712 | for h := 1 to PresSimulP.NbJSim do |
||
1713 | begin
|
||
1714 | PD := PresSimulP.TabResult[79, h];
|
||
1715 | py1 := PresSimulP.TabResult[77, h];
|
||
1716 | PD3 := py1 / GEProtJaap; |
||
1717 | PDAA := PresSimulP.TabResult[44, h];
|
||
1718 | AAk := kAA[12];
|
||
1719 | PDapport := PDAA / AAk; |
||
1720 | bodyAA := AAbody[12];
|
||
1721 | if (PD < PD3) and (PD < PDAA) |
||
1722 | then
|
||
1723 | if (PDapport > PD3) or (PD3 < PDAA) |
||
1724 | then
|
||
1725 | v := v + ((PD3 - PD) * bodyAA) |
||
1726 | else
|
||
1727 | v := v + ((PDAA - PD) * bodyAA); |
||
1728 | end
|
||
1729 | else
|
||
1730 | for h := 1 to PresSimulP.NbJSim do |
||
1731 | begin
|
||
1732 | PD := PresSimulP.TabResult[79, h];
|
||
1733 | py1 := PresSimulP.TabResult[77, h];
|
||
1734 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 32, h];
|
||
1735 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1736 | AAk := kAA[CBAA3.ItemIndex]; |
||
1737 | AAAA := PDAA * bodyAA / AAk; |
||
1738 | AAPD := PD * bodyAA / AAk; |
||
1739 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1740 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1741 | then // met + cys, phe + tyr |
||
1742 | begin
|
||
1743 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 31, h];
|
||
1744 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1745 | AAk := kAA[CBAA3.ItemIndex - 1];
|
||
1746 | AAAA := AAAA + (PDAA * bodyAA / AAk); |
||
1747 | AAPD := AAPD + (PD * bodyAA / AAk); |
||
1748 | AAenergie := AAenergie + (py1 / GEProtJaap * bodyAA / AAk); |
||
1749 | end;
|
||
1750 | if AAPD < AAAA
|
||
1751 | then
|
||
1752 | if AAAA < AAenergie
|
||
1753 | then
|
||
1754 | v := v + (AAAA - AAPD) |
||
1755 | else
|
||
1756 | v := v + (AAenergie - AAPD); |
||
1757 | end;
|
||
1758 | 7: // D?ficit |
||
1759 | if PresSimulP.NbJSim > 1 |
||
1760 | then
|
||
1761 | if CBAA3.ItemIndex = 12 |
||
1762 | then // Arginine |
||
1763 | for h := 1 to PresSimulP.NbJSim do |
||
1764 | begin
|
||
1765 | py1 := PresSimulP.TabResult[77, h];
|
||
1766 | PD3 := py1 / GEProtJaap; |
||
1767 | PDAA := PresSimulP.TabResult[44, h];
|
||
1768 | bodyAA := AAbody[12];
|
||
1769 | if PDAA < PD3
|
||
1770 | then
|
||
1771 | v := v + ((PD3 - PDAA) * bodyAA); |
||
1772 | end
|
||
1773 | else
|
||
1774 | for h := 1 to PresSimulP.NbJSim do |
||
1775 | begin
|
||
1776 | py1 := PresSimulP.TabResult[77, h];
|
||
1777 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 32, h];
|
||
1778 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1779 | AAk := kAA[CBAA3.ItemIndex]; |
||
1780 | AAAA := PDAA * bodyAA / AAk; |
||
1781 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1782 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1783 | then // met + cys, phe + tyr |
||
1784 | begin
|
||
1785 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 31, h];
|
||
1786 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1787 | AAk := kAA[CBAA3.ItemIndex - 1];
|
||
1788 | AAAA := AAAA + (PDAA * bodyAA / AAk); |
||
1789 | AAenergie := AAenergie + (py1 / GEProtJaap * bodyAA / AAk); |
||
1790 | end;
|
||
1791 | if AAAA < AAenergie
|
||
1792 | then
|
||
1793 | v := v + (AAenergie - AAAA); |
||
1794 | end;
|
||
1795 | 8: // Exc?s |
||
1796 | if PresSimulP.NbJSim > 1 |
||
1797 | then
|
||
1798 | if CBAA3.ItemIndex = 12 |
||
1799 | then // Arginine |
||
1800 | for h := 1 to PresSimulP.NbJSim do |
||
1801 | begin
|
||
1802 | py1 := PresSimulP.TabResult[77, h];
|
||
1803 | PD3 := py1 / GEProtJaap; |
||
1804 | PDAA := PresSimulP.TabResult[44, h];
|
||
1805 | AAk := kAA[12];
|
||
1806 | PDapport := PDAA / AAk; |
||
1807 | bodyAA := AAbody[12];
|
||
1808 | if PD3 < PDapport
|
||
1809 | then
|
||
1810 | v := v + ((PDapport - PD3) * bodyAA); |
||
1811 | end
|
||
1812 | else
|
||
1813 | for h := 1 to PresSimulP.NbJSim do |
||
1814 | begin
|
||
1815 | py1 := PresSimulP.TabResult[77, h];
|
||
1816 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 32, h];
|
||
1817 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1818 | AAk := kAA[CBAA3.ItemIndex]; |
||
1819 | AAAA := PDAA * bodyAA / AAk; |
||
1820 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1821 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1822 | then // met + cys, phe + tyr |
||
1823 | begin
|
||
1824 | PDAA := PresSimulP.TabResult[CBAA3.ItemIndex + 31, h];
|
||
1825 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1826 | AAk := kAA[CBAA3.ItemIndex - 1];
|
||
1827 | AAAA := AAAA + (PDAA * bodyAA / AAk); |
||
1828 | AAenergie := AAenergie + (py1 / GEProtJaap * bodyAA / AAk); |
||
1829 | end;
|
||
1830 | if AAenergie < AAAA
|
||
1831 | then
|
||
1832 | v := v + (AAAA - AAenergie); |
||
1833 | end;
|
||
1834 | end;
|
||
1835 | result := v / d; |
||
1836 | end;
|
||
1837 | 1: // Apport |
||
1838 | begin
|
||
1839 | IngereSec := PresSimulP.TabResult[106, j] * PResSimulP.TabResult[11, j]; |
||
1840 | // Diviseur
|
||
1841 | case CBAA4.ItemIndex of |
||
1842 | 1: // Lysine |
||
1843 | begin
|
||
1844 | AAdigestible := PresSimulP.TabResult[20, j];
|
||
1845 | case CBAA5A.ItemIndex of |
||
1846 | 0: // Standardis? |
||
1847 | d := AAdigestible; |
||
1848 | 1: // Apparent |
||
1849 | begin
|
||
1850 | endogeneAA := AAendogene[1];
|
||
1851 | d := AAdigestible |
||
1852 | - IngereSec * endogeneAA; // Basal
|
||
1853 | end;
|
||
1854 | 2: // Total |
||
1855 | begin
|
||
1856 | AAingere := PresSimulP.TabResult[94, j];
|
||
1857 | d := AAingere; |
||
1858 | end;
|
||
1859 | else
|
||
1860 | d := 1;
|
||
1861 | end;
|
||
1862 | d := d / 100;
|
||
1863 | end;
|
||
1864 | 2: // GMQ |
||
1865 | d := PresSimulP.TabResult[84, j];
|
||
1866 | 3: // ED |
||
1867 | d := PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]; |
||
1868 | 4: // EM |
||
1869 | d := PresSimulP.TabResult[89, j] * PresSimulP.TabResult[113, j]; |
||
1870 | 5: // EN |
||
1871 | d := PresSimulP.TabResult[90, j] * PresSimulP.TabResult[113, j]; |
||
1872 | 6: // Aliment |
||
1873 | d := PresSimulP.TabResult[113, j];
|
||
1874 | else
|
||
1875 | d := 1;
|
||
1876 | end;
|
||
1877 | AAdigestible := PresSimulP.TabResult[CBAA3.ItemIndex + 19, j];
|
||
1878 | case CBAA5A.ItemIndex of |
||
1879 | 0: // Standardis? |
||
1880 | v := AAdigestible; |
||
1881 | 1: // Apparent |
||
1882 | begin
|
||
1883 | endogeneAA := AAendogene[CBAA3.ItemIndex]; |
||
1884 | v := AAdigestible |
||
1885 | - IngereSec * endogeneAA; // Basal
|
||
1886 | end;
|
||
1887 | 2: // Total |
||
1888 | begin
|
||
1889 | AAingere := PresSimulP.TabResult[CBAA3.ItemIndex + 93, j];
|
||
1890 | v := AAingere; |
||
1891 | end;
|
||
1892 | else
|
||
1893 | v := 0;
|
||
1894 | end;
|
||
1895 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1896 | then // met + cys, phe + tyr |
||
1897 | begin
|
||
1898 | AAdigestible := PresSimulP.TabResult[CBAA3.ItemIndex + 18, j];
|
||
1899 | case CBAA5A.ItemIndex of |
||
1900 | 0: // Standardis? |
||
1901 | v := v + AAdigestible; |
||
1902 | 1: // Apparent |
||
1903 | begin
|
||
1904 | endogeneAA := AAendogene[CBAA3.ItemIndex - 1];
|
||
1905 | v := v + AAdigestible |
||
1906 | - IngereSec * endogeneAA; // Basal
|
||
1907 | end;
|
||
1908 | 2: // Total |
||
1909 | begin
|
||
1910 | AAingere := PresSimulP.TabResult[CBAA3.ItemIndex + 92, j];
|
||
1911 | v := v + AAingere; |
||
1912 | end;
|
||
1913 | end;
|
||
1914 | end;
|
||
1915 | result := v / d; |
||
1916 | end;
|
||
1917 | 2: // Besoin |
||
1918 | begin
|
||
1919 | IngereSec := PresSimulP.TabResult[106, j] * PResSimulP.TabResult[11, j]; |
||
1920 | PV := PresSimulP.TabResult[2, j];
|
||
1921 | py1 := PresSimulP.TabResult[77, j];
|
||
1922 | // Diviseur
|
||
1923 | case CBAA4.ItemIndex of |
||
1924 | 1: // Lysine |
||
1925 | begin
|
||
1926 | AAk := kAA[1];
|
||
1927 | bodyAA := AAbody[1];
|
||
1928 | m75AA := AAm75[1];
|
||
1929 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1930 | case CBAA5B.ItemIndex of |
||
1931 | 0: // Standardis? |
||
1932 | begin
|
||
1933 | endogeneAA := AAendogene[1];
|
||
1934 | d := AAenergie |
||
1935 | + m75AA * Power (PV, 0.75) // Entretien |
||
1936 | + IngereSec * endogeneAA; // Basal
|
||
1937 | end;
|
||
1938 | 1: // Apparent |
||
1939 | d := AAenergie |
||
1940 | + m75AA * Power (PV, 0.75); // Entretien |
||
1941 | else
|
||
1942 | d := 1;
|
||
1943 | end;
|
||
1944 | d := d / 100;
|
||
1945 | end;
|
||
1946 | 2: // GMQ |
||
1947 | d := PresSimulP.TabResult[84, j];
|
||
1948 | 3: // ED |
||
1949 | d := PResSimulP.TabResult[109, j] * PResSimulP.TabResult[113, j]; |
||
1950 | 4: // EM |
||
1951 | d := PresSimulP.TabResult[89, j] * PresSimulP.TabResult[113, j]; |
||
1952 | 5: // EN |
||
1953 | d := PresSimulP.TabResult[90, j] * PresSimulP.TabResult[113, j]; |
||
1954 | 6: // Aliment |
||
1955 | d := PresSimulP.TabResult[113, j];
|
||
1956 | else
|
||
1957 | d := 1;
|
||
1958 | end;
|
||
1959 | bodyAA := AAbody[CBAA3.ItemIndex]; |
||
1960 | AAk := kAA[CBAA3.ItemIndex]; |
||
1961 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1962 | m75AA := AAm75[CBAA3.ItemIndex]; |
||
1963 | case CBAA5B.ItemIndex of |
||
1964 | 0: // Standardis? |
||
1965 | begin
|
||
1966 | endogeneAA := AAendogene[CBAA3.ItemIndex]; |
||
1967 | v := AAenergie |
||
1968 | + m75AA * Power (PV, 0.75) // Entretien |
||
1969 | + IngereSec * endogeneAA; // Basal
|
||
1970 | end;
|
||
1971 | 1: // Apparent |
||
1972 | v := AAenergie |
||
1973 | + m75AA * Power (PV, 0.75); // Entretien |
||
1974 | else
|
||
1975 | v := 0;
|
||
1976 | end;
|
||
1977 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
1978 | then // met + cys, phe + tyr |
||
1979 | begin
|
||
1980 | bodyAA := AAbody[CBAA3.ItemIndex - 1];
|
||
1981 | AAk := kAA[CBAA3.ItemIndex - 1];
|
||
1982 | AAenergie := py1 / GEProtJaap * bodyAA / AAk; |
||
1983 | m75AA := AAm75[CBAA3.ItemIndex - 1];
|
||
1984 | case CBAA5B.ItemIndex of |
||
1985 | 0: // Standardis? |
||
1986 | begin
|
||
1987 | endogeneAA := AAendogene[CBAA3.ItemIndex - 1];
|
||
1988 | v := v + AAenergie |
||
1989 | + m75AA * Power (PV, 0.75) // Entretien |
||
1990 | + IngereSec * endogeneAA; // Basal
|
||
1991 | end;
|
||
1992 | 1: // Apparent |
||
1993 | v := v + AAenergie |
||
1994 | + m75AA * Power (PV, 0.75); // Entretien |
||
1995 | end;
|
||
1996 | end;
|
||
1997 | result := v / d; |
||
1998 | end;
|
||
1999 | else
|
||
2000 | result := 0;
|
||
2001 | end;
|
||
2002 | end;
|
||
2003 | |||
2004 | // AffGraphAA
|
||
2005 | begin
|
||
2006 | ResetGraph; |
||
2007 | Graph.Title.Text.Add(Format('%s (%s)', [CBAA3.Text, CBAA1.Text]));
|
||
2008 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBAA3.Text, CBAA4.Text]);
|
||
2009 | case CBAA1.ItemIndex of |
||
2010 | 0: // R?partition |
||
2011 | begin
|
||
2012 | Graph.Legend.Inverted := TRUE; |
||
2013 | Graph.SubTitle.Text.Add(CBAA5A.Text); |
||
2014 | case FSimulP.PC.ActivePageIndex of |
||
2015 | 1: // Comparaison |
||
2016 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
2017 | 2: // Sensibilit? |
||
2018 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
2019 | end;
|
||
2020 | // Affichage des barres
|
||
2021 | for i := 0 to ListAA.Count - 1 do |
||
2022 | BarAA[i].Active := TRUE; |
||
2023 | for i := 0 to ListAA.Count - 1 do |
||
2024 | BarAA[i].Clear; |
||
2025 | if CBAA4.ItemIndex = 3 |
||
2026 | then
|
||
2027 | for i := 0 to ListAA.Count - 1 do |
||
2028 | BarAA[i].MultiBar := mbStacked100 |
||
2029 | else
|
||
2030 | for i := 0 to ListAA.Count - 1 do |
||
2031 | BarAA[i].MultiBar := mbStacked; |
||
2032 | for i := 0 to ListAA.Count - 1 do |
||
2033 | for k := 1 to 5 do |
||
2034 | if TabSimulP[k].Ok
|
||
2035 | then
|
||
2036 | begin
|
||
2037 | PResSimulP := TabSimulP[k].Result; |
||
2038 | case FSimulP.PC.ActivePageIndex of |
||
2039 | 1: // Comparaison |
||
2040 | s := Format('%d', [k]);
|
||
2041 | 2: // Sensibilit? |
||
2042 | if FSimulP.CBVariable.ItemIndex = 6 |
||
2043 | then // Gaspillage |
||
2044 | if TabSimulP[k].Variation > 0 |
||
2045 | then
|
||
2046 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2047 | else
|
||
2048 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2049 | else
|
||
2050 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
2051 | end;
|
||
2052 | y := AAY; |
||
2053 | if y > PICO
|
||
2054 | then
|
||
2055 | BarAA[i].AddBar (y, s, clTeeColor) |
||
2056 | else
|
||
2057 | BarAA[i].AddNull (s); |
||
2058 | end;
|
||
2059 | for i := 0 to ListAA.Count - 1 do |
||
2060 | BarAA[i].ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
2061 | end;
|
||
2062 | 1, 2: // Apport ou besoin |
||
2063 | begin
|
||
2064 | Graph.Legend.Inverted := FALSE; |
||
2065 | if CBAA1.ItemIndex = 2 |
||
2066 | then // Besoin |
||
2067 | Graph.SubTitle.Text.Add(CBAA5B.Text) |
||
2068 | else
|
||
2069 | Graph.SubTitle.Text.Add(CBAA5A.Text); |
||
2070 | Graph.BottomAxis.Title.Caption := CBAA2.Text; |
||
2071 | // Affichage des lignes
|
||
2072 | for k := 1 to 5 do |
||
2073 | if TabSimulP[k].Ok
|
||
2074 | then
|
||
2075 | begin
|
||
2076 | LineAA[k].Active := TRUE; |
||
2077 | LineAA[k].Clear; |
||
2078 | PResSimulP := TabSimulP[k].Result; |
||
2079 | for j := 1 to PresSimulP.NbJSim do |
||
2080 | LineAA[k].AddXY (AAX, AAY, '', clTeeColor);
|
||
2081 | end;
|
||
2082 | if CBAA2.ItemIndex = 3 |
||
2083 | then // Dur?e (semaine) |
||
2084 | Graph.BottomAxis.Increment := 1
|
||
2085 | else
|
||
2086 | Graph.BottomAxis.Increment := 10;
|
||
2087 | end;
|
||
2088 | end;
|
||
2089 | AjustEchelle(Graph); |
||
2090 | end;
|
||
2091 | |||
2092 | procedure TFCompSimulP.CBAA1Change(Sender: TObject);
|
||
2093 | begin
|
||
2094 | CBAA4.Items.Clear; |
||
2095 | case CBAA1.ItemIndex of |
||
2096 | 0: // R?partition |
||
2097 | begin
|
||
2098 | CBAA2.Visible := FALSE; |
||
2099 | CBAA5A.Visible := TRUE; |
||
2100 | CBAA5B.Visible := FALSE; |
||
2101 | // Unit?s
|
||
2102 | CBAA4.Items.Add(StrG); |
||
2103 | CBAA4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
2104 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
2105 | CBAA4.Items.Add('%');
|
||
2106 | end;
|
||
2107 | 1, 2: // Apport ou besoin |
||
2108 | begin
|
||
2109 | if CBAA1.ItemIndex = 2 |
||
2110 | then // Besoin |
||
2111 | if AffBesoin
|
||
2112 | then
|
||
2113 | begin
|
||
2114 | FWarning := TFWarning.Create (Self); |
||
2115 | with FWarning do |
||
2116 | begin
|
||
2117 | Msg := 'Besoin';
|
||
2118 | ShowModal; |
||
2119 | Release; |
||
2120 | AffBesoin := FALSE; |
||
2121 | end;
|
||
2122 | end;
|
||
2123 | CBAA2.Visible := TRUE; |
||
2124 | CBAA5A.Visible := (CBAA1.ItemIndex = 1);
|
||
2125 | CBAA5B.Visible := (CBAA1.ItemIndex = 2);
|
||
2126 | // Unit?s
|
||
2127 | CBAA4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
2128 | CBAA4.Items.Add(Format('%% %s', [StrLys]));
|
||
2129 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrGMQUnit]));
|
||
2130 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrMJ, StrED]));
|
||
2131 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrMJ, StrEM]));
|
||
2132 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrMJ, StrEN]));
|
||
2133 | CBAA4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
2134 | if (CBAA1.ItemIndex = 2) and(CBAA5A.ItemIndex = 2) |
||
2135 | then // Besoin -> Total |
||
2136 | CBAA5A.ItemIndex := 0;
|
||
2137 | end;
|
||
2138 | end;
|
||
2139 | CBAA4.ItemIndex := 0;
|
||
2140 | AffGraphAA; |
||
2141 | end;
|
||
2142 | |||
2143 | procedure TFCompSimulP.CBAA2Change(Sender: TObject);
|
||
2144 | begin
|
||
2145 | AffGraphAA; |
||
2146 | end;
|
||
2147 | |||
2148 | procedure TFCompSimulP.CBAA3Change(Sender: TObject);
|
||
2149 | begin
|
||
2150 | AffGraphAA; |
||
2151 | end;
|
||
2152 | |||
2153 | procedure TFCompSimulP.CBAA4Change(Sender: TObject);
|
||
2154 | begin
|
||
2155 | AffGraphAA; |
||
2156 | end;
|
||
2157 | |||
2158 | procedure TFCompSimulP.CBAA5Change(Sender: TObject);
|
||
2159 | begin
|
||
2160 | if CBAA1.ItemIndex = 2 |
||
2161 | then // Besoin |
||
2162 | CBAA5A.ItemIndex := CBAA5B.ItemIndex |
||
2163 | else
|
||
2164 | if CBAA5A.ItemIndex = 2 |
||
2165 | then // Total |
||
2166 | CBAA5B.ItemIndex := 0
|
||
2167 | else
|
||
2168 | CBAA5B.ItemIndex := CBAA5A.ItemIndex; |
||
2169 | AffGraphAA; |
||
2170 | end;
|
||
2171 | |||
2172 | /////////////////
|
||
2173 | // Energie //
|
||
2174 | /////////////////
|
||
2175 | procedure TFCompSimulP.InitNRJ;
|
||
2176 | const
|
||
2177 | TabColor1: array[0..7] of TColor |
||
2178 | = (clBlack, clTeal, clYellow, clOlive, clGray, clFuchsia, clBlue, clLime); |
||
2179 | TabColor2: array[1..5] of TColor |
||
2180 | = (clRed, clGreen, clYellow, clBlue, clFuchsia); |
||
2181 | var
|
||
2182 | i, k: integer; |
||
2183 | begin
|
||
2184 | // ListNRJ : liste pour l'?nergie
|
||
2185 | ListNRJ := TStringList.Create; |
||
2186 | ListNRJ.Assign(LBNRJ.Items); |
||
2187 | // BarNRJ : s?ries (barres) graphiques
|
||
2188 | SetLength(BarNRJ, ListNRJ.Count); |
||
2189 | for i := 0 to ListNRJ.Count - 1 do |
||
2190 | begin
|
||
2191 | BarNRJ[i] := TBarSeries.Create(Graph); |
||
2192 | BarNRJ[i].ParentChart := Graph; |
||
2193 | BarNRJ[i].Title := ListNRJ[i]; |
||
2194 | BarNRJ[i].SeriesColor := TabColor1[i]; |
||
2195 | BarNRJ[i].BarPen.Color := BarNRJ[i].SeriesColor; |
||
2196 | BarNRJ[i].Marks.Visible := FALSE; |
||
2197 | {
|
||
2198 | BarNRJ[i].Marks.ArrowLength := -16;
|
||
2199 | BarNRJ[i].Marks.Arrow.Visible := FALSE;
|
||
2200 | BarNRJ[i].Marks.Brush.Style := bsClear;
|
||
2201 | BarNRJ[i].Marks.Frame.Visible := FALSE;
|
||
2202 | BarNRJ[i].Marks.Style := smsValue;
|
||
2203 | }
|
||
2204 | //BarNRJ[i].AutoMarkPosition := FALSE;
|
||
2205 | Graph.AddSeries(BarNRJ[i]); |
||
2206 | end;
|
||
2207 | // LineNRJ : s?ries (lignes) graphiques
|
||
2208 | for k := 1 to 5 do |
||
2209 | if TabSimulP[k].Ok
|
||
2210 | then
|
||
2211 | begin
|
||
2212 | LineNRJ[k] := TLineSeries.Create(Graph); |
||
2213 | LineNRJ[k].ParentChart := Graph; |
||
2214 | case FSimulP.PC.ActivePageIndex of |
||
2215 | 1 : // Comparaison |
||
2216 | LineNRJ[k].Title := Format('Simulation %d', [k]);
|
||
2217 | 2 : // Sensibilit? |
||
2218 | if FSimulP.CBVariable.ItemIndex = 6 |
||
2219 | then // Gaspillage |
||
2220 | if TabSimulP[k].Variation > 0 |
||
2221 | then
|
||
2222 | LineNRJ[k].Title := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2223 | else
|
||
2224 | LineNRJ[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2225 | else
|
||
2226 | LineNRJ[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
2227 | end;
|
||
2228 | LineNRJ[k].SeriesColor := TabColor2[k]; |
||
2229 | LineNRJ[k].LinePen.Color := LineNRJ[k].SeriesColor; |
||
2230 | LineNRJ[k].LinePen.Width := 2;
|
||
2231 | Graph.AddSeries(LineNRJ[k]); |
||
2232 | end;
|
||
2233 | end;
|
||
2234 | |||
2235 | procedure TFCompSimulP.AffGraphNRJ;
|
||
2236 | var
|
||
2237 | i, j, k: integer; |
||
2238 | y: double; |
||
2239 | s: string;
|
||
2240 | |||
2241 | // Abscisse
|
||
2242 | function NRJX: double;
|
||
2243 | begin
|
||
2244 | case CBNRJ1.ItemIndex of |
||
2245 | 1: // Apport |
||
2246 | case CBNRJ2.ItemIndex of |
||
2247 | 0: // Poids vif |
||
2248 | result := PResSimulP.TabResult[2, j];
|
||
2249 | 1: // Age |
||
2250 | result := PResSimulP.TabResult[1, j];
|
||
2251 | 2: // Jours |
||
2252 | result := j; |
||
2253 | 3: // Semaines |
||
2254 | result := j / 7;
|
||
2255 | else
|
||
2256 | result := 0;
|
||
2257 | end;
|
||
2258 | else
|
||
2259 | result := 0;
|
||
2260 | end;
|
||
2261 | end;
|
||
2262 | |||
2263 | // Ordonn?e
|
||
2264 | function NRJY: double;
|
||
2265 | var
|
||
2266 | h: integer; |
||
2267 | v, d, PV, EBing, EDing, {MAD, MGD, CBD, Amidon, Sucre, ResiduD,} MEintake,
|
||
2268 | PDfreeNEintake, PDfreeNEreq, FHP60, kdiet, Standing, Entretien, Activite, |
||
2269 | energyPD, energyLD, NEcrois, MEcrois, NEintake, Gaspillage: double; |
||
2270 | begin
|
||
2271 | case CBNRJ1.ItemIndex of |
||
2272 | 0: // R?partition |
||
2273 | begin
|
||
2274 | // Diviseur
|
||
2275 | case CBNRJ4.ItemIndex of |
||
2276 | 1: // Dur?e |
||
2277 | d := PresSimulP.NbJSim; |
||
2278 | 2: // Aliment |
||
2279 | begin
|
||
2280 | d := 0;
|
||
2281 | if PresSimulP.NbJSim > 1 |
||
2282 | then
|
||
2283 | for h := 1 to PresSimulP.NbJSim do |
||
2284 | d := d + PresSimulP.TabResult[113, h];
|
||
2285 | end;
|
||
2286 | else
|
||
2287 | d := 1;
|
||
2288 | end;
|
||
2289 | v := 0;
|
||
2290 | case i of |
||
2291 | 0: // Gaspillage |
||
2292 | if CBNRJ3.ItemIndex = 0 |
||
2293 | then // EB |
||
2294 | if PresSimulP.NbJSim > 1 |
||
2295 | then
|
||
2296 | for h := 1 to PresSimulP.NbJSim do |
||
2297 | begin
|
||
2298 | EBing := PresSimulP.TabResult[12, h];
|
||
2299 | Gaspillage := PResSimulP.TabResult[112, h];
|
||
2300 | v := v + EBing / (1 - Gaspillage) - EBing;
|
||
2301 | end;
|
||
2302 | 1: // Indigestible |
||
2303 | if CBNRJ3.ItemIndex = 0 |
||
2304 | then // EB |
||
2305 | if PresSimulP.NbJSim > 1 |
||
2306 | then
|
||
2307 | for h := 1 to PresSimulP.NbJSim do |
||
2308 | begin
|
||
2309 | EBing := PresSimulP.TabResult[12, h];
|
||
2310 | EDing := PResSimulP.TabResult[109, h] * PResSimulP.TabResult[11, h]; |
||
2311 | v := v + (EBing - EDing); |
||
2312 | end;
|
||
2313 | 2: // M?thane et urines |
||
2314 | if CBNRJ3.ItemIndex <= 1 |
||
2315 | then // EB ou ED |
||
2316 | if PresSimulP.NbJSim > 1 |
||
2317 | then
|
||
2318 | for h := 1 to PresSimulP.NbJSim do |
||
2319 | begin
|
||
2320 | EDing := PResSimulP.TabResult[109, h] * PResSimulP.TabResult[11, h]; |
||
2321 | MEintake := PresSimulP.TabResult[86, h] / 1000; |
||
2322 | v := v + (EDing - MEintake); |
||
2323 | end;
|
||
2324 | 3: // Entretien |
||
2325 | if PresSimulP.NbJSim > 1 |
||
2326 | then
|
||
2327 | for h := 1 to PresSimulP.NbJSim do |
||
2328 | begin
|
||
2329 | FHP60 := PresSimulP.TabResult[91, h] / 1000; |
||
2330 | PV := PresSimulP.TabResult[2, h];
|
||
2331 | if CBNRJ3.ItemIndex = 3 |
||
2332 | then // EN |
||
2333 | Entretien := PProfilP.Entretien * kBR * FHP60 * Power(PV, 0.6)
|
||
2334 | else // EB, ED ou EM |
||
2335 | begin
|
||
2336 | PDfreeNEintake := PresSimulP.TabResult[65, h] / 1000; |
||
2337 | MEintake := PresSimulP.TabResult[86, h] / 1000; |
||
2338 | energyPD := PresSimulP.TabResult[66, h] / 1000; |
||
2339 | kdiet := PDfreeNEintake / (MEintake - energyPD); |
||
2340 | Entretien := PProfilP.Entretien * kBR * FHP60 * Power(PV, 0.6) / kdiet;
|
||
2341 | end;
|
||
2342 | v := v + Entretien; |
||
2343 | end;
|
||
2344 | 4: // Activit? |
||
2345 | if PresSimulP.NbJSim > 1 |
||
2346 | then
|
||
2347 | for h := 1 to PresSimulP.NbJSim do |
||
2348 | begin
|
||
2349 | Standing := PresSimulP.TabResult[70, h];
|
||
2350 | PV := PresSimulP.TabResult[2, h];
|
||
2351 | if CBNRJ3.ItemIndex = 3 |
||
2352 | then // EN |
||
2353 | Activite := Standing * (NEact60h / 1000) * Power (PV, 0.6) |
||
2354 | else // EB, ED ou EM |
||
2355 | begin
|
||
2356 | PDfreeNEintake := PresSimulP.TabResult[65, h] / 1000; |
||
2357 | MEintake := PresSimulP.TabResult[86, h] / 1000; |
||
2358 | energyPD := PresSimulP.TabResult[66, h] / 1000; |
||
2359 | kdiet := PDfreeNEintake / (MEintake - energyPD); |
||
2360 | Activite := Standing * (NEact60h / 1000) * Power(PV, 0.6) / kdiet; |
||
2361 | end;
|
||
2362 | v := v + Activite; |
||
2363 | end;
|
||
2364 | 5: // Extrachaleur |
||
2365 | if CBNRJ3.ItemIndex <= 2 |
||
2366 | then // EB ou ED ou EM |
||
2367 | if PresSimulP.NbJSim > 1 |
||
2368 | then
|
||
2369 | for h := 1 to PresSimulP.NbJSim do |
||
2370 | begin
|
||
2371 | MEintake := PresSimulP.TabResult[86, h] / 1000; |
||
2372 | energyPD := PresSimulP.TabResult[66, h] / 1000; |
||
2373 | PDfreeNEintake := PresSimulP.TabResult[65, h] / 1000; |
||
2374 | PDfreeNEreq := PresSimulP.TabResult[73, h] / 1000; |
||
2375 | energyLD := PDfreeNEintake - PDfreeNEreq; |
||
2376 | FHP60 := PresSimulP.TabResult[91, h] / 1000; |
||
2377 | PV := PresSimulP.TabResult[2, h];
|
||
2378 | kdiet := PDfreeNEintake / (MEintake - energyPD); |
||
2379 | Entretien := PProfilP.Entretien * kBR * FHP60 * Power(PV, 0.6) / kdiet;
|
||
2380 | Standing := PresSimulP.TabResult[70, h];
|
||
2381 | Activite := Standing * (NEact60h / 1000) * Power(PV, 0.6) / kdiet; |
||
2382 | v := v + (MEintake - (energyPD + energyLD + Entretien + Activite)); |
||
2383 | end;
|
||
2384 | 6: // Prot?ines |
||
2385 | if PresSimulP.NbJSim > 1 |
||
2386 | then
|
||
2387 | for h := 1 to PresSimulP.NbJSim do |
||
2388 | begin
|
||
2389 | energyPD := PresSimulP.TabResult[66, h] / 1000; |
||
2390 | v := v + energyPD; |
||
2391 | end;
|
||
2392 | 7: // Lipides |
||
2393 | if PresSimulP.NbJSim > 1 |
||
2394 | then
|
||
2395 | for h := 1 to PresSimulP.NbJSim do |
||
2396 | begin
|
||
2397 | PDfreeNEintake := PresSimulP.TabResult[65, h] / 1000; |
||
2398 | PDfreeNEreq := PresSimulP.TabResult[73, h] / 1000; |
||
2399 | energyLD := PDfreeNEintake - PDfreeNEreq; |
||
2400 | v := v + energyLD; |
||
2401 | end;
|
||
2402 | end;
|
||
2403 | result := v / d; |
||
2404 | end;
|
||
2405 | 1: // Valeurs ?nerg?tiques |
||
2406 | begin
|
||
2407 | // Diviseur
|
||
2408 | case CBNRJ4.ItemIndex of |
||
2409 | 1: // PV^0.60 |
||
2410 | d := Power (PresSimulP.TabResult[2, j], 0.60); |
||
2411 | 2: // PV^0.75 |
||
2412 | d := Power (PresSimulP.TabResult[2, j], 0.75); |
||
2413 | 3: // Aliment |
||
2414 | d := PresSimulP.TabResult[11, j];
|
||
2415 | 4: // GMQ |
||
2416 | d := PresSimulP.TabResult[84, j];
|
||
2417 | else
|
||
2418 | d := 1;
|
||
2419 | end;
|
||
2420 | case CBNRJ3Valeurs.ItemIndex of |
||
2421 | 0: // Energie digestible |
||
2422 | begin
|
||
2423 | EDing := PResSimulP.TabResult[109, j] * PResSimulP.TabResult[11, j]; |
||
2424 | v := EDing; |
||
2425 | end;
|
||
2426 | 1: // Energie m?tabolisable |
||
2427 | case CBNRJ5.ItemIndex of |
||
2428 | 0: // Valeurs calcul?es |
||
2429 | begin
|
||
2430 | MEcrois := PresSimulP.TabResult[89, j];
|
||
2431 | v := MEcrois * PresSimulP.TabResult[113, j];
|
||
2432 | end;
|
||
2433 | 1: // Valeurs simul?es |
||
2434 | begin
|
||
2435 | MEintake := PresSimulP.TabResult[86, j] / 1000; |
||
2436 | v := MEintake; |
||
2437 | end;
|
||
2438 | else
|
||
2439 | v := 0;
|
||
2440 | end;
|
||
2441 | 2: // Energie nette |
||
2442 | case CBNRJ5.ItemIndex of |
||
2443 | 0: // Valeurs calcul?es |
||
2444 | begin
|
||
2445 | NEcrois := PresSimulP.TabResult[90, j];
|
||
2446 | v := NEcrois * PresSimulP.TabResult[11, j];
|
||
2447 | end;
|
||
2448 | 1: // Valeurs simul?es |
||
2449 | begin
|
||
2450 | NEintake := PresSimulP.TabResult[67, j] / 1000; |
||
2451 | v := NEintake; |
||
2452 | end;
|
||
2453 | else
|
||
2454 | v := 0;
|
||
2455 | end;
|
||
2456 | else
|
||
2457 | v := 0;
|
||
2458 | end;
|
||
2459 | result := v / d; |
||
2460 | end;
|
||
2461 | else
|
||
2462 | result := 0;
|
||
2463 | end;
|
||
2464 | end;
|
||
2465 | |||
2466 | // AffGraphNRJ
|
||
2467 | begin
|
||
2468 | ResetGraph; |
||
2469 | case CBNRJ1.ItemIndex of |
||
2470 | 0: // R?partition |
||
2471 | begin
|
||
2472 | Graph.Title.Text.Add(Format('%s (%s)', [CBNRJ3.Text, CBNRJ1.Text]));
|
||
2473 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBNRJ3.Text, CBNRJ4.Text]);
|
||
2474 | Graph.Legend.Inverted := TRUE; |
||
2475 | case FSimulP.PC.ActivePageIndex of |
||
2476 | 1: // Comparaison |
||
2477 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
2478 | 2: // Sensibilit? |
||
2479 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
2480 | end;
|
||
2481 | // Affichage des barres
|
||
2482 | for i := 0 to ListNRJ.Count - 1 do |
||
2483 | BarNRJ[i].Active := TRUE; |
||
2484 | for i := 0 to ListNRJ.Count - 1 do |
||
2485 | BarNRJ[i].Clear; |
||
2486 | if CBNRJ4.ItemIndex = 3 |
||
2487 | then
|
||
2488 | for i := 0 to ListNRJ.Count - 1 do |
||
2489 | BarNRJ[i].MultiBar := mbStacked100 |
||
2490 | else
|
||
2491 | for i := 0 to ListNRJ.Count - 1 do |
||
2492 | BarNRJ[i].MultiBar := mbStacked; |
||
2493 | for i := 0 to ListNRJ.Count - 1 do |
||
2494 | for k := 1 to 5 do |
||
2495 | if TabSimulP[k].Ok
|
||
2496 | then
|
||
2497 | begin
|
||
2498 | PResSimulP := TabSimulP[k].Result; |
||
2499 | if TabSimulP[k].Profil = -1 |
||
2500 | then // Profil de la simulation |
||
2501 | PProfilP := ListProfilP[FindIdxProfilP (FindNomProfilP (PSimulP.Profil))] |
||
2502 | else
|
||
2503 | PProfilP := ListProfilP[FindIdxProfilP (FindNomProfilP (TabSimulP[k].Profil))]; |
||
2504 | case FSimulP.PC.ActivePageIndex of |
||
2505 | 1: // Comparaison |
||
2506 | s := Format('%d', [k]);
|
||
2507 | 2: // Sensibilit? |
||
2508 | if FSimulP.CBVariable.ItemIndex = 6 |
||
2509 | then // Gaspillage |
||
2510 | if TabSimulP[k].Variation > 0 |
||
2511 | then
|
||
2512 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2513 | else
|
||
2514 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2515 | else
|
||
2516 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
2517 | end;
|
||
2518 | y := NRJY; |
||
2519 | if y > PICO
|
||
2520 | then
|
||
2521 | BarNRJ[i].AddBar(y, s, clTeeColor) |
||
2522 | else
|
||
2523 | BarNRJ[i].AddNull(s); |
||
2524 | end;
|
||
2525 | for i := 0 to ListNRJ.Count - 1 do |
||
2526 | BarNRJ[i].ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
2527 | end;
|
||
2528 | 1: // Valeurs ?nerg?tiques |
||
2529 | begin
|
||
2530 | Graph.Title.Text.Add(Format('%s (%s)', [CBNRJ3Valeurs.Text, CBNRJ1.Text]));
|
||
2531 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBNRJ3Valeurs.Text, CBNRJ4.Text]);
|
||
2532 | Graph.Legend.Inverted := FALSE; |
||
2533 | Graph.SubTitle.Text.Add(CBNRJ5.Text); |
||
2534 | Graph.BottomAxis.Title.Caption := CBNRJ2.Text; |
||
2535 | // Affichage des lignes
|
||
2536 | for k := 1 to 5 do |
||
2537 | if TabSimulP[k].Ok
|
||
2538 | then
|
||
2539 | begin
|
||
2540 | LineNRJ[k].Active := TRUE; |
||
2541 | LineNRJ[k].Clear; |
||
2542 | PResSimulP := TabSimulP[k].Result; |
||
2543 | for j := 1 to PresSimulP.NbJSim do |
||
2544 | LineNRJ[k].AddXY(NRJX, NRJY, '', clTeeColor);
|
||
2545 | end;
|
||
2546 | if CBNRJ2.ItemIndex = 3 |
||
2547 | then // Dur?e (semaine) |
||
2548 | Graph.BottomAxis.Increment := 1
|
||
2549 | else
|
||
2550 | Graph.BottomAxis.Increment := 10;
|
||
2551 | end;
|
||
2552 | end;
|
||
2553 | AjustEchelle(Graph); |
||
2554 | end;
|
||
2555 | |||
2556 | procedure TFCompSimulP.CBNRJ1Change(Sender: TObject);
|
||
2557 | begin
|
||
2558 | CBNRJ4.Items.Clear; |
||
2559 | case CBNRJ1.ItemIndex of |
||
2560 | 0: // R?partition |
||
2561 | begin
|
||
2562 | CBNRJ2.Visible := FALSE; |
||
2563 | CBNRJ3.Visible := TRUE; |
||
2564 | CBNRJ3Valeurs.Visible := FALSE; |
||
2565 | CBNRJ5.Visible := FALSE; |
||
2566 | // Unit?s
|
||
2567 | CBNRJ4.Items.Add(StrMJ); |
||
2568 | CBNRJ4.Items.Add(Format('%s/%s', [StrMJ, StrJ]));
|
||
2569 | CBNRJ4.Items.Add(Format('%s/%s %s', [StrMJ, StrKg, StrAlimentUnit]));
|
||
2570 | CBNRJ4.Items.Add('%');
|
||
2571 | end;
|
||
2572 | 1: // Valeurs ?nerg?tiques |
||
2573 | begin
|
||
2574 | CBNRJ2.Visible := TRUE; |
||
2575 | CBNRJ3.Visible := FALSE; |
||
2576 | CBNRJ3Valeurs.Visible := TRUE; |
||
2577 | CBNRJ5.Visible := TRUE; |
||
2578 | // Unit?s
|
||
2579 | CBNRJ4.Items.Add(Format('%s/%s', [StrMJ, StrJ]));
|
||
2580 | CBNRJ4.Items.Add(Format('%s/(%s %s)^0.60/%s', [StrMJ, StrKg, StrPV, StrJ]));
|
||
2581 | CBNRJ4.Items.Add(Format('%s/(%s %s)^0.75/%s', [StrMJ, StrKg, StrPV, StrJ]));
|
||
2582 | CBNRJ4.Items.Add(Format('%s/%s %s', [StrMJ, StrKg, StrAlimentUnit]));
|
||
2583 | CBNRJ4.Items.Add(Format('%s/%s %s', [StrMJ, StrKg, StrGMQUnit]));
|
||
2584 | end;
|
||
2585 | end;
|
||
2586 | CBNRJ4.ItemIndex := 0;
|
||
2587 | AffGraphNRJ; |
||
2588 | end;
|
||
2589 | |||
2590 | procedure TFCompSimulP.CBNRJ2Change(Sender: TObject);
|
||
2591 | begin
|
||
2592 | AffGraphNRJ; |
||
2593 | end;
|
||
2594 | |||
2595 | procedure TFCompSimulP.CBNRJ3Change(Sender: TObject);
|
||
2596 | begin
|
||
2597 | AffGraphNRJ; |
||
2598 | end;
|
||
2599 | |||
2600 | procedure TFCompSimulP.CBNRJ4Change(Sender: TObject);
|
||
2601 | begin
|
||
2602 | AffGraphNRJ; |
||
2603 | end;
|
||
2604 | |||
2605 | procedure TFCompSimulP.CBNRJ5Change(Sender: TObject);
|
||
2606 | begin
|
||
2607 | AffGraphNRJ; |
||
2608 | end;
|
||
2609 | |||
2610 | //////////////////
|
||
2611 | // Min?raux //
|
||
2612 | //////////////////
|
||
2613 | procedure TFCompSimulP.InitMin;
|
||
2614 | const
|
||
2615 | TabColor1: array[0..5] of TColor |
||
2616 | = (clBlack, clTeal, clOlive, clPink, clRed, clGreen); |
||
2617 | TabColor2: array[1..5] of TColor |
||
2618 | = (clRed, clGreen, clYellow, clBlue, clFuchsia); |
||
2619 | var
|
||
2620 | i, k: integer; |
||
2621 | begin
|
||
2622 | // ListMin : liste pour les min?raux
|
||
2623 | ListMin := TStringList.Create; |
||
2624 | ListMin.Assign(LBMin.Items); |
||
2625 | // BarMin : s?ries (barres) graphiques
|
||
2626 | SetLength(BarMin, ListMin.Count); |
||
2627 | for i := 0 to ListMin.Count - 1 do |
||
2628 | begin
|
||
2629 | BarMin[i] := TBarSeries.Create(Graph); |
||
2630 | BarMin[i].ParentChart := Graph; |
||
2631 | BarMin[i].Title := ListMin[i]; |
||
2632 | BarMin[i].SeriesColor := TabColor1[i]; |
||
2633 | BarMin[i].BarPen.Color := BarMin[i].SeriesColor; |
||
2634 | BarMin[i].Marks.Visible := FALSE; |
||
2635 | {
|
||
2636 | BarMin[i].Marks.ArrowLength := -16;
|
||
2637 | BarMin[i].Marks.Arrow.Visible := FALSE;
|
||
2638 | BarMin[i].Marks.Brush.Style := bsClear;
|
||
2639 | BarMin[i].Marks.Frame.Visible := FALSE;
|
||
2640 | BarMin[i].Marks.Style := smsValue;
|
||
2641 | }
|
||
2642 | //BarMin[i].AutoMarkPosition := FALSE;
|
||
2643 | Graph.AddSeries(BarMin[i]); |
||
2644 | end;
|
||
2645 | // LineMin : s?ries (lignes) graphiques
|
||
2646 | for k := 1 to 5 do |
||
2647 | if TabSimulP[k].Ok
|
||
2648 | then
|
||
2649 | begin
|
||
2650 | LineMin[k] := TLineSeries.Create(Graph); |
||
2651 | LineMin[k].ParentChart := Graph; |
||
2652 | case FSimulP.PC.ActivePageIndex of |
||
2653 | 1 : // Comparaison |
||
2654 | LineMin[k].Title := Format('Simulation %d', [k]);
|
||
2655 | 2 : // Sensibilit? |
||
2656 | if FSimulP.CBVariable.ItemIndex = 6 |
||
2657 | then // Gaspillage |
||
2658 | if TabSimulP[k].Variation > 0 |
||
2659 | then
|
||
2660 | LineMin[k].Title := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2661 | else
|
||
2662 | LineMin[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2663 | else
|
||
2664 | LineMin[k].Title := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
2665 | end;
|
||
2666 | LineMin[k].SeriesColor := TabColor2[k]; |
||
2667 | LineMin[k].LinePen.Color := LineMin[k].SeriesColor; |
||
2668 | LineMin[k].LinePen.Width := 2;
|
||
2669 | Graph.AddSeries(LineMin[k]); |
||
2670 | end;
|
||
2671 | end;
|
||
2672 | |||
2673 | procedure TFCompSimulP.AffGraphMin;
|
||
2674 | var
|
||
2675 | i, j, k: integer; |
||
2676 | y: double; |
||
2677 | s: string;
|
||
2678 | |||
2679 | // Abscisse
|
||
2680 | function MinX: double;
|
||
2681 | begin
|
||
2682 | case CBMin1.ItemIndex of |
||
2683 | 1, 2: // Apport ou besoin |
||
2684 | case CBMin2.ItemIndex of |
||
2685 | 0: // Poids vif |
||
2686 | result := PResSimulP.TabResult[2, j];
|
||
2687 | 1: // Age |
||
2688 | result := PResSimulP.TabResult[1, j];
|
||
2689 | 2: // Jours |
||
2690 | result := j; |
||
2691 | 3: // Semaines |
||
2692 | result := j / 7;
|
||
2693 | else
|
||
2694 | result := 0;
|
||
2695 | end;
|
||
2696 | else
|
||
2697 | result := 0;
|
||
2698 | end;
|
||
2699 | end;
|
||
2700 | |||
2701 | // Ordonn?e
|
||
2702 | function MinY: double;
|
||
2703 | var
|
||
2704 | h: integer; |
||
2705 | v, d, Ptot, Pdig, PV, GMQ, Indigestible, Entretien, Retenu, Gaspillage: double; |
||
2706 | |||
2707 | // Composition des aliments
|
||
2708 | procedure Composition(jour: integer);
|
||
2709 | var
|
||
2710 | Aliment1, Aliment2: integer; |
||
2711 | IngereFrais, Taux1, Taux2, IngereSec1, IngereSec2, Ptot1, Ptot2, Pdig1, Pdig2: double; |
||
2712 | CC1, CC2: CompositionChimique; |
||
2713 | begin
|
||
2714 | IngereFrais := PresSimulP.TabResult[11, jour];
|
||
2715 | // Aliment 1
|
||
2716 | Aliment1 := Round (PresSimulP.TabResult[7, jour]);
|
||
2717 | if Aliment1 = -1 |
||
2718 | then
|
||
2719 | CC1 := CCVide |
||
2720 | else
|
||
2721 | begin
|
||
2722 | PAliment := ListAliment[FindIdxAliment(FindNomAliment(Aliment1))]; |
||
2723 | CC1 := PAliment.CC; |
||
2724 | end;
|
||
2725 | Taux1 := PresSimulP.TabResult[9, jour] / 100; |
||
2726 | IngereSec1 := IngereFrais * Taux1 * CC1.MS / 1000;
|
||
2727 | Ptot1 := IngereSec1 * CC1.P; |
||
2728 | if Aliment1 = -1 |
||
2729 | then
|
||
2730 | Pdig1 := 0
|
||
2731 | else
|
||
2732 | if PAliment.Presentation = 0 |
||
2733 | then // Granul?s |
||
2734 | Pdig1 := IngereSec1 * PAliment.CC.PdigG |
||
2735 | else // Farine |
||
2736 | Pdig1 := IngereSec1 * PAliment.CC.PdigF; |
||
2737 | // Aliment 2
|
||
2738 | Aliment2 := Round(PresSimulP.TabResult[8, jour]);
|
||
2739 | if Aliment2 = -1 |
||
2740 | then
|
||
2741 | CC2 := CCVide |
||
2742 | else
|
||
2743 | begin
|
||
2744 | PAliment := ListAliment[FindIdxAliment(FindNomAliment(Aliment2))]; |
||
2745 | CC2 := PAliment.CC; |
||
2746 | end;
|
||
2747 | Taux2 := PresSimulP.TabResult[10, jour] / 100; |
||
2748 | IngereSec2 := IngereFrais * Taux2 * CC2.MS / 1000;
|
||
2749 | Ptot2 := IngereSec2 * CC2.P; |
||
2750 | if Aliment2 = -1 |
||
2751 | then
|
||
2752 | Pdig2 := 0
|
||
2753 | else
|
||
2754 | if PAliment.Presentation = 0 |
||
2755 | then // Granul?s |
||
2756 | Pdig2 := IngereSec2 * PAliment.CC.PdigG |
||
2757 | else // Farine |
||
2758 | Pdig2 := IngereSec2 * PAliment.CC.PdigF; |
||
2759 | // Cumul
|
||
2760 | Ptot := Ptot1 + Ptot2; |
||
2761 | Pdig := Pdig1 + Pdig2; |
||
2762 | end;
|
||
2763 | |||
2764 | begin
|
||
2765 | case CBMin1.ItemIndex of |
||
2766 | 0: // R?partition |
||
2767 | begin
|
||
2768 | // Diviseur
|
||
2769 | case CBMin4.ItemIndex of |
||
2770 | 1: // Dur?e |
||
2771 | d := PresSimulP.NbJSim; |
||
2772 | 2: // Aliment |
||
2773 | begin
|
||
2774 | d := 0;
|
||
2775 | if PresSimulP.NbJSim > 1 |
||
2776 | then
|
||
2777 | for h := 1 to PresSimulP.NbJSim do |
||
2778 | d := d + PresSimulP.TabResult[113, h];
|
||
2779 | end;
|
||
2780 | else
|
||
2781 | d := 1;
|
||
2782 | end;
|
||
2783 | v := 0;
|
||
2784 | case CBMin3.ItemIndex of |
||
2785 | 0: // Phosphore |
||
2786 | case i of |
||
2787 | 0: // Gaspillage |
||
2788 | if CBMin5A.ItemIndex = 1 |
||
2789 | then // Total |
||
2790 | for h := 1 to PresSimulP.NbJSim do |
||
2791 | begin
|
||
2792 | Composition(h); |
||
2793 | Gaspillage := PResSimulP.TabResult[112, h];
|
||
2794 | v := v + Ptot / (1 - Gaspillage) - Ptot;
|
||
2795 | end;
|
||
2796 | 1: // Indigestible |
||
2797 | if CBMin5A.ItemIndex = 1 |
||
2798 | then // Total |
||
2799 | for h := 1 to PresSimulP.NbJSim do |
||
2800 | begin
|
||
2801 | Composition(h); |
||
2802 | Indigestible := Ptot - Pdig; |
||
2803 | v := v + Indigestible; |
||
2804 | end;
|
||
2805 | 2: // Entretien |
||
2806 | for h := 1 to PresSimulP.NbJSim do |
||
2807 | begin
|
||
2808 | Composition(h); |
||
2809 | Indigestible := Ptot - Pdig; |
||
2810 | PV := PResSimulP.TabResult[2, h];
|
||
2811 | Entretien := 10 * PV / 1000; |
||
2812 | if Ptot < Indigestible + Entretien
|
||
2813 | then // D?ficit |
||
2814 | v := v + Ptot - Indigestible |
||
2815 | else
|
||
2816 | v := v + Entretien; |
||
2817 | end;
|
||
2818 | 3: // Retenu |
||
2819 | for h := 1 to PresSimulP.NbJSim do |
||
2820 | begin
|
||
2821 | Composition(h); |
||
2822 | Indigestible := Ptot - Pdig; |
||
2823 | PV := PResSimulP.TabResult[2, h];
|
||
2824 | Entretien := 10 * PV / 1000; |
||
2825 | GMQ := PResSimulP.TabResult[84, h];
|
||
2826 | Retenu := (5.4199 - 2 * 0.002857 * PV) * GMQ; |
||
2827 | if Ptot < Indigestible + Entretien + Retenu
|
||
2828 | then // D?ficit |
||
2829 | v := v + Max(Ptot - Indigestible - Entretien, 0)
|
||
2830 | else
|
||
2831 | v := v + Retenu; |
||
2832 | end;
|
||
2833 | 4: // D?ficit |
||
2834 | for h := 1 to PresSimulP.NbJSim do |
||
2835 | begin
|
||
2836 | Composition(h); |
||
2837 | Indigestible := Ptot - Pdig; |
||
2838 | PV := PResSimulP.TabResult[2, h];
|
||
2839 | Entretien := 10 * PV / 1000; |
||
2840 | GMQ := PResSimulP.TabResult[84, h];
|
||
2841 | Retenu := (5.4199 - 2 * 0.002857 * PV) * GMQ; |
||
2842 | if Ptot < Indigestible + Entretien + Retenu
|
||
2843 | then
|
||
2844 | v := v + Indigestible + Entretien + Retenu - Ptot; |
||
2845 | end;
|
||
2846 | 5: // Exc?s |
||
2847 | for h := 1 to PresSimulP.NbJSim do |
||
2848 | begin
|
||
2849 | Composition(h); |
||
2850 | Indigestible := Ptot - Pdig; |
||
2851 | PV := PResSimulP.TabResult[2, h];
|
||
2852 | Entretien := 10 * PV / 1000; |
||
2853 | GMQ := PResSimulP.TabResult[84, h];
|
||
2854 | Retenu := (5.4199 - 2 * 0.002857 * PV) * GMQ; |
||
2855 | if Ptot > Indigestible + Entretien + Retenu
|
||
2856 | then
|
||
2857 | v := v + Ptot - Indigestible - Entretien - Retenu; |
||
2858 | end;
|
||
2859 | end;
|
||
2860 | end;
|
||
2861 | result := v / d; |
||
2862 | end;
|
||
2863 | 1: // Apport |
||
2864 | begin
|
||
2865 | // Diviseur
|
||
2866 | case CBMin4.ItemIndex of |
||
2867 | 1: // GMQ |
||
2868 | d := PResSimulP.TabResult[84, j];
|
||
2869 | 2: // Aliment |
||
2870 | d := PResSimulP.TabResult[113, j];
|
||
2871 | else
|
||
2872 | d := 1;
|
||
2873 | end;
|
||
2874 | case CBMin3.ItemIndex of |
||
2875 | 0: // Phosphore |
||
2876 | begin
|
||
2877 | Composition(j); |
||
2878 | if CBMin5A.ItemIndex = 0 |
||
2879 | then // Digestibilit? apparente |
||
2880 | v := Pdig |
||
2881 | else // Total |
||
2882 | v := Ptot; |
||
2883 | end;
|
||
2884 | else
|
||
2885 | v := 0;
|
||
2886 | end;
|
||
2887 | result := v / d; |
||
2888 | end;
|
||
2889 | 2: // Besoin |
||
2890 | begin
|
||
2891 | // Diviseur
|
||
2892 | case CBMin4.ItemIndex of |
||
2893 | 1: // GMQ |
||
2894 | d := PResSimulP.TabResult[84, j];
|
||
2895 | 2: // Aliment |
||
2896 | d := PResSimulP.TabResult[113, j];
|
||
2897 | else
|
||
2898 | d := 1;
|
||
2899 | end;
|
||
2900 | case CBMin3.ItemIndex of |
||
2901 | 0: // Phosphore |
||
2902 | begin
|
||
2903 | PV := PResSimulP.TabResult[2, j];
|
||
2904 | Entretien := 10 * PV / 1000; |
||
2905 | GMQ := PResSimulP.TabResult[84, j];
|
||
2906 | Retenu := (5.4199 - 2 * 0.002857 * PV) * GMQ; |
||
2907 | v := Entretien + Retenu; |
||
2908 | end;
|
||
2909 | else
|
||
2910 | v := 0;
|
||
2911 | end;
|
||
2912 | result := v / d; |
||
2913 | end;
|
||
2914 | else
|
||
2915 | result := 0;
|
||
2916 | end;
|
||
2917 | end;
|
||
2918 | |||
2919 | // AffGraphMin
|
||
2920 | begin
|
||
2921 | ResetGraph; |
||
2922 | Graph.Title.Text.Add(Format('%s (%s)', [CBMin3.Text, CBMin1.Text]));
|
||
2923 | if CBMin1.ItemIndex = 1 |
||
2924 | then // Besoin |
||
2925 | Graph.SubTitle.Text.Add(CBMin5B.Text) |
||
2926 | else
|
||
2927 | Graph.SubTitle.Text.Add(CBMin5A.Text); |
||
2928 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBMin3.Text, CBMin4.Text]);
|
||
2929 | case CBMin1.ItemIndex of |
||
2930 | 0: // R?partition |
||
2931 | begin
|
||
2932 | Graph.Legend.Inverted := TRUE; |
||
2933 | case FSimulP.PC.ActivePageIndex of |
||
2934 | 1: // Comparaison |
||
2935 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
2936 | 2: // Sensibilit? |
||
2937 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
2938 | end;
|
||
2939 | // Affichage des barres
|
||
2940 | for i := 0 to ListMin.Count - 1 do |
||
2941 | BarMin[i].Active := TRUE; |
||
2942 | for i := 0 to ListMin.Count - 1 do |
||
2943 | BarMin[i].Clear; |
||
2944 | if CBMin4.ItemIndex = 3 |
||
2945 | then
|
||
2946 | for i := 0 to ListMin.Count - 1 do |
||
2947 | BarMin[i].MultiBar := mbStacked100 |
||
2948 | else
|
||
2949 | for i := 0 to ListMin.Count - 1 do |
||
2950 | BarMin[i].MultiBar := mbStacked; |
||
2951 | for i := 0 to ListMin.Count - 1 do |
||
2952 | for k := 1 to 5 do |
||
2953 | if TabSimulP[k].Ok
|
||
2954 | then
|
||
2955 | begin
|
||
2956 | PResSimulP := TabSimulP[k].Result; |
||
2957 | case FSimulP.PC.ActivePageIndex of |
||
2958 | 1: // Comparaison |
||
2959 | s := Format('%d', [k]);
|
||
2960 | 2: // Sensibilit? |
||
2961 | if FSimulP.CBVariable.ItemIndex = 6 |
||
2962 | then // Gaspillage |
||
2963 | if TabSimulP[k].Variation > 0 |
||
2964 | then
|
||
2965 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2966 | else
|
||
2967 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
2968 | else
|
||
2969 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
2970 | end;
|
||
2971 | y := MinY; |
||
2972 | if y > PICO
|
||
2973 | then
|
||
2974 | BarMin[i].AddBar(y, s, clTeeColor) |
||
2975 | else
|
||
2976 | BarMin[i].AddNull(s); |
||
2977 | end;
|
||
2978 | for i := 0 to ListMin.Count - 1 do |
||
2979 | BarMin[i].ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
2980 | end;
|
||
2981 | 1, 2: // Apport ou besoin |
||
2982 | begin
|
||
2983 | Graph.Legend.Inverted := FALSE; |
||
2984 | Graph.BottomAxis.Title.Caption := CBMin2.Text; |
||
2985 | // Affichage des lignes
|
||
2986 | for k := 1 to 5 do |
||
2987 | if TabSimulP[k].Ok
|
||
2988 | then
|
||
2989 | begin
|
||
2990 | LineMin[k].Active := TRUE; |
||
2991 | LineMin[k].Clear; |
||
2992 | PResSimulP := TabSimulP[k].Result; |
||
2993 | for j := 1 to PresSimulP.NbJSim do |
||
2994 | LineMin[k].AddXY(MinX, MinY, '', clTeeColor);
|
||
2995 | end;
|
||
2996 | if CBMin2.ItemIndex = 3 |
||
2997 | then // Dur?e (semaine) |
||
2998 | Graph.BottomAxis.Increment := 1
|
||
2999 | else
|
||
3000 | Graph.BottomAxis.Increment := 10;
|
||
3001 | end;
|
||
3002 | end;
|
||
3003 | AjustEchelle(Graph); |
||
3004 | end;
|
||
3005 | |||
3006 | procedure TFCompSimulP.CBMin1Change(Sender: TObject);
|
||
3007 | begin
|
||
3008 | CBMin4.Items.Clear; |
||
3009 | case CBMin1.ItemIndex of |
||
3010 | 0: // R?partition |
||
3011 | begin
|
||
3012 | CBMin2.Visible := FALSE; |
||
3013 | CBMin5A.Visible := TRUE; |
||
3014 | CBMin5B.Visible := FALSE; |
||
3015 | // Unit?s
|
||
3016 | CBMin4.Items.Add(StrG); |
||
3017 | CBMin4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
3018 | CBMin4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
3019 | CBMin4.Items.Add('%');
|
||
3020 | end;
|
||
3021 | 1, 2: // Apport ou besoin |
||
3022 | begin
|
||
3023 | CBMin2.Visible := TRUE; |
||
3024 | CBMin5A.Visible := (CBMin1.ItemIndex = 1);
|
||
3025 | CBMin5B.Visible := (CBMin1.ItemIndex = 2);
|
||
3026 | if CBMin1.ItemIndex = 2 |
||
3027 | then // Besoin |
||
3028 | if CBMin5A.ItemIndex = 1 |
||
3029 | then // Total |
||
3030 | CBMin5A.ItemIndex := 0;
|
||
3031 | // Unit?s
|
||
3032 | CBMin4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
3033 | CBMin4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrGMQUnit]));
|
||
3034 | CBMin4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
3035 | end;
|
||
3036 | end;
|
||
3037 | CBMin4.ItemIndex := 0;
|
||
3038 | AffGraphMin; |
||
3039 | end;
|
||
3040 | |||
3041 | procedure TFCompSimulP.CBMin2Change(Sender: TObject);
|
||
3042 | begin
|
||
3043 | AffGraphMin; |
||
3044 | end;
|
||
3045 | |||
3046 | procedure TFCompSimulP.CBMin3Change(Sender: TObject);
|
||
3047 | begin
|
||
3048 | AffGraphMin; |
||
3049 | end;
|
||
3050 | |||
3051 | procedure TFCompSimulP.CBMin4Change(Sender: TObject);
|
||
3052 | begin
|
||
3053 | AffGraphMin; |
||
3054 | end;
|
||
3055 | |||
3056 | procedure TFCompSimulP.CBMin5Change(Sender: TObject);
|
||
3057 | begin
|
||
3058 | if CBMin1.ItemIndex = 2 |
||
3059 | then // Besoin |
||
3060 | CBMin5A.ItemIndex := CBMin5B.ItemIndex |
||
3061 | else
|
||
3062 | if CBMin5A.ItemIndex = 1 |
||
3063 | then // Total |
||
3064 | CBMin5B.ItemIndex := 0
|
||
3065 | else
|
||
3066 | CBMin5B.ItemIndex := CBMin5A.ItemIndex; |
||
3067 | AffGraphMin; |
||
3068 | end;
|
||
3069 | |||
3070 | ////////////////
|
||
3071 | // Rejets //
|
||
3072 | ////////////////
|
||
3073 | procedure TFCompSimulP.InitRej;
|
||
3074 | const
|
||
3075 | TabColor: array[0..4] of TColor |
||
3076 | = (clBlack, clMaroon, clYellow, clMaroon, clPink); |
||
3077 | var
|
||
3078 | i: integer; |
||
3079 | begin
|
||
3080 | // ListRej : liste pour les rejets
|
||
3081 | ListRej := TStringList.Create; |
||
3082 | ListRej.Assign(LBRej.Items); |
||
3083 | // BarRej : s?ries (barres) graphiques
|
||
3084 | SetLength(BarRej, ListRej.Count); |
||
3085 | for i := 0 to ListRej.Count - 1 do |
||
3086 | begin
|
||
3087 | BarRej[i] := TBarSeries.Create(Graph); |
||
3088 | BarRej[i].ParentChart := Graph; |
||
3089 | BarRej[i].Title := ListRej[i]; |
||
3090 | BarRej[i].SeriesColor := TabColor[i]; |
||
3091 | BarRej[i].BarPen.Color := BarRej[i].SeriesColor; |
||
3092 | BarRej[i].Marks.Visible := FALSE; |
||
3093 | {
|
||
3094 | BarRej[i].Marks.ArrowLength := -16;
|
||
3095 | BarRej[i].Marks.Arrow.Visible := FALSE;
|
||
3096 | BarRej[i].Marks.Brush.Style := bsClear;
|
||
3097 | BarRej[i].Marks.Frame.Visible := FALSE;
|
||
3098 | BarRej[i].Marks.Style := smsValue;
|
||
3099 | }
|
||
3100 | //BarRej[i].AutoMarkPosition := FALSE;
|
||
3101 | Graph.AddSeries(BarRej[i]); |
||
3102 | end;
|
||
3103 | end;
|
||
3104 | |||
3105 | procedure TFCompSimulP.AffGraphRej;
|
||
3106 | var
|
||
3107 | i, k: integer; |
||
3108 | y: double; |
||
3109 | s: string;
|
||
3110 | |||
3111 | // Ordonn?e
|
||
3112 | function RejY: double;
|
||
3113 | var
|
||
3114 | h: integer; |
||
3115 | v, d, IngereSec1, IngereSec2, Ptot, Pdig, Ingere, Digestible, Depose, Gaspillage: double; |
||
3116 | CC1, CC2: CompositionChimique; |
||
3117 | |||
3118 | // Composition des aliments
|
||
3119 | procedure Composition(jour: integer);
|
||
3120 | var
|
||
3121 | Aliment1, Aliment2: integer; |
||
3122 | IngereFrais, Taux1, Taux2, Ptot1, Ptot2, Pdig1, Pdig2: double; |
||
3123 | begin
|
||
3124 | IngereFrais := PresSimulP.TabResult[11, jour];
|
||
3125 | // Aliment 1
|
||
3126 | Aliment1 := Round (PresSimulP.TabResult[7, jour]);
|
||
3127 | if Aliment1 = -1 |
||
3128 | then
|
||
3129 | CC1 := CCVide |
||
3130 | else
|
||
3131 | begin
|
||
3132 | PAliment := ListAliment[FindIdxAliment(FindNomAliment(Aliment1))]; |
||
3133 | CC1 := PAliment.CC; |
||
3134 | end;
|
||
3135 | Taux1 := PresSimulP.TabResult[9, jour] / 100; |
||
3136 | IngereSec1 := IngereFrais * Taux1 * CC1.MS / 1000;
|
||
3137 | Ptot1 := IngereSec1 * CC1.P; |
||
3138 | if Aliment1 = -1 |
||
3139 | then
|
||
3140 | Pdig1 := 0
|
||
3141 | else
|
||
3142 | if PAliment.Presentation = 0 |
||
3143 | then // Granul?s |
||
3144 | Pdig1 := IngereSec1 * PAliment.CC.PdigG |
||
3145 | else // Farine |
||
3146 | Pdig1 := IngereSec1 * PAliment.CC.PdigF; |
||
3147 | // Aliment 2
|
||
3148 | Aliment2 := Round (PresSimulP.TabResult[8, jour]);
|
||
3149 | if Aliment2 = -1 |
||
3150 | then
|
||
3151 | CC2 := CCVide |
||
3152 | else
|
||
3153 | begin
|
||
3154 | PAliment := ListAliment[FindIdxAliment(FindNomAliment (Aliment2))]; |
||
3155 | CC2 := PAliment.CC; |
||
3156 | end;
|
||
3157 | Taux2 := PresSimulP.TabResult[10, jour] / 100; |
||
3158 | IngereSec2 := IngereFrais * Taux2 * CC2.MS / 1000;
|
||
3159 | Ptot2 := IngereSec2 * CC2.P; |
||
3160 | if Aliment2 = -1 |
||
3161 | then
|
||
3162 | Pdig2 := 0
|
||
3163 | else
|
||
3164 | if PAliment.Presentation = 0 |
||
3165 | then // Granul?s |
||
3166 | Pdig2 := IngereSec2 * PAliment.CC.PdigG |
||
3167 | else // Farine |
||
3168 | Pdig2 := IngereSec2 * PAliment.CC.PdigF; |
||
3169 | // Cumul
|
||
3170 | Ptot := Ptot1 + Ptot2; |
||
3171 | Pdig := Pdig1 + Pdig2; |
||
3172 | end;
|
||
3173 | |||
3174 | // Calcul de l'ing?r?
|
||
3175 | function CalcIngere: Double;
|
||
3176 | begin
|
||
3177 | case CBRej3.ItemIndex of |
||
3178 | 0: // Azote |
||
3179 | result := (IngereSec1*CC1.MAT + IngereSec2*CC2.MAT) * 0.16;
|
||
3180 | 1: // Phosphore |
||
3181 | result := Ptot; |
||
3182 | 2: // Calcium |
||
3183 | result := IngereSec1*CC1.Ca + IngereSec2*CC2.Ca; |
||
3184 | 3: // Potassium |
||
3185 | result := IngereSec1*CC1.K + IngereSec2*CC2.K; |
||
3186 | 4: // Cuivre |
||
3187 | result := IngereSec1*CC1.Cu + IngereSec2*CC2.Cu; |
||
3188 | 5: // Zinc |
||
3189 | result := IngereSec1*CC1.Zn + IngereSec2*CC2.Zn; |
||
3190 | else
|
||
3191 | result := 0;
|
||
3192 | end;
|
||
3193 | end;
|
||
3194 | |||
3195 | // Calcul du digestible
|
||
3196 | function CalcDigestible: Double;
|
||
3197 | begin
|
||
3198 | case CBRej3.ItemIndex of |
||
3199 | 0: // Azote |
||
3200 | result := (IngereSec1*CC1.MAT*CC1.dMAT_C/100 + IngereSec2*CC2.MAT*CC2.dMAT_C/100) * 0.16; |
||
3201 | 1: // Phosphore |
||
3202 | result := Pdig; |
||
3203 | else
|
||
3204 | result := 0;
|
||
3205 | end;
|
||
3206 | end;
|
||
3207 | |||
3208 | // Calcul du d?p?t (potentiel)
|
||
3209 | function CalcDepot(jour: integer): Double;
|
||
3210 | var
|
||
3211 | PV, PVV, PVfin, PVVfin, GMQ, PD: Double; |
||
3212 | begin
|
||
3213 | PV := PresSimulP.TabResult[2, jour];
|
||
3214 | PVV := CalcPVV(PV); |
||
3215 | PVfin := PresSimulP.TabResult[83, jour];
|
||
3216 | PVVfin := CalcPVV(PVfin); |
||
3217 | GMQ := PResSimulP.TabResult[84, jour];
|
||
3218 | PD := PResSimulP.TabResult[79, jour];
|
||
3219 | case CBRej3.ItemIndex of |
||
3220 | 0: // Azote |
||
3221 | result := PD * 0.16;
|
||
3222 | 1: // Phosphore |
||
3223 | result := (5.4199 - 2 * 0.002857 * PV) * GMQ; |
||
3224 | 2: // Calcium |
||
3225 | result := -0.00180 * (Power (PVVfin, 2) - Power (PVV, 2)) + 8.64633 * (PVVfin - PVV); |
||
3226 | 3: // Potassium |
||
3227 | result := -0.00345 * (Power (PVVfin, 2) - Power (PVV, 2)) + 2.53338 * (PVVfin - PVV); |
||
3228 | 4: // Cuivre |
||
3229 | result := -0.00251 * (Power (PVVfin, 2) - Power (PVV, 2)) + 1.05393 * (PVVfin - PVV); |
||
3230 | 5: // Zinc |
||
3231 | result := 21.8 * (PVVfin - PVV); |
||
3232 | else
|
||
3233 | result := 0;
|
||
3234 | end;
|
||
3235 | end;
|
||
3236 | |||
3237 | // RejY
|
||
3238 | begin
|
||
3239 | // Diviseur
|
||
3240 | case CBRej4.ItemIndex of |
||
3241 | 1: // Dur?e |
||
3242 | d := PresSimulP.NbJSim; |
||
3243 | 2: // Aliment |
||
3244 | begin
|
||
3245 | d := 0;
|
||
3246 | for h := 1 to PresSimulP.NbJSim do |
||
3247 | d := d + PresSimulP.TabResult[113, h];
|
||
3248 | end;
|
||
3249 | else
|
||
3250 | d := 1;
|
||
3251 | end;
|
||
3252 | v := 0;
|
||
3253 | for h := 1 to PresSimulP.NbJSim do |
||
3254 | begin
|
||
3255 | Composition(h); |
||
3256 | Ingere := CalcIngere; |
||
3257 | Gaspillage := PResSimulP.TabResult[112, h];
|
||
3258 | Digestible := CalcDigestible; |
||
3259 | Depose := CalcDepot(h); |
||
3260 | if CBRej3.ItemIndex < 2 |
||
3261 | then // Azote ou phosphore |
||
3262 | case i of |
||
3263 | 0: // Gaspillage |
||
3264 | v := v + Ingere / (1 - Gaspillage) - Ingere;
|
||
3265 | 1: // F?cal |
||
3266 | v := v + Ingere - Digestible; |
||
3267 | 2: // Urinaire |
||
3268 | v := v + Max(Digestible - Depose, 0);
|
||
3269 | 4: // Retenu |
||
3270 | v := v + Min(Digestible, Depose); |
||
3271 | end
|
||
3272 | else // Autres |
||
3273 | case i of |
||
3274 | 0: // Gaspillage |
||
3275 | v := v + Ingere / (1 - Gaspillage) - Ingere;
|
||
3276 | 3: // Ecr?t? |
||
3277 | v := v + Max(Ingere - Depose, 0);
|
||
3278 | 4: // Retenu |
||
3279 | v := v + Min(Ingere, Depose); |
||
3280 | end;
|
||
3281 | end;
|
||
3282 | result := v / d; |
||
3283 | end;
|
||
3284 | |||
3285 | // AffGraphRej
|
||
3286 | begin
|
||
3287 | ResetGraph; |
||
3288 | Graph.Legend.Inverted := TRUE; |
||
3289 | Graph.Title.Text.Add(TabRej.Caption); |
||
3290 | Graph.LeftAxis.Title.Caption := Format('%s (%s)', [CBRej3.Text, CBRej4.Text]);
|
||
3291 | case FSimulP.PC.ActivePageIndex of |
||
3292 | 1: // Comparaison |
||
3293 | Graph.BottomAxis.Title.Caption := 'Simulation';
|
||
3294 | 2: // Sensibilit? |
||
3295 | Graph.BottomAxis.Title.Caption := 'Variation';
|
||
3296 | end;
|
||
3297 | // Affichage des barres
|
||
3298 | BarRej[0].Active := TRUE;
|
||
3299 | BarRej[1].Active := CBRej3.ItemIndex < 2; |
||
3300 | BarRej[2].Active := CBRej3.ItemIndex < 2; |
||
3301 | BarRej[3].Active := CBRej3.ItemIndex > 1; |
||
3302 | BarRej[4].Active := TRUE;
|
||
3303 | for i := 0 to ListRej.Count - 1 do |
||
3304 | BarRej[i].Clear; |
||
3305 | if CBRej4.ItemIndex = 3 |
||
3306 | then
|
||
3307 | for i := 0 to ListRej.Count - 1 do |
||
3308 | BarRej[i].MultiBar := mbStacked100 |
||
3309 | else
|
||
3310 | for i := 0 to ListRej.Count - 1 do |
||
3311 | BarRej[i].MultiBar := mbStacked; |
||
3312 | for i := 0 to ListRej.Count - 1 do |
||
3313 | for k := 1 to 5 do |
||
3314 | if TabSimulP[k].Ok
|
||
3315 | then
|
||
3316 | begin
|
||
3317 | PResSimulP := TabSimulP[k].Result; |
||
3318 | case FSimulP.PC.ActivePageIndex of |
||
3319 | 1: // Comparaison |
||
3320 | s := Format('%d', [k]);
|
||
3321 | 2: // Sensibilit? |
||
3322 | if FSimulP.CBVariable.ItemIndex = 6 |
||
3323 | then // Gaspillage |
||
3324 | if TabSimulP[k].Variation > 0 |
||
3325 | then
|
||
3326 | s := Format('+%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
3327 | else
|
||
3328 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]) |
||
3329 | else
|
||
3330 | s := Format('%1.0f%%', [TabSimulP[k].Variation * 100]); |
||
3331 | end;
|
||
3332 | y := RejY; |
||
3333 | if y > PICO
|
||
3334 | then
|
||
3335 | BarRej[i].AddBar(y, s, clTeeColor) |
||
3336 | else
|
||
3337 | BarRej[i].AddNull(s); |
||
3338 | end;
|
||
3339 | for i := 0 to ListRej.Count - 1 do |
||
3340 | BarRej[i].ValueFormat := AjustFormat(AjustPas(Graph.MaxYValue(Graph.LeftAxis) - Graph.MinYValue(Graph.LeftAxis))); |
||
3341 | AjustEchelle(Graph); |
||
3342 | end;
|
||
3343 | |||
3344 | procedure TFCompSimulP.CBRej3Change(Sender: TObject);
|
||
3345 | begin
|
||
3346 | CBRej4.Items.Clear; |
||
3347 | if CBRej3.ItemIndex > 3 |
||
3348 | then // Oligo-?l?ment |
||
3349 | begin
|
||
3350 | CBRej4.Items.Add(StrMG); |
||
3351 | CBRej4.Items.Add(Format('%s/%s', [StrMG, StrJ]));
|
||
3352 | CBRej4.Items.Add(Format('%s/%s %s', [StrMG, StrKg, StrAlimentUnit]));
|
||
3353 | CBRej4.Items.Add('%');
|
||
3354 | end
|
||
3355 | else // Macro-?l?ment |
||
3356 | begin
|
||
3357 | CBRej4.Items.Add(StrG); |
||
3358 | CBRej4.Items.Add(Format('%s/%s', [StrG, StrJ]));
|
||
3359 | CBRej4.Items.Add(Format('%s/%s %s', [StrG, StrKg, StrAlimentUnit]));
|
||
3360 | CBRej4.Items.Add('%');
|
||
3361 | end;
|
||
3362 | CBRej4.ItemIndex := 0;
|
||
3363 | AffGraphRej; |
||
3364 | end;
|
||
3365 | |||
3366 | procedure TFCompSimulP.CBRej4Change(Sender: TObject);
|
||
3367 | begin
|
||
3368 | AffGraphRej; |
||
3369 | end;
|
||
3370 | |||
3371 | procedure TFCompSimulP.WMSysCommand(var Message: TWMSysCommand); |
||
3372 | begin
|
||
3373 | if Message.CmdType = SC_MINIMIZE
|
||
3374 | then
|
||
3375 | Application.Minimize |
||
3376 | else
|
||
3377 | inherited;
|
||
3378 | end;
|
||
3379 | |||
3380 | end. |