37. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 4/16/2019 12:20:46 PM 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.

37.1 Files compared

# Location File Last Modified
1 C:\AraxisMergeCompare\Pri_un\CPRS_32_P2_PCE\OR_30_405V60_SRC\Cover Sheet oCoverSheet.pas Wed Dec 12 14:04:38 2018 UTC
2 C:\AraxisMergeCompare\Pri_re\CPRS v32 P2 PCE Standardization-redacted\CPRS_32_P2_PCE\OR_30_405V60_SRC\Cover Sheet oCoverSheet.pas Fri Apr 12 13:42:22 2019 UTC

37.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 3 990
Changed 2 4
Inserted 0 0
Removed 0 0

37.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

37.4 Active regular expressions

No regular expressions were active.

37.5 Comparison detail

  1   unit oCove rSheet;
  2   {
  3     ======== ========== ========== ========== ========== ========== ========== ========== ==
  4     *
  5     *        Applicatio n:  CPRS -  Covershee t controll er object
  6              Developer:       PII                   
  7     *        Site:          Salt L ake City I SC
  8     *        Date:          2015-1 2-04
  9     *
  10     *        Descriptio n:  Primar y (Singlet on) Covers heet Contr oller
  11     *
  12     *        Notes:
  13     *
  14     ======== ========== ========== ========== ========== ========== ========== ========== ==
  15   }
  16  
  17   interface
  18  
  19   uses
  20     Dialogs,
  21     System.C lasses,
  22     System.S ysUtils,
  23     System.G enerics.Co llections,
  24     System.T ypes,
  25     System.S trUtils,
  26     Vcl.Cont rols,
  27     Vcl.ExtC trls,
  28     Vcl.Grap hics,
  29     iGridPan elIntf,
  30     iCoverSh eetIntf;
  31  
  32   type
  33     TCoverSh eet = clas s(TInterfa cedObject,  ICoverShe et, ICPRS5 08, ICPRST ab)
  34     private
  35       fUniqu eID: strin g;
  36       fIPAdd ress: stri ng;
  37       fParam List: ICov erSheetPar amList;
  38       fContr ols: TObje ctList<TCo ntrol>;
  39       fCover SheetRows:  array of  IGridPanel Display;
  40       fFontS ize: integ er;
  41       fScree nReaderAct ive: boole an;
  42       fGridS ettings: I CoverSheet Grid;
  43  
  44       { Exte rnal event  pointers  }
  45       fOnRef reshCWAD:  TNotifyEve nt;
  46       fOnRef reshRemind ers: TNoti fyEvent;
  47  
  48       { Exte rnal Refre shCWAD eve nt support  }
  49       functi on getOnRe freshCWAD:  TNotifyEv ent;
  50       proced ure setOnR efreshCWAD (const aVa lue: TNoti fyEvent);
  51       proced ure fRefre shCWAD(Sen der: TObje ct);
  52  
  53       { Exte rnal Refre shReminder s event su pport }
  54       functi on getOnRe freshRemin ders: TNot ifyEvent;
  55       proced ure setOnR efreshRemi nders(cons t aValue:  TNotifyEve nt);
  56       proced ure fRefre shReminder s(Sender:  TObject);
  57  
  58       functi on getPara ms: ICover SheetParam List;
  59       functi on getUniq ueID: stri ng;
  60       functi on getIPAd dress: str ing;
  61       functi on getIsFi nishedLoad ing: boole an;
  62       functi on getPane lCount: in teger;
  63     protecte d
  64       { ICPR S508 }
  65       proced ure OnFocu sFirstCont rol(Sender : TObject) ; virtual;
  66       proced ure OnSetF ontSize(Se nder: TObj ect; aNewS ize: integ er); virtu al;
  67       proced ure OnSetS creenReade rStatus(Se nder: TObj ect; aActi ve: boolea n); virtua l;
  68  
  69       { ICPR STab }
  70       proced ure OnClea rPtData(Se nder: TObj ect); virt ual;
  71       proced ure OnDisp layPage(Se nder: TObj ect; aCall ingContext : integer) ; virtual;
  72       proced ure OnLoad ed(Sender:  TObject);  virtual;
  73  
  74       { ICov erSheet }
  75       proced ure OnDisp lay(Sender : TObject;  aGridPane l: TGridPa nel); virt ual; final ;
  76       proced ure OnExpa ndAllPanel s(Sender:  TObject);  virtual; f inal;
  77       proced ure OnInit CoverSheet (Sender: T Object); v irtual; fi nal;
  78       proced ure OnRefr eshPanel(S ender: TOb ject; aPan elID: inte ger); virt ual; final ;
  79       proced ure OnSwit chToPatien t(Sender:  TObject; a DFN: strin g); virtua l;
  80     public
  81       constr uctor Crea te;
  82       destru ctor Destr oy; overri de;
  83     end;
  84  
  85   implementa tion
  86  
  87   uses
  88     oCoverSh eetGrid,
  89     oCoverSh eetParam_C PRS,
  90     oCoverSh eetParam_C PRS_Active Meds,
  91     oCoverSh eetParam_C PRS_Allerg ies,
  92     oCoverSh eetParam_C PRS_Appts,
  93     oCoverSh eetParam_C PRS_Immuni zations,
  94     oCoverSh eetParam_C PRS_Labs,
  95     oCoverSh eetParam_C PRS_Postin gs,
  96     oCoverSh eetParam_C PRS_Proble mList,
  97     oCoverSh eetParam_C PRS_Remind ers,
  98     oCoverSh eetParam_C PRS_Vitals ,
  99     oCoverSh eetParam_C PRS_WH,
  100     oCoverSh eetParam_W idgetClock ,
  101     oCoverSh eetParam_W eb,
  102     oCoverSh eetParamLi st,
  103     ORFn,
  104     ORNet;
  105  
  106   { TCoverSh eet }
  107  
  108   constructo r TCoverSh eet.Create ;
  109   begin
  110     inherite d Create;
  111     TCoverSh eetParamLi st.Create. GetInterfa ce(ICoverS heetParamL ist, fPara mList);
  112     fControl s := TObje ctList<TCo ntrol>.Cre ate;
  113     fControl s.OwnsObje cts := Fal se;
  114     fUniqueI D := NewGU ID;
  115     fIPAddre ss := Dott edIPStr;
  116     fOnRefre shCWAD :=  fRefreshCW AD;
  117     fFontSiz e := 8;
  118     fScreenR eaderActiv e := False ;
  119     SetLengt h(fCoverSh eetRows, 0 );
  120     TCoverSh eetGrid.Cr eate.GetIn terface(IC overSheetG rid, fGrid Settings);
  121   end;
  122  
  123   destructor  TCoverShe et.Destroy ;
  124   begin
  125     fParamLi st := nil;
  126     fControl s.Clear;
  127     FreeAndN il(fContro ls);
  128     inherite d;
  129   end;
  130  
  131   procedure  TCoverShee t.OnClearP tData(Send er: TObjec t);
  132   var
  133     aControl : TControl ;
  134     aCPRSTab : ICPRSTab ;
  135   begin
  136     for aCon trol in fC ontrols do
  137       if Sup ports(aCon trol, ICPR STab, aCPR STab) then
  138         aCPR STab.OnCle arPtData(S ender);
  139   end;
  140  
  141   procedure  TCoverShee t.OnDispla yPage(Send er: TObjec t; aCallin gContext:  integer);
  142   begin
  143     //
  144   end;
  145  
  146   procedure  TCoverShee t.OnLoaded (Sender: T Object);
  147   begin
  148     //
  149   end;
  150  
  151   procedure  TCoverShee t.OnDispla y(Sender:  TObject; a GridPanel:  TGridPane l);
  152   var
  153     aParam:  ICoverShee tParam;
  154     aDisplay Panel: ICo verSheetDi splayPanel ;
  155     aGridPan elFrame: I GridPanelF rame;
  156     aCPRS508 : ICPRS508 ;
  157     aControl : TControl ;
  158     aIndex:  integer;
  159     aGridPan elRow: TGr idPanel;
  160     aCol: in teger;
  161     aRow: in teger;
  162   begin
  163     try
  164       fGridS ettings.Pa nelCount : = fParamLi st.Count;
  165  
  166       aGridP anel.Visib le := Fals e;
  167       aGridP anel.Align  := alNone ;
  168  
  169       { NOTE : Actual c ontrols ar e free'd a GridPanel. ControlCol lection.Cl ear }
  170       fContr ols.Clear;
  171       aGridP anel.Contr olCollecti on.Clear;
  172       aGridP anel.RowCo llection.C lear;
  173       aGridP anel.Colum nCollectio n.Clear;
  174  
  175       { Make  sure we h ave ONLY 1  column }
  176       aGridP anel.Colum nCollectio n.Add;
  177  
  178       { Make  sure we h ave enough  rows }
  179       while  aGridPanel .RowCollec tion.Count  < fGridSe ttings.Row Count do
  180         aGri dPanel.Row Collection .Add;
  181  
  182       { Buil d the rows  as plain  TGridPanel s but stor e their in terfaces i n fCoverSh eetRows }
  183       SetLen gth(fCover SheetRows,  aGridPane l.RowColle ction.Coun t);
  184       for aI ndex := 0  to aGridPa nel.RowCol lection.Co unt - 1 do
  185         begi n
  186           {  Get new TG ridPanel f or the row  in aIndex  }
  187           Ne wGridPanel (aGridPane l, 1, 1, a GridPanelR ow);
  188           aG ridPanelRo w.Name :=  Format('%s _Row_%d',  [aGridPane lRow.Class Name, aInd ex]);
  189           aG ridPanelRo w.Parent : = aGridPan el;
  190  
  191           {  Add this T GridPanel  the main G rid at Col  0, Row aI ndex }
  192           aG ridPanel.C ontrolColl ection.Add Control(aG ridPanelRo w, 0, aInd ex);
  193  
  194           {  Create new  IGridPane lDisplay f or this TG ridPanel R ow and pla ce it in f CoverSheet Rows }
  195           Ne wGridPanel Display(aG ridPanelRo w, fCoverS heetRows[a Index]);
  196         end;
  197  
  198       { Fina lly, we ca n start bu ilding and  placing t he frames  into the f CoverSheet Rows[] pan els }
  199       for aI ndex := 0  to fParamL ist.Count  - 1 do
  200         begi n
  201           aP aram := fP aramList.P aramByInde x[aIndex];
  202           aP aram.Displ ayRow := f GridSettin gs.PanelRo w[aIndex];
  203           aP aram.Displ ayColumn : = fGridSet tings.Pane lColumn[aI ndex];
  204  
  205           aC ontrol :=  aParam.New CoverSheet Control(aG ridPanel);
  206           fC ontrols.Ad d(aControl );
  207  
  208           {  Set up the  frame as  an IGridPa nelFrame }
  209           if  aControl. GetInterfa ce(IGridPa nelFrame,  aGridPanel Frame) the n
  210              begin
  211                aGridPan elFrame.Ti tle := aPa ram.Title;
  212                aGridPan elFrame.Al lowCollaps e := gpcCo lumn;
  213                aGridPan elFrame.Al lowRefresh  := True;
  214              end;
  215  
  216           {  Assign the  parameter  to the fr ame }
  217           if  Supports( aControl,  ICoverShee tDisplayPa nel, aDisp layPanel)  then
  218              aDisplayPa nel.Params  := aParam ;
  219  
  220           {  Hook up th e 508 'stu ff' }
  221           if  Supports( aControl,  ICPRS508,  aCPRS508)  then
  222              begin
  223                aCPRS508 .OnSetFont Size(Self,  fFontSize );
  224                aCPRS508 .OnSetScre enReaderSt atus(Self,  fScreenRe aderActive );
  225              end;
  226  
  227           {  Make sure  we have en ough colum ns in this  row (we a re now usi ng IGridPa nelDisplay ) }
  228           wh ile (fCove rSheetRows [aParam.Di splayRow]. ColumnCoun t - 1) < a Param.Disp layColumn  do
  229              fCoverShee tRows[aPar am.Display Row].AddCo lumn;
  230  
  231           {  Finally ad d the cont rol }
  232           fC overSheetR ows[aParam .DisplayRo w].AddCont rol(aContr ol, aParam .DisplayCo lumn, 0, a lClient);
  233         end;
  234  
  235       { We h ave a comp lete set o f frames i n the Main  TGridPane l and it's  rows!!! A lign some  stuff }
  236       try
  237         aGri dPanel.Row Collection .BeginUpda te;
  238         for  aRow := 0  to aGridPa nel.RowCol lection.Co unt - 1 do
  239           be gin
  240              aGridPanel .RowCollec tion[aRow] .SizeStyle  := ssPerc ent;
  241              aGridPanel .RowCollec tion[aRow] .Value :=  (100 / aGr idPanel.Ro wCollectio n.Count);
  242              for aCol : = 0 to fCo verSheetRo ws[aRow].C olumnCount  - 1 do
  243                begin
  244                  fCover SheetRows[ aRow].Colu mnStyle[aC ol] := ssP ercent;
  245                  fCover SheetRows[ aRow].Colu mnValue[aC ol] := (10 0 / fCover SheetRows[ aRow].Colu mnCount);
  246                end;
  247              fCoverShee tRows[aRow ].AlignGri d;
  248           en d;
  249       finall y
  250         aGri dPanel.Row Collection .EndUpdate ;
  251       end;
  252  
  253       aGridP anel.Align  := alClie nt;
  254       aGridP anel.Show;
  255       aGridP anel.Repai nt;
  256     except
  257       on e:  Exception  do
  258         rais e ECoverSh eetExcepti on.CreateF mt('ECover SheetExcep tion: Erro r: %s', [e .Message]) ;
  259     end;
  260   end;
  261  
  262   procedure  TCoverShee t.OnExpand AllPanels( Sender: TO bject);
  263   var
  264     i: integ er;
  265   begin
  266     for i :=  0 to High (fCoverShe etRows) do
  267       fCover SheetRows[ i].ExpandA llControls ;
  268   end;
  269  
  270   function T CoverSheet .getIsFini shedLoadin g: boolean ;
  271   var
  272     aControl : TControl ;
  273     aCoverSh eetDisplay Panel: ICo verSheetDi splayPanel ;
  274     aList: T StringList ;
  275   begin
  276     Result : = True;
  277     aList :=  TStringLi st.Create;
  278     try
  279       for aC ontrol in  fControls  do
  280         if S upports(aC ontrol, IC overSheetD isplayPane l, aCoverS heetDispla yPanel) th en
  281           if  not aCove rSheetDisp layPanel.I sFinishedL oading the n
  282              begin
  283                aList.Ad d(aCoverSh eetDisplay Panel.Titl e + ' not  finished') ;
  284                Result : = False;
  285              end
  286           el se
  287              aList.Add( aCoverShee tDisplayPa nel.Title  + ' finish ed');
  288     finally
  289       FreeAn dNil(aList );
  290     end;
  291   end;
  292  
  293   procedure  TCoverShee t.OnFocusF irstContro l(Sender:  TObject);
  294   var
  295     aCPRS508 : ICPRS508 ;
  296   begin
  297     if fCont rols.Count  > 0 then
  298       if Sup ports(fCon trols[0],  ICPRS508,  aCPRS508)  then
  299         aCPR S508.OnFoc usFirstCon trol(Sende r);
  300   end;
  301  
  302   function T CoverSheet .getOnRefr eshCWAD: T NotifyEven t;
  303   begin
  304     Result : = fOnRefre shCWAD;
  305   end;
  306  
  307   function T CoverSheet .getOnRefr eshReminde rs: TNotif yEvent;
  308   begin
  309     Result : = fOnRefre shReminder s;
  310   end;
  311  
  312   procedure  TCoverShee t.setOnRef reshCWAD(c onst aValu e: TNotify Event);
  313   begin
  314     if Assig ned(aValue ) then
  315       fOnRef reshCWAD : = aValue
  316     else
  317       fOnRef reshCWAD : = fRefresh CWAD;
  318   end;
  319  
  320   procedure  TCoverShee t.setOnRef reshRemind ers(const  aValue: TN otifyEvent );
  321   begin
  322     if Assig ned(aValue ) then
  323       fOnRef reshRemind ers := aVa lue
  324     else
  325       fOnRef reshRemind ers := fRe freshRemin ders;
  326   end;
  327  
  328   procedure  TCoverShee t.fRefresh CWAD(Sende r: TObject );
  329   begin
  330     // this  is only he re in case  the metho d is set n il. See th e assesor  methods
  331   end;
  332  
  333   procedure  TCoverShee t.fRefresh Reminders( Sender: TO bject);
  334   begin
  335     // this  is only he re in case  the metho d is set n il. See th e assesor  methods
  336   end;
  337  
  338   procedure  TCoverShee t.OnRefres hPanel(Sen der: TObje ct; aPanel ID: intege r);
  339   var
  340     aControl : TControl ;
  341     aCoverSh eetDisplay Panel: ICo verSheetDi splayPanel ;
  342   begin
  343     for aCon trol in fC ontrols do
  344       if Sup ports(aCon trol, ICov erSheetDis playPanel,  aCoverShe etDisplayP anel) then
  345         if a CoverSheet DisplayPan el.Params. ID = aPane lID then
  346           aC overSheetD isplayPane l.OnRefres hDisplay(S elf);
  347   end;
  348  
  349   procedure  TCoverShee t.OnSetFon tSize(Send er: TObjec t; aNewSiz e: integer );
  350   var
  351     aControl : TControl ;
  352     aCPRS508 : ICPRS508 ;
  353   begin
  354     fFontSiz e := aNewS ize;
  355     for aCon trol in fC ontrols do
  356       if Sup ports(aCon trol, ICPR S508, aCPR S508) then
  357         aCPR S508.OnSet FontSize(S elf, fFont Size);
  358   end;
  359  
  360   procedure  TCoverShee t.OnSetScr eenReaderS tatus(Send er: TObjec t; aActive : boolean) ;
  361   var
  362     aControl : TControl ;
  363     aCPRS508 : ICPRS508 ;
  364   begin
  365     fScreenR eaderActiv e := aActi ve;
  366     for aCon trol in fC ontrols do
  367       if Sup ports(aCon trol, ICPR S508, aCPR S508) then
  368         aCPR S508.OnSet ScreenRead erStatus(S elf, fScre enReaderAc tive);
  369   end;
  370  
  371   procedure  TCoverShee t.OnSwitch ToPatient( Sender: TO bject; aDF N: string) ;
  372   var
  373     aDisplay Panel: ICo verSheetDi splayPanel ;
  374     aControl : TControl ;
  375     aParam:  ICoverShee tParam;
  376     aParam_C PRS: ICove rSheetPara m_CPRS;
  377     aForegro und: strin g;
  378   begin
  379     try
  380       // Cal l the back ground job  starter a nd get tho se that ar e run in a Foreground
  381       if aDF N <> '' th en
  382         begi n
  383           Ca llVistA('O RWCV START ', [aDFN,  CoverSheet .IPAddress , CoverShe et.UniqueI D], aForeg round);
  384  
  385           fo r aParam i n fParamLi st do
  386              if Support s(aParam,  ICoverShee tParam_CPR S, aParam_ CPRS) then
  387                aParam_C PRS.LoadIn Background  := Pos(In tToStr(aPa ram_CPRS.I D), aForeg round) = 0 ;
  388  
  389           fo r aControl  in fContr ols do
  390              if Support s(aControl , ICoverSh eetDisplay Panel, aDi splayPanel ) then
  391                aDisplay Panel.OnBe ginUpdate( Self);
  392  
  393           fo r aControl  in fContr ols do
  394              if Support s(aControl , ICoverSh eetDisplay Panel, aDi splayPanel ) then
  395                aDisplay Panel.OnRe freshDispl ay(Self);
  396  
  397           fo r aControl  in fContr ols do
  398              if Support s(aControl , ICoverSh eetDisplay Panel, aDi splayPanel ) then
  399                aDisplay Panel.OnEn dUpdate(Se lf);
  400         end
  401       else {  DFN passe d in as bl ank, clear  the cover sheet }
  402         for  aControl i n fControl s do
  403           if  Supports( aControl,  ICoverShee tDisplayPa nel, aDisp layPanel)  then
  404              aDisplayPa nel.OnClea rPtData(Se lf);
  405     except
  406       on e:  Exception  do
  407         rais e ECoverSh eetSwitchP tFail.Crea te(e.Messa ge);
  408     end;
  409  
  410     OnExpand AllPanels( Self);
  411   end;
  412  
  413   function T CoverSheet .getIPAddr ess: strin g;
  414   begin
  415     Result : = fIPAddre ss;
  416   end;
  417  
  418   function T CoverSheet .getPanelC ount: inte ger;
  419   begin
  420     if Assig ned(fGridS ettings) t hen
  421       Result  := fGridS ettings.Pa nelCount
  422     else
  423       Result  := 0;
  424   end;
  425  
  426   function T CoverSheet .getParams : ICoverSh eetParamLi st;
  427   begin
  428     fParamLi st.QueryIn terface(IC overSheetP aramList,  Result);
  429   end;
  430  
  431   function T CoverSheet .getUnique ID: string ;
  432   begin
  433     Result : = fUniqueI D;
  434   end;
  435  
  436   procedure  TCoverShee t.OnInitCo verSheet(S ender: TOb ject);
  437   var
  438     aReturn:  TStringLi st;
  439     aInitStr : string;
  440     aParam:  ICoverShee tParam;
  441   begin
  442     aReturn  := TString List.Creat e;
  443     CoverShe et.Params. Clear;
  444  
  445     { Push i n the CPRS  style par ams }
  446     try
  447       try
  448         Call VistA('ORW CV1 COVERS HEET LIST' , [], aRet urn);
  449         // P roof of co ncepts!
  450           // aReturn .Insert(0,  '1001^My  Web Browse r^http://w ww. DOMAIN . EXT ^1');
  451         // a Return.Ins ert(0, '10 01^My Web  Page');
  452         // a Return.Ins ert(0, '10 00^Clock') ;
  453  
  454         for  aInitStr i n aReturn  do
  455           be gin
  456              case StrTo IntDef(Cop y(aInitStr , 1, Pos(' ^', aInitS tr) - 1),  0) of
  457                CV_CPRS_ PROB:
  458                  TCover SheetParam _CPRS_Prob lemList.Cr eate(aInit Str).GetIn terface(IC overSheetP aram, aPar am);
  459                CV_CPRS_ POST:
  460                  TCover SheetParam _CPRS_Post ings.Creat e(aInitStr ).GetInter face(ICove rSheetPara m, aParam) ;
  461                CV_CPRS_ ALLG:
  462                  TCover SheetParam _CPRS_Alle rgies.Crea te(aInitSt r).GetInte rface(ICov erSheetPar am, aParam );
  463                CV_CPRS_ MEDS:
  464                  TCover SheetParam _CPRS_Acti veMeds.Cre ate(aInitS tr).GetInt erface(ICo verSheetPa ram, aPara m);
  465                CV_CPRS_ RMND:
  466                  TCover SheetParam _CPRS_Remi nders.Crea te(aInitSt r).GetInte rface(ICov erSheetPar am, aParam );
  467                CV_CPRS_ LABS:
  468                  TCover SheetParam _CPRS_Labs .Create(aI nitStr).Ge tInterface (ICoverShe etParam, a Param);
  469                CV_CPRS_ VITL:
  470                  TCover SheetParam _CPRS_Vita ls.Create( aInitStr). GetInterfa ce(ICoverS heetParam,  aParam);
  471                CV_CPRS_ VSIT:
  472                  TCover SheetParam _CPRS_Appt s.Create(a InitStr).G etInterfac e(ICoverSh eetParam,  aParam);
  473                CV_CPRS_ IMMU:
  474                  TCover SheetParam _CPRS_Immu nizations. Create(aIn itStr).Get Interface( ICoverShee tParam, aP aram);
  475                CV_CPRS_ WVHT:
  476                  TCover SheetParam _CPRS_WH.C reate(aIni tStr).GetI nterface(I CoverSheet Param, aPa ram);
  477                CV_WDGT_ CLOCK:
  478                  TCover SheetParam _WidgetClo ck.Create( aInitStr). GetInterfa ce(ICoverS heetParam,  aParam);
  479                CV_WDGT_ MINIBROWSE R:
  480                  TCover SheetParam _Web.Creat e(aInitStr ).GetInter face(ICove rSheetPara m, aParam) ;
  481              else
  482                aParam : = nil;
  483              end;
  484  
  485              if aParam  <> nil the n
  486                CoverShe et.Params. Add(aParam );
  487           en d;
  488       except
  489         on e : Exceptio n do
  490           ra ise ECover SheetInitF ail.Create (e.Message );
  491       end;
  492     finally
  493       FreeAn dNil(aRetu rn);
  494     end;
  495   end;
  496  
  497   end.