home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Delphi / TeeChartPro / TeeChart5Delphi5Eval.exe / %MAINDIR% / Examples / Features / QualityControl.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-09-10  |  2.8 KB  |  127 lines

  1. unit QualityControl;
  2.  
  3. interface
  4.  
  5. uses
  6.   Wintypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls,
  7.   Forms, Dialogs,  Series, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls,
  8.   ComCtrls;
  9.  
  10. type
  11.   TFormQuality = class(TForm)
  12.     Chart1: TChart;
  13.     Good: TLineSeries;
  14.     Bad: TLineSeries;
  15.     Upper: TFastLineSeries;
  16.     Lower: TFastLineSeries;
  17.     Panel1: TPanel;
  18.     Label1: TLabel;
  19.     Label2: TLabel;
  20.     UpperEdit: TEdit;
  21.     LowerEdit: TEdit;
  22.     PageControl1: TPageControl;
  23.     TabSheet1: TTabSheet;
  24.     Memo1: TMemo;
  25.     TabSheet2: TTabSheet;
  26.     Memo2: TMemo;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure UpperEditChange(Sender: TObject);
  29.     procedure LowerEditChange(Sender: TObject);
  30.   private
  31.     { Private declarations }
  32.   public
  33.     { Public declarations }
  34.     UpperLim : Double;
  35.     LowerLim : Double;
  36.     Procedure CalculateSPC(GoodSeries,BadSeries:TChartSeries);
  37.   end;
  38.  
  39. implementation
  40.  
  41. {$R *.DFM}
  42.  
  43. { Calculate the upper and lower limits }
  44. Procedure TFormQuality.CalculateSPC(GoodSeries,BadSeries:TChartSeries);
  45. Var Sum,SumN,
  46.     tmp,Aux,
  47.     LCP,
  48.     LCN,
  49.     NumTotal,
  50.     Percent    : Double;
  51.     t,N        : Integer;
  52. Begin
  53.   UpperLim:=0;
  54.   LowerLim:=0;
  55.   Sum:=0;
  56.   SumN:=0;
  57.   N:=0;
  58.   for t:=0 to GoodSeries.Count-1 do
  59.   begin
  60.     Percent:=(BadSeries.YValues[t]*GoodSeries.YValues[t]/100.0);
  61.     NumTotal:=GoodSeries.YValues[t]+Percent;
  62.     if NumTotal>0 then
  63.     Begin
  64.       Sum:=Sum+Percent/NumTotal;
  65.       SumN:=SumN+NumTotal;
  66.       inc(n);
  67.     end;
  68.   end;
  69.   LCP:=Sum/n;
  70.   LCN:=SumN/n;
  71.   tmp:=(LCP*(1-LCP))/LCN;
  72.   if tmp>0 then
  73.   Begin
  74.     Aux:=3*Sqrt(tmp); { <-- 3 by square root }
  75.     UpperLim:=100.0*(LCP+Aux);
  76.     LowerLim:=100.0*(LCP-Aux);
  77.   end;
  78. End;
  79.  
  80. procedure TFormQuality.FormCreate(Sender: TObject);
  81. var t:Integer;
  82. begin
  83.   Good.Clear;
  84.   for t:=0 to 19 do Good.Add(800+Random(200),'',clTeeColor);
  85.  
  86.   Bad.Clear;
  87.   for t:=0 to 19 do Bad.Add(4+Random(4),'',clTeeColor);
  88.  
  89.   CalculateSPC(Good,Bad);
  90.  
  91.   UpperEdit.Text:=FormatFloat('#.0000',UpperLim);
  92.   LowerEdit.Text:=FormatFloat('#.0000',LowerLim);
  93.  
  94.   Chart1.LeftAxis.SetMinMax(0,1100);
  95.   Chart1.RightAxis.SetMinMax(0,10);
  96. end;
  97.  
  98. procedure TFormQuality.UpperEditChange(Sender: TObject);
  99. var tmp : Double;
  100. begin
  101.   try
  102.     tmp:=StrToFloat(UpperEdit.Text);
  103.   except
  104.     on Exception do exit;
  105.   end;
  106.   Upper.Clear;
  107.   Upper.AddXY(0,tmp,'',clTeeColor);
  108.   Upper.AddXY(19,tmp,'',clTeeColor);
  109. end;
  110.  
  111. procedure TFormQuality.LowerEditChange(Sender: TObject);
  112. var tmp : Double;
  113. begin
  114.   try
  115.     tmp:=StrToFloat(LowerEdit.Text);
  116.   except
  117.     on Exception do exit;
  118.   end;
  119.   Lower.Clear;
  120.   Lower.AddXY(0,tmp,'',clTeeColor);
  121.   Lower.AddXY(19,tmp,'',clTeeColor);
  122. end;
  123.  
  124. initialization
  125.   RegisterClass(TFormQuality);
  126. end.
  127.