36. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 3/31/2017 10:45:43 AM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

36.1 Files compared

# Location File Last Modified
1 CPRS v31A.zip\CPRS v31A\VITL5_P34_src.zip\Source\VITALSDATAENTRY fGMV_SupO2.pas Tue Dec 13 18:25:44 2016 UTC
2 CPRS v31A.zip\CPRS v31A\VITL5_P34_src.zip\Source\VITALSDATAENTRY fGMV_SupO2.pas Fri Mar 31 15:01:34 2017 UTC

36.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 2 1048
Changed 1 2
Inserted 0 0
Removed 0 0

36.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

36.4 Active regular expressions

No regular expressions were active.

36.5 Comparison detail

  1   unit fGMV_ SupO2;
  2   {
  3   ========== ========== ========== ========== ========== ========== ========== ==========
  4   *
  5   *       Ap plication:   Vitals
  6   *       Re vision:      $Revisio n: 1 $  $M odtime: 1/ 24/08 4:16 p $
  7   *       De veloper:      PII                                             
  8   *       Si te:          Hines OI FO
  9   *
  10   *       De scription:   Accepts  flow rate  data for P O2 vital.
  11   *
  12   *       No tes:
  13   *
  14   ========== ========== ========== ========== ========== ========== ========== ==========
  15   *       $A rchive: /V itals/5.0  (Version 5 .0)/5.0.23  (Patch 23 )/VITALS_5 _0_23_8/So urce/VITAL SDATAENTRY /fGMV_SupO 2.pas $
  16   *
  17   * $History : fGMV_Sup O2.pas $
  18    * 
  19    * ******* **********   Version  1  ******* **********
  20    * User: V haishandri a Date: 8/ 12/09    T ime: 8:29a
  21    * Created  in $/Vita ls/5.0 (Ve rsion 5.0) /5.0.23 (P atch 23)/V ITALS_5_0_ 23_8/Sourc e/VITALSDA TAENTRY
  22    * 
  23    * ******* **********   Version  1  ******* **********
  24    * User: V haishandri a Date: 3/ 09/09    T ime: 3:39p
  25    * Created  in $/Vita ls/5.0 (Ve rsion 5.0) /5.0.23 (P atch 23)/V ITALS_5_0_ 23_6/Sourc e/VITALSDA TAENTRY
  26    * 
  27    * ******* **********   Version  1  ******* **********
  28    * User: V haishandri a Date: 1/ 13/09    T ime: 1:26p
  29    * Created  in $/Vita ls/5.0 (Ve rsion 5.0) /5.0.23 (P atch 23)/V ITALS_5_0_ 23_4/Sourc e/VITALSDA TAENTRY
  30    * 
  31    * ******* **********   Version  3  ******* **********
  32    * User: V haishandri a Date: 2/ 01/08    T ime: 7:39a
  33    * Updated  in $/Vita ls GUI 200 7/Vitals/V ITALSDATAE NTRY
  34    * Vitals  GUI 5.0.22 .3
  35    * 
  36    * ******* **********   Version  2  ******* **********
  37    * User: V haishandri a Date: 1/ 07/08    T ime: 6:51p
  38    * Updated  in $/Vita ls GUI 200 7/Vitals/V ITALSDATAE NTRY
  39    * 
  40    * ******* **********   Version  1  ******* **********
  41    * User: V haishandri a Date: 5/ 14/07    T ime: 10:29 a
  42    * Created  in $/Vita ls GUI 200 7/Vitals-5 -0-18/VITA LSDATAENTR Y
  43    * 
  44    * ******* **********   Version  1  ******* **********
  45    * User: V haishandri a Date: 5/ 16/06    T ime: 5:43p
  46    * Created  in $/Vita ls/VITALS- 5-0-18/Vit alsDataEnt ry
  47    * GUI v.  5.0.18 upd ates the d efault vit al type IE Ns with th e local
  48    * values.
  49    * 
  50    * ******* **********   Version  1  ******* **********
  51    * User: V haishandri a Date: 5/ 16/06    T ime: 5:33p
  52    * Created  in $/Vita ls/Vitals- 5-0-18/VIT ALS-5-0-18 /VitalsDat aEntry
  53    * 
  54    * ******* **********   Version  2  ******* **********
  55    * User: V haishandri a Date: 7/ 22/05    T ime: 3:51p
  56    * Updated  in $/Vita ls/Vitals  GUI  v 5.0 .2.1 -5.0. 3.1 - Patc h GMVR-5-7  (CASMed,  CCOW) - De lphi 6/Vit alsDataEnt ry
  57    * 
  58    * ******* **********   Version  1  ******* **********
  59    * User: V haishandri a Date: 5/ 24/05    T ime: 3:35p
  60    * Created  in $/Vita ls/Vitals  GUI  v 5.0 .2.1 -5.0. 3.1 - Patc h GMVR-5-7  (CASMed,  No CCOW) -  Delphi 6/ VitalsData Entry
  61    * 
  62    * ******* **********   Version  1  ******* **********
  63    * User: V haishandri a Date: 4/ 16/04    T ime: 4:20p
  64    * Created  in $/Vita ls/Vitals  GUI Versio n 5.0.3 (C COW, CPRS,  Delphi 7) /VITALSDAT AENTRY
  65    * 
  66    * ******* **********   Version  2  ******* **********
  67    * User: V haishandri a Date: 1/ 30/04    T ime: 4:32p
  68    * Updated  in $/Vita lsLite/Vit alsLiteDLL
  69    * 
  70    * ******* **********   Version  1  ******* **********
  71    * User: V haishandri a Date: 1/ 15/04    T ime: 3:06p
  72    * Created  in $/Vita lsLite/Vit alsLiteDLL
  73    * Vitals  Lite DLL
  74    * 
  75    * ******* **********   Version  1  ******* **********
  76    * User: V haishandri a Date: 10 /29/03   T ime: 4:15p
  77    * Created  in $/Vita ls503/Vita ls User
  78    * Version  5.0.3
  79    *
  80    * ******* **********   Version  1  ******* **********
  81    * User: V haishandri a Date: 5/ 21/03    T ime: 1:18p
  82    * Created  in $/Vita ls GUI Ver sion 5.0/V italsUserN oCCOW
  83    * Pre CCO W Version  of Vitals  User
  84    * 
  85    * ******* **********   Version  7  ******* **********
  86    * User: V haishandri a Date: 4/ 17/03    T ime: 5:02p
  87    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  88    * 
  89    * ******* **********   Version  6  ******* **********
  90    * User: V haishandri a Date: 12 /02/02   T ime: 3:00p
  91    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  92    * Vitals  Light upda tes
  93    * 
  94    * ******* **********   Version  5  ******* **********
  95    * User: V haishandri a Date: 11 /07/02   T ime: 10:33 a
  96    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  97    * Pulse O x Changes
  98    * 
  99    * ******* **********   Version  4  ******* **********
  100    * User: V haishandri a Date: 8/ 16/02    T ime: 11:17 a
  101    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  102    * v T30
  103    * 
  104    * ******* **********   Version  3  ******* **********
  105    * User: V haishandri a Date: 7/ 25/02    T ime: 2:51p
  106    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  107    *
  108    * ******* **********   Version  2  ******* **********
  109    * User: V haishandri a Date: 7/ 12/02    T ime: 5:00p
  110    * Updated  in $/Vita ls GUI Ver sion 5.0/V itals User
  111    * GUI Ver sion T28
  112    * 
  113    * ******* **********   Version  1  ******* **********
  114    * User: V haishpetit d Date: 4/ 04/02    T ime: 12:08 p
  115    * Created  in $/Vita ls GUI Ver sion 5.0/V itals User
  116    *
  117   *
  118   ========== ========== ========== ========== ========== ========== ========== ==========
  119   }
  120   interface
  121  
  122   uses
  123     Windows,
  124     Messages ,
  125     SysUtils ,
  126     Classes,
  127     Graphics ,
  128     Controls ,
  129     Forms,
  130     Dialogs,
  131     StdCtrls ,
  132     ComCtrls ,
  133     Buttons,
  134     ExtCtrls
  135     ,CheckLs t;
  136  
  137   type
  138     TfrmGMV_ SupO2 = cl ass(TForm)
  139       pnlMai n: TPanel;
  140       pnlBot tom: TPane l;
  141       btnOK:  TButton;
  142       btnCan cel: TButt on;
  143       Panel1 : TPanel;
  144       lblFlo w: TLabel;
  145       lblO2C on: TLabel ;
  146       edtFlo w: TEdit;
  147       edtO2C on: TEdit;
  148       udFlow : TUpDown;
  149       udO2:  TUpDown;
  150       lblPer cent: TLab el;
  151       lblLit Min: TLabe l;
  152       Panel2 : TPanel;
  153       pnlQua l: TPanel;
  154       Panel5 : TPanel;
  155       cbMeth od: TCombo Box;
  156       lblMet hodValue:  TLabel;
  157       proced ure udFlow ChangingEx (Sender: T Object; va r AllowCha nge: Boole an;
  158         NewV alue: Smal lint; Dire ction: TUp DownDirect ion);
  159       proced ure udO2Ch angingEx(S ender: TOb ject; var  AllowChang e: Boolean ;
  160         NewV alue: Smal lint; Dire ction: TUp DownDirect ion);
  161       proced ure edtFlo wKeyUp(Sen der: TObje ct; var Ke y: Word;
  162         Shif t: TShiftS tate);
  163       proced ure edtO2C onKeyUp(Se nder: TObj ect; var K ey: Word;
  164         Shif t: TShiftS tate);
  165       proced ure cbMeth odChange(S ender: TOb ject);
  166       proced ure FormAc tivate(Sen der: TObje ct);
  167       proced ure btnOKC lick(Sende r: TObject );
  168       proced ure edtFlo wKeyPress( Sender: TO bject; var  Key: Char );
  169       proced ure edtO2C onKeyPress (Sender: T Object; va r Key: Cha r);
  170       proced ure edtFlo wChange(Se nder: TObj ect);
  171       proced ure edtFlo wExit(Send er: TObjec t);
  172       proced ure edtO2C onChange(S ender: TOb ject);
  173       proced ure edtO2C onExit(Sen der: TObje ct);
  174     private
  175       { Priv ate declar ations }
  176     public
  177       { Publ ic declara tions }
  178       QualVa l:Integer;
  179     end;
  180  
  181   function G etSuppleme ntO2Data(v ar FlowRat e: string;  var Perce ntage: str ing; ctrl:  TControl; sQual:Stri ng): Boole an;
  182  
  183   implementa tion
  184  
  185   uses uGMV_ Common
  186   , uGMV_Uti ls, uGMV_E ngine
  187     ;
  188  
  189   {$R *.DFM}
  190  
  191   function G etSuppleme ntO2Data(v ar FlowRat e: string;  var Perce ntage: str ing; ctrl:  TControl; sQual:Stri ng): Boole an;
  192   var
  193     s:String ;
  194     sType, s Category:  String;
  195     i: INteg er;
  196     pt: TPoi nt;
  197     SL: TStr ingList;
  198   begin
  199     Result : = False;
  200     with Tfr mGMV_SupO2 .Create(Ap plication)  do
  201     try
  202       pt :=  Ctrl.Paren t.ClientTo Screen(Poi nt(Ctrl.Le ft, Ctrl.T op));
  203       Left : = pt.x;
  204       Top :=  pt.y + Ct rl.Height;
  205  
  206       edtFlo w.Text :=  FlowRate;
  207       edtO2C on.Text :=  Percentag e;
  208  
  209       sType  := getVita lTypeIEN(' PULSE OXIM ETRY');
  210       sCateg ory := get VitalCateg oryIEN('ME THOD');
  211       SL :=  getQualifi ers(sType, sCategory) ;
  212       if SL. Count > 1  then
  213         begi n
  214           if  pos('-Non e-',cbMeth od.Text) =  0 then
  215              cbMethod.I tems.Add(' -None-');  //CQ Ticke t #6942
  216           fo r i := 1 t o SL.Count  - 1 do
  217              begin
  218                s := SL[ i];
  219                cbMethod .Items.Add Object(Tit leCase(Pie ce(s,'^',  2)),
  220                  Pointe r(StrToInt Def(Piece( s,'^', 1),  0)));
  221              end;
  222         end;
  223       SL.Fre e;
  224  
  225       s := P iece(sQual ,'[',2);
  226       if pos ('  ',s)=  0 then
  227         s :=  Piece(s,' ]',1)
  228       else
  229         s :=  Piece(s,'   ',1);
  230       i := c bMethod.It ems.IndexO f(s);
  231       if i > = 0 then
  232         begi n
  233           cb Method.Ite mIndex :=  i;
  234           Qu alVal := i nteger(cbM ethod.Item s.Objects[ i]);   //A AN 11/5/20 02 initial  value add ed;
  235         end;
  236       Active Control :=  edtFlow;
  237       ShowMo dal;
  238       if Mod alResult =  mrOk then
  239         begi n
  240           Fl owRate :=  edtFlow.Te xt;
  241   //AAN 07/0 9/2002         Percen tage := ed tO2Con.tex t;
  242           Pe rcentage : = edtO2Con .text + '^ '+IntToStr (QualVal)+ '^'+cbMeth od.Text;
  243           Re sult := Tr ue;
  244         end;
  245     finally
  246       free;
  247     end;
  248   end;
  249  
  250   procedure  TfrmGMV_Su pO2.udFlow ChangingEx (Sender: T Object; va r AllowCha nge: Boole an; NewVal ue: Smalli nt; Direct ion: TUpDo wnDirectio n);
  251   var
  252     d: Doubl e;
  253     Value: s tring;
  254   begin
  255     Value :=  edtFlow.T ext;
  256     if (Valu e = '') th en
  257       VitalM ath(Value,  0, 1, vfI nit, 1)
  258     else
  259       begin
  260         case  Direction  of
  261           up dUp: Vital Math(Value , 1, 10, v fAdd, 1);
  262           up dDown: Vit alMath(Val ue, 1, 10,  vfSubtrac t, 1);
  263         end;
  264       end;
  265     try
  266       d := S trToFloat( Value);
  267       if d >  20.0 then  Value :=  '20';
  268       if d <  0.5 then  Value := ' 0.5';
  269     except
  270     end;
  271     edtFlow. Text := Va lue;
  272   end;
  273  
  274   procedure  TfrmGMV_Su pO2.udO2Ch angingEx(S ender: TOb ject; var  AllowChang e: Boolean ; NewValue : Smallint ; Directio n: TUpDown Direction) ;
  275   var
  276     d: Doubl e;
  277     Value: s tring;
  278   begin
  279     Value :=  edtO2Con. Text;
  280     if (Valu e = '') th en
  281       VitalM ath(Value,  0, 80, vf Init, 0)
  282     else
  283       begin
  284         case  Direction  of
  285           up dUp: Vital Math(Value , 1, 80, v fAdd, 0);
  286           up dDown: Vit alMath(Val ue, 1, 80,  vfSubtrac t, 0);
  287         end;
  288       end;
  289     try
  290       d := S trToFloat( Value);
  291       if d >  100.0 the n Value :=  '100';
  292       if d <  21.0 then  Value :=  '21';
  293     except
  294     end;
  295     edtO2Con .Text := V alue;
  296   end;
  297  
  298   procedure  TfrmGMV_Su pO2.edtFlo wKeyUp(Sen der: TObje ct; var Ke y: Word;
  299     Shift: T ShiftState );
  300   var
  301     tmp: boo lean;
  302   begin
  303     inherite d;
  304     if (Key  = VK_UP) t hen
  305       udFlow ChangingEx (Sender, t mp, 0, upd Up)
  306     else if  (Key = VK_ DOWN) then
  307       udFlow ChangingEx (Sender, t mp, 0, upd Down);
  308   end;
  309  
  310   procedure  TfrmGMV_Su pO2.edtO2C onKeyUp(Se nder: TObj ect; var K ey: Word;
  311     Shift: T ShiftState );
  312   var
  313     tmp: boo lean;
  314   begin
  315     inherite d;
  316     if (Key  = VK_UP) t hen
  317       udO2Ch angingEx(S ender, tmp , 0, updUp )
  318     else if  (Key = VK_ DOWN) then
  319       udO2Ch angingEx(S ender, tmp , 0, updDo wn);
  320   end;
  321  
  322   procedure  TfrmGMV_Su pO2.cbMeth odChange(S ender: TOb ject);
  323  
  324     function  getQualVa l: Integer ;
  325     begin
  326         try
  327           Re sult := in teger(cbMe thod.Items .Objects[c bMethod.It emIndex]);
  328         exce pt
  329           Re sult := -9 9;
  330         end;
  331     end;
  332     procedur e setField s(anEnable d:Boolean) ;
  333     var
  334       _Color : TColor;
  335     begin
  336       if anE nabled the n _Color : = clWindow Text
  337       else
  338         begi n
  339           _C olor := cl GrayText;
  340           //  there sho uld be no  values of  concentrat ion for Ro om Air
  341           ed tFlow.Text  := '';
  342           ed tO2Con.Tex t := '';
  343         end;
  344  
  345       edtFlo w.Enabled  := anEnabl ed;
  346       edtO2C on.Enabled  := anEnab led;
  347       udFlow .Enabled : = anEnable d;
  348       udO2.E nabled :=  anEnabled;
  349       lblFlo w.Font.Col or := _Col or;
  350       lblO2C on.Font.Co lor := _Co lor;
  351       lblLit Min.Font.C olor := _C olor;
  352       lblPer cent.Font. Color := _ Color;
  353  
  354       QualVa l := getQu alVal;
  355     end;
  356  
  357   begin
  358     if (cbMe thod.ItemI ndex = 0)   // CQ Tic ket # 6942  - Start
  359   //    or ( pos('ROOM  AIR',upper case(cbMet hod.Text)) >0)
  360     then
  361       setFie lds(False)
  362     else   / / CQ Ticke t # 6942 -  end
  363       setFie lds(True);
  364   end;
  365  
  366   procedure  TfrmGMV_Su pO2.FormAc tivate(Sen der: TObje ct);
  367   begin
  368     if (Left  + Width)  > Forms.Sc reen.Width  then
  369       Left : = Forms.Sc reen.Width  - Width;
  370     if (Top  + Height)  > Forms.Sc reen.Heigh t then
  371       Top :=  Forms.Scr een.Height  - Height  - pnlBotto m.Height d iv 2;
  372  
  373     cbMethod Change(nil );// R1413 98 -- vhai shandria 0 60921 
  374   end;
  375  
  376   procedure  TfrmGMV_Su pO2.btnOKC lick(Sende r: TObject );
  377   var
  378     s,ss: St ring;
  379     i: integ er;
  380     f: doubl e;
  381   begin
  382     try
  383       i :=0;
  384       if edt O2Con.Text  <> '' the n
  385         i :=  StrToInt( edtO2Con.T ext);
  386     except
  387       s :='I nvalid val ue for O2  concentrat ion entere d: <'+
  388           St ring(edtO2 Con.Text)+ '>'+#13+
  389           'V alid value s are inte gers from  21 to 100' +#13+#13+' Try again? ';
  390       if App lication.M essageBox( pChar(s),' Value Erro r', MB_OKC ANCEL + MB _DEFBUTTON 1) <> IDOK
  391       then
  392         Moda lResult :=  mrCancel
  393       else
  394         begi n
  395           ac tiveContro l := edtO2 Con;
  396           Mo dalResult  := mrNone;
  397         end;
  398       Exit;
  399     end;
  400     try
  401       f := 0 ;
  402       if edt Flow.Text  <> '' then
  403         f :=  StrToFloa t(edtFlow. Text);
  404     except
  405       s := ' Error valu e for the  flow rate  entered: < '+ edtFlow .Text+'>'+ #13+
  406           'V alid value s are from  0.5 to 20 '+#13+#13+ 'Try again ?';
  407       if App lication.M essageBox( PChar(s),' Value Erro r', MB_OKC ANCEL + MB _DEFBUTTON 1) <> IDOK
  408       then
  409         Moda lResult :=  mrCancel
  410       else
  411         begi n
  412           ac tiveContro l := edtFl ow;
  413           Mo dalResult  := mrNone;
  414         end;
  415       Exit;
  416     end;
  417  
  418     if edtO2 Con.Text < > '' then
  419       if (i< 21) or (i> 100) then  s := 'O2 c oncentrati on value ' +edtO2Con. Text+' is  out of ran ge'
  420       else s  := '';
  421     if edtFl ow.Text <>  '' then
  422       if (f< 0.5) or (f >20) then  ss := 'Flo w rate val ue '+edtFl ow.Text+'  is out of  range (.5- 20)'
  423       else s s := '';
  424  
  425     if (s+#1 3+ss)<>#13  then
  426       begin
  427         s :=  s+#13+ss+ #13+'Try a gain?';
  428         if A pplication .MessageBo x(PChar(s) ,'Range Er ror', MB_O KCANCEL +  MB_DEFBUTT ON1) <> ID OK
  429         then
  430           Mo dalResult  := mrCance l
  431         else
  432           be gin
  433              if (i<21)  or (i>100)  then Acti veControl  := edtO2Co n
  434              else Activ eControl : = edtFlow;
  435              ModalResul t := mrNon e;
  436           en d;
  437         Exit ;
  438       end;
  439  
  440     ModalRes ult := mrO K;
  441   end;
  442  
  443   procedure  TfrmGMV_Su pO2.edtFlo wKeyPress( Sender: TO bject; var  Key: Char );
  444   begin
  445     if pos(K ey,'-,`~!@ #$%^&*()_+ =|\/"''')  > 0 then
  446       Key :=  #0;
  447     inherite d;
  448   end;
  449  
  450   procedure  TfrmGMV_Su pO2.edtO2C onKeyPress (Sender: T Object; va r Key: Cha r);
  451   begin
  452     if pos(K ey,'-,`~!@ #$%^&*()_+ =|\/"''')  > 0 then
  453       Key :=  #0;
  454     inherite d;
  455   end;
  456  
  457   procedure  TfrmGMV_Su pO2.edtFlo wChange(Se nder: TObj ect);
  458   var
  459     d: Doubl e;
  460   begin
  461     try
  462       d := S trToFloat( edtFlow.Te xt);
  463       if d >  20.0 then
  464         begi n
  465           Sh owMessage( 'Flow rate  value '+e dtFlow.Tex t+' is out  of range  (.5-20)');
  466           ed tFlow.SelS tart := Le ngth(edtFl ow.Text)-1 ;
  467           ed tFlow.SelL ength := 1 ;
  468         end;
  469     except
  470     end;
  471   end;
  472  
  473   procedure  TfrmGMV_Su pO2.edtFlo wExit(Send er: TObjec t);
  474   var
  475     d: Doubl e;
  476   begin
  477     if edtFl ow.Text =  '' then Ex it;
  478     try
  479       d := S trToFloat( edtFlow.Te xt);
  480       if (d  > 20.0) or  (d < 0.5)  then
  481         begi n
  482           Sh owMessage( 'Flow rate  value '+e dtFlow.Tex t+' is out  of range  (.5-20)');
  483           ed tFlow.SelS tart := Le ngth(edtFl ow.Text)-1 ;
  484           ed tFlow.SelL ength := 1 ;
  485           Ac tiveContro l := edtFl ow;
  486         end;
  487     except
  488     end;
  489   end;
  490  
  491   procedure  TfrmGMV_Su pO2.edtO2C onChange(S ender: TOb ject);
  492   var
  493     d: Doubl e;
  494   begin
  495     try
  496       d := S trToFloat( edtO2Con.T ext);
  497       if d >  100.0 the n
  498         begi n
  499           Sh owMessage( 'Flow rate  value '+e dtO2Con.Te xt+' is ou t of range  (21-100)' );
  500           ed tO2Con.Sel Start := L ength(edtO 2Con.Text) -1;
  501           ed tO2Con.Sel Length :=  1;
  502         end;
  503     except
  504     end;
  505   end;
  506  
  507   procedure  TfrmGMV_Su pO2.edtO2C onExit(Sen der: TObje ct);
  508   var
  509     d: Doubl e;
  510   begin
  511     if edtO2 Con.Text =  '' then E xit;
  512     try
  513       d := S trToFloat( edtO2Con.T ext);
  514       if (d  > 100.0) o r (d < 21. 0) then
  515         begi n
  516           Sh owMessage( 'O2 concen tration va lue '+edtO 2Con.Text+ ' is out o f range (2 1-100)');
  517           ed tO2Con.Sel Start := L ength(edtO 2Con.Text) -1;
  518           ed tO2Con.Sel Length :=  1;
  519           Ac tiveContro l := edtO2 Con;
  520         end;
  521     except
  522     end;
  523   end;
  524  
  525   end.