71. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 10/18/2017 11:37:29 AM Eastern 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.

71.1 Files compared

# Location File Last Modified
1 OSCIF_CPRS v32 Phase 2 Build 2OR3.0405_August_2017.zip\OR_30_405V36_SRC.zip\XE8\Broker\Source Loginfrm.pas Wed Oct 11 20:08:08 2017 UTC
2 OSCIF_CPRS v32 Phase 2 Build 2OR3.0405_August_2017.zip\OR_30_405V36_SRC.zip\XE8\Broker\Source Loginfrm.pas Tue Oct 17 19:58:08 2017 UTC

71.2 Comparison summary

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

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

71.4 Active regular expressions

No regular expressions were active.

71.5 Comparison detail

  1   { ******** ********** ********** ********** ********** ********** ****
  2           Pa ckage: XWB  - Kernel  RPCBroker
  3           Da te Created : Sept 18,  1997 (Ver sion 1.1)
  4           Si te Name: O akland, OI  Field Off ice, Dept  of Veteran  Affairs
  5           De velopers:  PII, PII,  PII, PII
  6           De scription:  Contains  TRPCBroker  and relat ed compone nts.
  7     Unit: Lo ginfrm cod e supporti ng Login f orm.
  8           Cu rrent Rele ase: Versi on 1.1 Pat ch 65
  9   ********** ********** ********** ********** ********** ********** *** }
  10  
  11   { ******** ********** ********** ********** ********** **
  12     Changes  in v1.1.65  (HGW 11/1 7/2015) XW B*1.165
  13     1. Fixed  form wher e Port num ber was no t being di splayed pr operly (sh owed value
  14        of $I ). It is a  change in  Cache, pa rt of a Li nux fix. N ow display ing the
  15        port  number ass igned when  making th e connecti on to Vist A (in Delp hi).
  16     2. In Se tUpSignOn,  disabled  callback t o Client A gent. Auto  Sign-On i s
  17        depre cated for  2-factor a uthenticat ion, and w ill not wo rk consist ently
  18        with  IPv6 (mult iple IP ad dresses as signed to  a workstat ion).
  19  
  20     Changes  in v1.1.60  (HGW 4/15 /2015) XWB *1.1*60
  21     1. Chang ed form fo rmat to pe rmit longe r server a nd volume  names.
  22     2. Split  verifyCod e.text fro m accessCo de.text if  entered i n a single  string
  23        (acce ssCode;ver ifyCode).  This will  enable old  verify co de to be p assed to
  24        VCEdi t.pas when  changing  a verify c ode.
  25     3. Ident ified poss ible chang es needed  for next v ersion to  support Si ngle
  26        Sign- On Interna l (SSOi) u sing Ident ity and Ac cess Manag ement (IAM ) STS
  27        SAML  Token (see  procedure  TfrmSigno n.btnOkCli ck).
  28  
  29     Changes  in v1.1.50  (JLI 9/1/ 2011) XWB* 1.1*50
  30     1. None.
  31  
  32     Changes  in v1.1.47  (JLI 6/17 /2008) XWB *1.1*47
  33     1. Chang es to Logi nfrmSignon Broker to  resolve au thenticati on errors.
  34  
  35     Changes  in v1.1.11  (DCM 9/13 /1999) XWB *1.1*11
  36     1. Delet ed obsolet e code.
  37  
  38     Changes  in v1.1.4  (DCM 1/6/1 999) XWB*1 .1*4
  39     1. Added  a try-exc ept block  in SetUpSi gnOn to cl ose
  40        login  form when  the serve r job time s out.  Al so added a
  41        try-e xcept bloc k in btnOk Click to c ancel the  action if  the
  42        serve r job time s out.
  43   ********** ********** ********** ********** **********  }
  44   unit Login frm;
  45  
  46   interface           
  47  
  48   uses
  49     {System}
  50     AnsiStri ngs, Class es, SysUti ls, UIType s,
  51     {WinApi}
  52     WinTypes , WinProcs , Messages , ShellApi , Windows,
  53     {Vcl}
  54     Graphics , Controls , Forms, D ialogs, St dCtrls, Ex tCtrls, Bu ttons,
  55     {VA}
  56     XWBHash,  MFunStr,  Trpcb, Sgn onCnf, XWB ut1, frmSi gnonMessag e, XWBRich 20;
  57  
  58   type
  59     TfrmSign on = class (TForm)
  60       Panel1 : TPanel;
  61       Panel7 : TPanel;
  62       Panel8 : TPanel;
  63       Label1 : TLabel;
  64       Label2 : TLabel;
  65       Label3 : TLabel;
  66       Label4 : TLabel;
  67       Label5 : TLabel;
  68       Label6 : TLabel;
  69       Image1 : TImage;
  70       Bevel1 : TBevel;
  71       Bevel2 : TBevel;
  72       Bevel3 : TBevel;
  73       Bevel4 : TBevel;
  74       Bevel5 : TBevel;
  75       verify Code: TEdi t;
  76       access Code: TEdi t;
  77       btnOk:  TBitBtn;
  78       btnCan cel: TBitB tn;
  79       lblSer ver: TLabe l;
  80       lblVol ume: TLabe l;
  81       lblUCI : TLabel;
  82       lblPor t: TLabel;
  83       introT ext: TXWBR ichEdit;
  84       cbxCha ngeVerifyC ode: TChec kBox;
  85       RpcbiB roker: TRP CBroker;
  86       proced ure btnOkC lick(Sende r: TObject );
  87       proced ure btnCan celClick(S ender: TOb ject);
  88       proced ure FormSh ow(Sender:  TObject);
  89       proced ure FormCr eate(Sende r: TObject );
  90       proced ure FormCl ose(Sender : TObject;  var Actio n: TCloseA ction);
  91       proced ure introT extURLClic k(Sender:  TObject; U RL: String );
  92     private
  93       FChngV erify: Boo lean;      // indicat es whether  user has  requested  changing v erify code
  94       OrigHe lp : Strin g;         //Help fil ename of c alling app lication.
  95       functi on DoVerif y: Boolean ;
  96       proced ure WMSysC ommand(var  Message:  TWMSysComm and); mess age WM_SYS COMMAND;
  97     public
  98       Defaul tSignonCon figuration : TSignonV alues;
  99   end;
  100  
  101   procedure  PrepareSig nonForm(Ap pBroker: T RPCBroker) ;
  102   function   SetUpSignO n : Boolea n; overloa d;
  103  
  104   var
  105     frmSigno n: TfrmSig non;
  106     intDevic eLock: int eger;
  107     Loginfrm SignOnBrok er: TRPCBr oker;
  108  
  109   const
  110     SC_Confi gure = 1;
  111     SC_About  = 2;
  112  
  113   implementa tion
  114  
  115  
  116   uses
  117     RpcSlogi n, VCEdit,  fRPCBErrM sg, RpcCon f1, XlfSid ;
  118  
  119   var
  120     SysMenu:  HMenu;
  121  
  122   {$R *.DFM}
  123  
  124   {--------- ---------- -- TfrmSig non.Prepar eSignonFor m -------- ------
  125   Assigns a  TRPCBroker  component  to this s ession
  126   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  127   procedure  PrepareSig nonForm(Ap pBroker: T RPCBroker) ;
  128   begin
  129     Loginfrm SignonBrok er := AppB roker;
  130   end;
  131  
  132  
  133   {--------- ---------- -- TfrmSig non.SetUpS ignOn ---- ---------- ------
  134   Calls 'XUS  SIGNON SE TUP' to se t up the e nvironment  for this  session
  135   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  136   function S etUpSignOn : Boolean;
  137   begin
  138     Result : = True;        //By d efault Sig non is nee ded.
  139     if Login frmSignonB roker = ni l then Log infrmSigno nBroker :=  frmSignon .RpcbiBrok er;
  140     {SignonB roker supe rsedes Rpc biBroker}
  141     with frm Signon do
  142     begin
  143       try
  144         with  LoginfrmS ignonBroke r do
  145         begi n
  146           if  not (Logi nfrmSignon Broker.Sec urityPhras e = '') th en
  147           be gin
  148              with Param [0] do                // start B SE
  149              begin
  150                Value :=  '-35^' +  Encrypt(Lo ginfrmSign onBroker.S ecurityPhr ase);
  151                PType :=  literal;
  152              end;    //  with                 // end BSE
  153           en d
  154           el se with Pa ram[0] do
  155           be gin
  156              Ptype := l iteral;
  157              Value := E ncrypt(Get NTLogonSid );
  158           en d;
  159           Pa ram[1].Val ue := '1';      //Dis able Clien t Agent ca llback (p6 5)
  160           Pa ram[1].PTy pe := lite ral;
  161           Re moteProced ure := 'XU S SIGNON S ETUP';
  162           Ca ll;
  163         end;
  164       except
  165         on e rror: Exce ption do
  166         begi n
  167           // ShowMessag e('Excepti on: '+erro r.message) ;
  168           Ra ise;
  169           // exit;
  170         end;
  171       end; / /try
  172       if Log infrmSigno nBroker.RP CBError =  '' then
  173       begin
  174         lblS erver.Capt ion := Log infrmSigno nBroker.Re sults[0];
  175         lblV olume.Capt ion := Log infrmSigno nBroker.Re sults[1];
  176         lblU CI.Caption     := Log infrmSigno nBroker.Re sults[2];
  177         //lb lPort.Capt ion   := L oginfrmSig nonBroker. Results[3] ;  //Use l ocal infor mation ins tead of Vi stA return ed value
  178         lblP ort.Captio n   := Int ToStr(Logi nfrmSignon Broker.Lis tenerPort) ;
  179         intD eviceLock    := 0;
  180         if L oginfrmSig nonBroker. Results.Co unt > 5 th en    //Se rver sent  single sig non info.
  181           if  LoginfrmS ignonBroke r.Results[ 5] = '1' t hen   //Si gnon not n eeded
  182              Result :=  False
  183           el se
  184              Result :=  True;
  185         Logi nfrmSignon Broker.Log in.IsProdu ctionAccou nt := Fals e;
  186         Logi nfrmSignon Broker.Log in.DomainN ame := '';
  187         if L oginfrmSig nonBroker. Results.Co unt > 7 th en
  188         begi n
  189           Lo ginfrmSign onBroker.L ogin.Domai nName := L oginfrmSig nonBroker. Results[6] ;
  190           if  LoginfrmS ignonBroke r.Results[ 7] = '1' t hen
  191              LoginfrmSi gnonBroker .Login.IsP roductionA ccount :=  True;
  192         end;
  193       end;
  194     end;
  195   end;
  196  
  197  
  198   {--------- ---------- -- TfrmSig non.btnOkC lick ----- ---------- ------
  199   This gets  called whe n user pre sses OK bu tton on th e login fo rm.
  200   Access and  verify co des are tr ansmitted  as access; verify to  the server .
  201   Server res ponds with  a multi-p urpose arr ay where e ach node h as some
  202   special me aning, whi ch may cha nge period ically and  should be  revised.
  203   SignonBrok er.Results [0] -  DUZ  (0 if uns uccessful  signon)
  204   SignonBrok er.Results [1] -  0=O K  1=devic e lock (to o many bad  tries)
  205   SignonBrok er.Results [2] -  0=v erify does n't need t o be chang ed
  206                                1=v erify need s changing
  207   SignonBrok er.Results [3] -  mes sage (i.e.  signon in hibited, e tc.)
  208   SignonBrok er.Results [4] -  res erved
  209   SignonBrok er.Results [5] -  num ber of lin es in gree ting messa ge
  210                                (cu rrently ha rd set to  0) to supp ress msg d isplay
  211   SignonBrok er.Results [6-n] - gr eeting mes sage
  212   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  213   procedure  TfrmSignon .btnOkClic k(Sender:  TObject);
  214   var
  215     I: integ er;
  216     EntryStr ing: TStri ngList;         //p60
  217   begin
  218     EntryStr ing := TSt ringList.C reate;   / /p60
  219     EntryStr ing.Delimi ter := ';' ;        / /p60
  220     frmSigno n.Tag := 0 ;           {initiali ze signon  flag}
  221     try    / /P4
  222     with Log infrmSigno nBroker do
  223     begin
  224       with P aram[0] do
  225       begin
  226         //p6 0 Split ve rifyCode.t ext from a ccessCode. text if en tered in a  single st ring (acce ssCode;ver ifyCode)
  227         if v erifyCode. text = ''  then
  228         begi n
  229           En tryString. DelimitedT ext := acc essCode.Te xt;
  230           ac cessCode.t ext := Ent ryString[0 ];
  231           ve rifyCode.t ext := Ent ryString[1 ];
  232         end;
  233         Valu e := Encry pt(accessC ode.text +  ';' + ver ifyCode.te xt);
  234         PTyp e := liter al;
  235       end;
  236       Remote Procedure  := 'XUS AV  CODE';
  237       Call;
  238       {Devic e is locke d -- too m any failur es}
  239       if Res ults[1] =  '1' then
  240       begin
  241         RPCB ShowErrMsg (Results[3 ]);
  242         Clos e;
  243       end
  244       {Verif y code mus t change}
  245       else i f Results[ 2] = '1' t hen
  246       begin
  247         Mess ageDlg('Yo u must cha nge your V ERIFY CODE  at this t ime.',
  248                       m tWarning,  [mbOK], 0) ;          //Notify t hat VC mus t change.
  249         if D oVerify th en
  250           fr mSignon.Ta g := 1;                                  // VC changed  -> OK
  251         Clos e;
  252           {N ote: if VC  change ne cessary an d it wasn' t made,
  253                   Tag r emains 0 m eaning uns uccessful  signon.}
  254       end
  255       {Signo n failed f or some ot her reason }
  256       else i f Results[ 0] = '0' t hen
  257       begin
  258         acce ssCode.tex t := '';
  259         veri fyCode.tex t := '';
  260         RPCB ShowErrMsg (Results[3 ]);
  261         acce ssCode.Set Focus;                           //Try agai n.
  262       end
  263       {Signo n succeede d.}
  264       else
  265       begin
  266         frmS ignon.Tag  := 1;    { set flag t hat signon  was good}
  267              {display a ny server  greeting m essages}
  268         if c bxChangeVe rifyCode.C hecked the n
  269         begi n
  270           fr mSignon.En abled := F alse;                               //p65
  271           Do Verify;
  272           fr mSignon.En abled := T rue;                                //p65
  273         end;
  274         if R esults.Cou nt > 5 the n
  275         begi n
  276           if  Results[5 ] <> '0' t hen
  277           be gin
  278              frmSignon. Enabled :=  False;                               //p65
  279              frmSignonM sg := Tfrm SignonMsg. Create(Sel f);
  280              frmSignonM sg.RPCbiBr oker := Lo ginfrmSign onBroker;
  281              try
  282                with frm SignonMsg  do
  283                begin
  284                  mmoMsg .Lines.Cle ar;
  285                  for I  := 1 to St rToInt(Res ults[5]) d o
  286                    mmoM sg.Lines.A dd(Results [5+I]);
  287                  ShowAp plicationA ndFocusOK( Applicatio n);
  288                  //Show Modal;                                            //Ca uses memor y error
  289                end;
  290              finally
  291                frmSigno nMsg.Free;
  292                frmSigno n.Enabled  := True;                               //p6 5
  293              end;
  294           en d;
  295         end;
  296         Clos e;
  297       end;
  298      end;
  299     except                     //P 4
  300       btnCan celClick(s elf);  //P 4
  301     end;                       //P 4
  302   end;
  303  
  304  
  305   {--------- ---------- -- TfrmSig non.btnCan celClick - ---------- ------
  306   Implement  Cancel but ton
  307   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  308   procedure  TfrmSignon .btnCancel Click(Send er: TObjec t);
  309   begin
  310     Loginfrm SignOnBrok er.Login.E rrorText : = 'User Ca ncelled Lo gin Proces s';
  311     Close;
  312   end;
  313  
  314  
  315   {--------- ---------- -- TfrmSig non.FormSh ow ------- ---------- ------
  316   Show Login frm Form
  317   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  318   procedure  TfrmSignon .FormShow( Sender: TO bject);
  319   var
  320     Str: Str ing;
  321   begin
  322     Str := ' RPCBroker' ;
  323     {add Con figure...  to system  menu}
  324     SysMenu  := GetSyst emMenu(Han dle, False );
  325     AppendMe nu(SysMenu , MF_Enabl ed + MF_St ring + MF_ Unchecked,  SC_Config ure,
  326                 '&Prope rties...') ;
  327     AppendMe nu(SysMenu , MF_Enabl ed + MF_St ring + MF_ Unchecked,  SC_About, PChar('&Ab out '+Str) );
  328     with Log infrmSigno nBroker do
  329     begin
  330       Remote Procedure  := 'XUS IN TRO MSG';
  331       lstCal l(introTex t.Lines);
  332     end;
  333     OrigHelp  := Applic ation.Help File;              //  Save orig inal helpf ile.
  334     Applicat ion.HelpFi le := Read RegData(HK LM, REG_BR OKER, 'Bro kerDr') +
  335                                '\c lagent.hlp ';      //  Identify  ConnectTo  helpfile.
  336   end;
  337  
  338  
  339   {--------- ---------- -- TfrmSig non.FormCr eate ----- ---------- ------
  340   Instantiat e Loginfrm  Form
  341   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  342   procedure  TfrmSignon .FormCreat e(Sender:  TObject);
  343   var
  344     SignonCo nfiguratio n: TSignon Configurat ion;
  345   begin
  346     if (Pos( 'LARGE',Up perCase(Re adRegDataD efault(HKC U, 'Contro l Panel\Ap pearance',  'Current' ,''))) > 0 ) or
  347        (Scre en.Width <  800) then
  348     begin
  349       Window State := w sMaximized ;
  350       with S creen do
  351       begin
  352         if W idth < 700  then               / / 640
  353           In troText.Fo nt.Size :=  9
  354         else  if Width  < 750 then          / / 720
  355           In troText.Fo nt.Size :=  10
  356         else  if Width  < 900 then          / / 800
  357           In troText.Fo nt.Size :=  11
  358         else  if Width  < 1100 the n        / / 1024
  359           In troText.Fo nt.Size :=  15
  360         else  if Width  < 1200 the n        / / 1152
  361           In troText.Fo nt.Size :=  16
  362         else  if Width  < 1900 the n
  363           In troText.Fo nt.Size :=  19      / / 1280
  364         else
  365           In troText.Fo nt.Size :=  28;     / / 1920
  366       end;     // with
  367     end;
  368     FormStyl e := fsSta yOnTop;    // make fo rm stay on  top of ot hers so it  can be fo und
  369     {adjust  appearance  per user' s preferen ces}
  370     SignonCo nfiguratio n := TSign onConfigur ation.Crea te;
  371     try
  372       Defaul tSignonCon figuration  := TSignO nValues.Cr eate;
  373       Defaul tSignonCon figuration .BackColor  := IntroT ext.Color;
  374       Defaul tSignonCon figuration .Height :=  Height;
  375       Defaul tSignonCon figuration .Width :=  Width;
  376       Defaul tSignonCon figuration .Position  := '0';
  377       Defaul tSignonCon figuration .Size := ' 0';
  378       Defaul tSignonCon figuration .Left := L eft;
  379       Defaul tSignonCon figuration .Top := To p;
  380       Defaul tSignonCon figuration .Font := I ntroText.F ont;
  381       Defaul tSignonCon figuration .TextColor  := IntroT ext.Font.C olor;
  382       Defaul tSignonCon figuration .FontStyle s := Intro Text.Font. Style;
  383       Signon Defaults.S etEqual(De faultSigno nConfigura tion);
  384       Signon Configurat ion.ReadRe gistrySett ings;
  385       if Ini tialValues .Size = '0 ' then
  386       begin   {restore  defaults}
  387         Widt h:= Defaul tSignonCon figuration .Width;
  388         Heig ht := Defa ultSignonC onfigurati on.Height;
  389       end
  390       else
  391       begin
  392         try
  393           Po sition :=  poDesigned ;
  394           Wi dth := Str ToInt(Piec e(strSize, U,2));
  395           He ight := St rToInt(Pie ce(strSize ,U,3));
  396         exce pt
  397           Wi dth:= Defa ultSignonC onfigurati on.Width;
  398           He ight := De faultSigno nConfigura tion.Heigh t;
  399         end;
  400       end;
  401       if Ini tialValues .Position  = '0' then  {restore  defaults}
  402         Posi tion := po ScreenCent er
  403       else
  404       begin
  405         try
  406           To p:= StrToI nt(Piece(s trPosition ,U,2));
  407           Le ft := StrT oInt(Piece (strPositi on,U,3));
  408         exce pt
  409           Po sition :=  poScreenCe nter
  410         end;
  411       end;
  412       if Ini tialValues .BackColor  <> 0 then
  413         intr oText.Colo r := Initi alValues.B ackColor
  414       else
  415         intr oText.Colo r := clWin dow;
  416       introT ext.Font : = InitialV alues.Font ;
  417     finally
  418       Signon Configurat ion.Free;
  419     end;
  420     FChngVer ify := Fal se;
  421   end;
  422  
  423  
  424   {--------- ---------- -- TfrmSig non.WMSysC ommand --- ---------- ------
  425   'Configure ' or 'Abou t' popup b ox (system  commands)
  426   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  427   procedure  TfrmSignon .WMSysComm and(var Me ssage: TWM SysCommand );
  428   var
  429     Str: Str ing;
  430     SignonCo nfiguratio n: TSignon Configurat ion;
  431     frmErrMs g: TfrmErr Msg;
  432   begin
  433     if Messa ge.CmdType  = SC_Conf igure then
  434     begin
  435       Signon Configurat ion := TSi gnonConfig uration.Cr eate;
  436       try
  437         Show Applicatio nAndFocusO K(Applicat ion);
  438         Sign onConfigur ation.Show Modal;
  439       finall y
  440         Sign onConfigur ation.Free ;
  441         Self .WindowSta te := wsNo rmal;
  442       end;
  443     end
  444     else if  Message.Cm dType = SC _About the n
  445     begin
  446       frmErr Msg := Tfr mErrMsg.Cr eate(Appli cation);
  447       try
  448         frmE rrMsg.Capt ion := 'Ab out RPCBro ker';
  449         Str  := 'RPCBro ker Versio n is '+Rpc biBroker.B rokerVersi on;
  450         frmE rrMsg.mmoE rrorMessag e.Lines.Ad d(Str);
  451         Show Applicatio nAndFocusO K(Applicat ion);
  452         frmE rrMsg.Show Modal;
  453       finall y
  454         frmE rrMsg.Free ;
  455       end;
  456     end
  457     else
  458       inheri ted;
  459   end;
  460  
  461  
  462   {--------- ---------- -- TfrmSig non.FormCl ose ------ ---------- ------
  463   Close Logi nfrm Form
  464   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  465   procedure  TfrmSignon .FormClose (Sender: T Object; va r Action:  TCloseActi on);
  466   begin
  467     if Piece (strSize,U ,1) = '2'  then
  468     begin
  469       strSiz e := '2^'+ IntToStr(W idth)+ U +  IntToStr( Height);
  470       WriteR egData(HKC U, REG_SIG NON, 'Sign onSiz', st rSize);
  471     end;
  472  
  473     if Piece (strPositi on,U,1) =  '2' then
  474     begin
  475       strPos ition := ' 2^'+IntToS tr(Top)+ U  + IntToSt r(Left);
  476       WriteR egData(HKC U, REG_SIG NON, 'Sign onPos', st rPosition) ;
  477     end;
  478     Applicat ion.HelpFi le := Orig Help;  //  Restore he lpfile.
  479   end;
  480  
  481  
  482   {--------- ---------- -- TfrmSig non.introT extURLClic k -------- ------
  483   Implement  'click' on  a URL in  the introT ext box
  484   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  485   procedure  TfrmSignon .introText URLClick(S ender: TOb ject; URL:  String);
  486   begin
  487     //URL :=  TIdURI.UR LEncode(UR L);          //Indy I dURI unit
  488     ShellExe cute(Appli cation.Han dle,'open' ,PChar(URL ),nil,nil, SW_NORMAL) ;
  489   end;
  490  
  491  
  492   {--------- ---------- -- TfrmSig non.DoVeri fy ------- ---------- ------
  493   Invoke VCE dit form i f Change V erify Code  box is ch ecked
  494   ---------- ---------- ---------- ---------- ---------- ---------- ------}
  495   function T frmSignon. DoVerify:  Boolean;
  496   var
  497     VCEdit1:  TVCEdit;
  498   begin
  499     VCEdit1  := TVCEdit .Create(Se lf);
  500     try
  501       VCEdit 1.RPCBroke r := Login frmSignonB roker;
  502       Result  := VCEdit 1.ChangeVC KnowOldVC( verifyCode .Text);  / /invoke VC Edit form.
  503     finally
  504       VCEdit 1.Free;
  505     end;
  506   end;
  507  
  508   end.