home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 7 / POWERCD7.ISO / prgmming / tcyber25 / cybase / pxedit.pas < prev   
Pascal/Delphi Source File  |  1994-10-19  |  54KB  |  492 lines

  1. {
  2. Turbo Vision CyberTools 2.5
  3. (C) 1994 Steve Goldsmith
  4. All Rights Reserved
  5.  
  6. * * *  I M P O R T A N T  * * *
  7.  
  8. Remember to add TCursor.getTableHandle method to the Data Base Framework in
  9. \BP\PXENGINE\PASCAL\SOURCE\OOPXENG.PAS.  This allows PX Edit access to
  10. TCursor's private table handle tabH.  PX Edit can then search on the primary
  11. index regardless of what index the table is opened on.
  12.  
  13. Search OOPXENG.PAS for 'searchIndex'. Right after:
  14.  
  15.   function searchIndex(keyRec: PRecord; mode: PXSearchMode;
  16.     fldCnt: Integer): Retcode; virtual;
  17.  
  18. ADD:
  19.  
  20.   function getTableHandle : TableHandle;
  21.  
  22.  
  23. Search OOPXENG.PAS for 'TRecord methods'.  Right before:
  24.  
  25. *************************************************************************
  26.                           TRecord methods
  27. **************************************************************************
  28.  
  29. ADD:
  30.  
  31. function TCursor.getTableHandle : TableHandle;
  32.  
  33. begin
  34.   getTableHandle := tabH
  35. end;
  36. }
  37.  
  38. UNIT PXEDIT ;{$I APP.INC} {$X+} INTERFACE USES {$IFDEF DPMI} WINPROCS , {$ENDIF} DOS , PXENGINE , OOPXENG , DRIVERS ,
  39. OBJECTS , VIEWS , VALIDATE , DIALOGS , MSGBOX , EDITORS , APP , MEMORY , COMMDLGS , TVSTR ;CONST PXEPRIMARY =100 ;
  40. PXECOMPOSITE =101 ;PXEMAXRECBUFS =43 ;PXERECBUFDIFF =5 ;PXELINEOFS =3 ;PXEMAXUMEMOSIZE =65520 ;PXEFIXEDMAX =1E13 ;
  41. PXESHARENAME ='SHARE.TST';TYPE PPXEFIELDDESC =^TPXEFIELDDESC ;TPXEFIELDDESC =OBJECT (TOBJECT)FDISPLEN :INTEGER ;
  42. FDESC :PFIELDDESC ;END ;PPXEFIELD =^TPXEFIELD ;TPXEFIELD =OBJECT (TOBJECT)DISPSTR :PSTRING ;END ;
  43. PPXERECORD =^TPXERECORD ;TPXERECORD =OBJECT (TOBJECT)RECNUM :RECORDNUMBER ;FLDCOLL :PCOLLECTION ;END ;
  44. TPXEENGINECFGREC =RECORD ENGTYP , DOSSHR , WINSHR , CRTFMT , LCKMOD , SRTORD :INTEGER ;SWPSIZ , TABHAN , RECHAN ,
  45. LCKHAN , FILHAN :STRING [ 6 ] ;NETPAT :PATHSTR ;USRNAM :STRING [ MAXNAMELEN ] ;CLINAM :STRING [ MAXNAMELEN ] ;END ;
  46. PPXEENGINECFG =^TPXEENGINECFG ;TPXEENGINECFG =OBJECT (TDIALOG)CONSTRUCTOR INIT ;END ;PPXEMEMOREC =^TPXEMEMOREC ;
  47. TPXEMEMOREC =RECORD LEN :WORD ;DATA :ARRAY [ 0 .. PXEMAXUMEMOSIZE - 1 ]  OF CHAR ;END ;PPXEMEMOEDIT =^TPXEMEMOEDIT ;
  48. TPXEMEMOEDIT =OBJECT (TDIALOG)MEMO :PMEMO ;CONSTRUCTOR INIT ;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;
  49. TPXELISTBOXREC =RECORD LIST :PCOLLECTION ;SELECTION :WORD ;END ;PPXEFIELDLISTBOX =^TPXEFIELDLISTBOX ;
  50. TPXEFIELDLISTBOX =OBJECT (TLISTBOX)FUNCTION GETTEXT (ITEM :INTEGER ;MAXLEN :INTEGER ):STRING ;VIRTUAL;
  51. PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;TPXECREATEDLGREC =RECORD NAME :STRING [ 25 ] ;LEN :STRING [ 3 ] ;
  52. TYP :INTEGER ;FIELDS :TPXELISTBOXREC ;END ;PPXECREATEDIALOG =^TPXECREATEDIALOG ;
  53. TPXECREATEDIALOG =OBJECT (TDIALOG)TABLENAM :PATHSTR ;FIELDPTR :PCOLLECTION ;TYPEBUTTONS :PMSGBUTTONS ;NAMELINE ,
  54. LENGTHLINE :PINPUTLINE ;FIELDBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR ;FLDCOLL :PCOLLECTION );
  55. PROCEDURE SETDATA (VAR REC );VIRTUAL;PROCEDURE ADDFIELD ;PROCEDURE DELETEFIELD ;PROCEDURE DEFTYPELEN ;
  56. PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;TPXEINDEXDLGREC =RECORD FIELDS :TPXELISTBOXREC ;
  57. KEY :TPXELISTBOXREC ;INDEX , CASESENS :INTEGER ;FLDNAME :STRING [ 25 ] ;END ;PPXEINDEXDIALOG =^TPXEINDEXDIALOG ;
  58. TPXEINDEXDIALOG =OBJECT (TDIALOG)FIELDPTR , KEYPTR :PCOLLECTION ;NAMELINE :PINPUTLINE ;FIELDBOX ,
  59. KEYBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR );PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;
  60. TPXEKEYDLGREC =RECORD FIELDS :TPXELISTBOXREC ;END ;PPXEKEYDIALOG =^TPXEKEYDIALOG ;
  61. TPXEKEYDIALOG =OBJECT (TDIALOG)FIELDPTR :PCOLLECTION ;FIELDBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR );
  62. PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;PPXETABLELINE =^TPXETABLELINE ;
  63. TPXETABLELINE =OBJECT (TINPUTLINE)FIELDSTR :STRING ;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;END ;
  64. PPXETABLEVIEW =^TPXETABLEVIEW ;TPXETABLEVIEW =OBJECT (TVIEW)FIELDCNT , PRIFIELDCNT , RECBUFS :INTEGER ;
  65. TABLENAM :PATHSTR ;INDEXNUMBER :FIELDNUMBER ;EDITLOCKHAN :LOCKHANDLE ;EDITLOCKRECNUM :RECORDNUMBER ;
  66. TABLEHAN :TABLEHANDLE ;ENGINEPTR :PENGINE ;DATABASEPTR :PDATABASE ;CURSORPTR :PCURSOR ;FIELDDESCCOLL ,
  67. RECORDCOLL :PCOLLECTION ;HSCROLLBAR :PSCROLLBAR ;TABLELINE :PPXETABLELINE ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;
  68. AHSCROLLBAR :PSCROLLBAR ;TBLNAME :PATHSTR ;ENGPTR :PENGINE ;DBPTR :PDATABASE ;CURPTR :PCURSOR ;IDXNUM :FIELDNUMBER );
  69. DESTRUCTOR DONE ;VIRTUAL;PROCEDURE SETLINEVAILDATOR (FTYP :PXFIELDTYPE );VIRTUAL;PROCEDURE DRAWLINE ;VIRTUAL;
  70. PROCEDURE DRAW ;VIRTUAL;FUNCTION ERRORBOX (ERRCODE :INTEGER ):BOOLEAN ;VIRTUAL;PROCEDURE NEWFIELDCOLL ;VIRTUAL;
  71. PROCEDURE NEWRECCOLL ;VIRTUAL;PROCEDURE XLATEFIELD (RECDATA :PPXERECORD ;PFLD :PPXEFIELDDESC );VIRTUAL;
  72. PROCEDURE READFIELDS ;VIRTUAL;FUNCTION SEARCHKEY (RECDATA :PPXERECORD ;SMODE :INTEGER ):RETCODE ;VIRTUAL;
  73. FUNCTION SEARCHSECKEY (RECDATA :PPXERECORD ;SMODE :INTEGER ):RETCODE ;VIRTUAL;PROCEDURE REFRESH ;VIRTUAL;
  74. FUNCTION GOTOHOME :RETCODE ;VIRTUAL;FUNCTION GOTOLAST :RETCODE ;VIRTUAL;FUNCTION DOWNREAD :RETCODE ;VIRTUAL;
  75. FUNCTION UPREAD :RETCODE ;VIRTUAL;FUNCTION PAGEDOWNREAD :RETCODE ;VIRTUAL;FUNCTION PAGEUPREAD :RETCODE ;VIRTUAL;
  76. FUNCTION HOMEREAD :RETCODE ;VIRTUAL;FUNCTION ENDREAD :RETCODE ;VIRTUAL;FUNCTION LOCKREC (RECDATA :PPXERECORD ):RETCODE ;
  77. VIRTUAL;FUNCTION UNLOCKREC :RETCODE ;VIRTUAL;FUNCTION LOCKUPDATE :RETCODE ;VIRTUAL;FUNCTION WRITEFIELD :RETCODE ;
  78. VIRTUAL;FUNCTION BLOBMEMOEDIT :RETCODE ;VIRTUAL;FUNCTION BLOBEDIT :RETCODE ;VIRTUAL;FUNCTION DELETEREC :RETCODE ;
  79. VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;FUNCTION VALID (COMMAND :WORD ):BOOLEAN ;VIRTUAL;END ;
  80. PPXETABLEWIN =^TPXETABLEWIN ;TPXETABLEWIN =OBJECT (TDIALOG)TABLEVIEW :PPXETABLEVIEW ;CONSTRUCTOR INIT (TBLNAME :PATHSTR ;
  81. ENGPTR :PENGINE ;DBPTR :PDATABASE ;CURPTR :PCURSOR ;IDXNUM :FIELDNUMBER );PROCEDURE SIZELIMITS (VAR MIN ,MAX:TPOINT );
  82. VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;
  83. FUNCTION VALID (COMMAND :WORD ):BOOLEAN ;VIRTUAL;END ;CONST PXEBLOBNAMES :ARRAY [ 0 .. 4 ]  OF STRING [ 17 ]
  84. =('<BLOB Memo>', '<BLOB Binary>', '<BLOB Fmt Memo>', '<BLOB OLE Object>', '<BLOB Graphic>');CMFIELDADD =65300 ;
  85. CMFIELDDELETE =65301 ;CMFIELDEDIT =65302 ;CMFIELDENTER =65303 ;CMFIELDEXIT =65304 ;CMVIDEOCHANGE =65305 ;PXEEDITCMDS =[
  86. CMCOPY , CMPASTE ] ;FUNCTION SHAREINSTALLED :BOOLEAN ;FUNCTION GETFIELDDESC (FILENAME :PATHSTR ;DATAB :PDATABASE ;
  87. VAR FLDCOLL :PCOLLECTION ):RETCODE ;FUNCTION GETKEYFILES (TBLNAME :PATHSTR ):PSTRINGCOLLECTION ;FUNCTION GETKEYFIELDDESC
  88. (FILENAME :PATHSTR ;DATAB :PDATABASE ;VAR FLDCOLL :PCOLLECTION ):RETCODE ;PROCEDURE ENGCFGTODLGCFG (ENGCFG :TENV ;
  89. VAR DLGCFG :TPXEENGINECFGREC );PROCEDURE DLGCFGTOENGCFG (DLGCFG :TPXEENGINECFGREC ;VAR ENGCFG :TENV );
  90. IMPLEMENTATION FUNCTION SHAREINSTALLED :BOOLEAN ;VAR OIl0:FILE  OF WORD;O1Ol110OOOOO:WORD;OI0l0I10Oll1:BYTE;
  91. BEGIN OI0l0I10Oll1 := 1 ;ASSIGN (OIl0 , PXESHARENAME );{$I-}REWRITE (OIl0 );{$I+}IF IORESULT =0 THEN BEGIN {$I-}WRITE
  92. (OIl0 , O1Ol110OOOOO );{$I+}IF IORESULT =0 THEN BEGIN ASM {} MOV BX , FILEREC( OIl0) . HANDLE{} MOV CX , 0000h {}
  93. MOV DX , 0000h {} MOV SI , 0000h {} MOV DI , 0001h {} MOV AL , 00h {} MOV AH , 5ch {} {$IFDEF DPMI} {} CALL DOS3CALL{}
  94. {$ELSE} {} INT 21h {} {$ENDIF} {} JC @lockerror {} DEC OI0l0I10Oll1{} @lockerror : {} END;SHAREINSTALLED := (OI0l0I10Oll1
  95. <> 1 );{$I-}CLOSE (OIl0 );{$I+}IF IORESULT =0 THEN {$I-}ERASE (OIl0 ){$I+}END END END ;FUNCTION GETFIELDDESC
  96. (FILENAME:PATHSTR;DATAB:PDATABASE;VAR FLDCOLL:PCOLLECTION):RETCODE ;VAR OIlO,OIOIllO0I1I:INTEGER;
  97. O10OO1000O0OI:PFIELDDESC;OOIOOOlO11Il:PCURSOR;BEGIN OOIOOOlO11Il := NEW (PCURSOR , INITANDOPEN (DATAB , FILENAME , 0 ,
  98. TRUE ));IF OOIOOOlO11Il ^. LASTERROR =PXSUCCESS THEN BEGIN OIOIllO0I1I := OOIOOOlO11Il ^. GENERICREC ^. GETFIELDCOUNT ;
  99. FLDCOLL := NEW (PCOLLECTION , INIT (OIOIllO0I1I , 0 ));FOR OIlO := 1 TO OIOIllO0I1I  DO BEGIN O10OO1000O0OI := NEW
  100. (PFIELDDESC , INIT );OOIOOOlO11Il ^. GENERICREC ^. GETFIELDDESC (OIlO , O10OO1000O0OI );FLDCOLL ^. INSERT (O10OO1000O0OI
  101. )END END ;GETFIELDDESC := OOIOOOlO11Il ^. LASTERROR ;DISPOSE (OOIOOOlO11Il , DONE )END ;FUNCTION GETKEYFILES
  102. (TBLNAME:PATHSTR):PSTRINGCOLLECTION ;VAR OOIIO0OO1l1O:SEARCHREC;O1OO0000l0O1:PSTRINGCOLLECTION;BEGIN O1OO0000l0O1 := NEW
  103. (PSTRINGCOLLECTION , INIT (10 , 10 ));FINDFIRST (ADDEXTSTR (TBLNAME , 'PX'), ANYFILE , OOIIO0OO1l1O );IF DOSERROR =0 THEN
  104. BEGIN O1OO0000l0O1 ^. INSERT (NEWSTR (OOIIO0OO1l1O.NAME ));FINDFIRST (ADDEXTSTR (TBLNAME , 'X??'), ANYFILE , OOIIO0OO1l1O
  105. );WHILE DOSERROR =0  DO BEGIN O1OO0000l0O1 ^. INSERT (NEWSTR (OOIIO0OO1l1O.NAME ));FINDNEXT (OOIIO0OO1l1O )END END ;IF
  106. O1OO0000l0O1 ^. COUNT =0 THEN BEGIN DISPOSE (O1OO0000l0O1 , DONE );O1OO0000l0O1 := NIL END ;GETKEYFILES := O1OO0000l0O1
  107. END ;FUNCTION GETKEYFIELDDESC (FILENAME:PATHSTR;DATAB:PDATABASE;VAR FLDCOLL:PCOLLECTION):RETCODE ;
  108. VAR OOO0lI0l0l01:INTEGER;OIOO:DIRSTR;OO0O:NAMESTR;OIOl:EXTSTR;OOlOO0l1l0Ol:PATHSTR;O1OO1I0IlOll:PSTRINGCOLLECTION;
  109. O101O1IOOOO00:FIELDHANDLEARRAY;O10OO1000O0OI:PFIELDDESC;OOIOOOlO11Il:PCURSOR;PROCEDURE OOII11011l1l
  110. (OI1000l1II00:POINTER);FAR ;BEGIN O10OO1000O0OI := NEW (PFIELDDESC , INIT );PXKEYQUERY (PSTRING (OI1000l1II00 )^,
  111. O10OO1000O0OI ^. FLDNAME , O10OO1000O0OI ^. FLDLEN , OOO0lI0l0l01 , O101O1IOOOO00 , O10OO1000O0OI ^. FLDNUM );IF
  112. O10OO1000O0OI ^. FLDNUM =0 THEN BEGIN O10OO1000O0OI ^. FLDNAME := 'Primary';BYTE (O10OO1000O0OI ^. FLDTYPE ):= PXEPRIMARY
  113. ;O10OO1000O0OI ^. FLDLEN := DATAB ^. GETNUMPFIELDS (OO0O )END ELSE IF O10OO1000O0OI ^. FLDNUM < 256 THEN OOIOOOlO11Il ^.
  114. GENERICREC ^. GETFIELDDESC (O10OO1000O0OI ^. FLDNUM , O10OO1000O0OI )ELSE BYTE (O10OO1000O0OI ^. FLDTYPE ):= PXECOMPOSITE
  115. ;FLDCOLL ^. INSERT (O10OO1000O0OI )END ;BEGIN FLDCOLL := NIL ;FSPLIT (FILENAME , OIOO , OO0O , OIOl );IF OIOO [ BYTE
  116. (OIOO [ 0 ] )] ='\'THEN DEC (BYTE (OIOO [ 0 ] ));GETDIR (0 , OOlOO0l1l0Ol );{$I-}CHDIR (OIOO );{$I+}IF IORESULT =0 THEN
  117. BEGIN OOIOOOlO11Il := NEW (PCURSOR , INITANDOPEN (DATAB , OO0O , 0 , TRUE ));IF OOIOOOlO11Il ^. LASTERROR =PXSUCCESS THEN
  118. BEGIN O1OO1I0IlOll := GETKEYFILES (OO0O );IF O1OO1I0IlOll <> NIL THEN BEGIN FLDCOLL := NEW (PCOLLECTION , INIT
  119. (O1OO1I0IlOll ^. COUNT , 0 ));O1OO1I0IlOll ^. FOREACH (@ OOII11011l1l );DISPOSE (O1OO1I0IlOll , DONE );IF FLDCOLL ^.
  120. COUNT =0 THEN BEGIN DISPOSE (FLDCOLL , DONE );FLDCOLL := NIL END END END ;GETKEYFIELDDESC := OOIOOOlO11Il ^. LASTERROR ;
  121. DISPOSE (OOIOOOlO11Il , DONE );{$I-}CHDIR (OOlOO0l1l0Ol );{$I+}IF IORESULT <> 0 THEN GETKEYFIELDDESC := PXERR_DIRNOACCESS END
  122. ELSE GETKEYFIELDDESC:=PXERR_DIRNOACCESS END;PROCEDURE ENGCFGTODLGCFG (ENGCFG :TENV ; VAR DLGCFG :TPXEENGINECFGREC );
  123. BEGIN WITH ENGCFG DO BEGIN WITH DLGCFG DO BEGIN ENGTYP := INTEGER (ENGINETYPE );DOSSHR := INTEGER (DOSSHARE
  124. );WINSHR := INTEGER (WINSHARE );CRTFMT := INTEGER (TABCRTMODE );LCKMOD := INTEGER (TABLCKMODE );SRTORD := INTEGER
  125. (SORTORDER );SWPSIZ := INTTOSTR (BUFSIZE );TABHAN := INTTOSTR (MAXTABLES );RECHAN := INTTOSTR (MAXRECBUFS );LCKHAN :=
  126. INTTOSTR (MAXLOCKS );FILHAN := INTTOSTR (MAXFILES );NETPAT := NETNAMEPATH ;USRNAM := USERNAME ;CLINAM := CLIENTNAME ;
  127. END ;END ;END ;PROCEDURE DLGCFGTOENGCFG (DLGCFG :TPXEENGINECFGREC ;VAR ENGCFG :TENV );
  128. BEGIN WITH DLGCFG DO BEGIN WITH ENGCFG DO BEGIN ENGINETYPE := TENGINETYPE (ENGTYP );DOSSHARE := PXDOSSHARE
  129. (DOSSHR );WINSHARE := PXWINSHARE (WINSHR );TABCRTMODE := PXTABCRTMODE (CRTFMT );TABLCKMODE := PXTBLLCKMODE (LCKMOD );
  130. SORTORDER := PXSORTORDER (SRTORD );BUFSIZE := STRTOINT (SWPSIZ );MAXTABLES := STRTOINT (TABHAN );MAXRECBUFS := STRTOINT
  131. (RECHAN );MAXLOCKS := STRTOINT (LCKHAN );MAXFILES := STRTOINT (FILHAN );NETNAMEPATH := NETPAT ;USERNAME := USRNAM ;
  132. CLIENTNAME := CLINAM ;END ;END ;END; CONSTRUCTOR TPXEENGINECFG.INIT ;VAR OO1I:TRECT;
  133. O10I0l0O:PRADIOBUTTONS;OIO1000lI0l:PINPUTLINE;BEGIN OO1I.ASSIGN (0 , 0 , 53 , 20 );INHERITED INIT(OO1I ,
  134. 'Engine Options');OPTIONS := OPTIONS OR OFCENTERED ;OO1I.ASSIGN (2 , 3 , 15 , 6 );O10I0l0O := NEW (PRADIOBUTTONS , INIT
  135. (OO1I , NEWSITEM ('Local', NEWSITEM ('Network', NEWSITEM ('Windows', NIL )))));INSERT (O10I0l0O );OO1I.ASSIGN (1 , 2 , 13
  136. , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~E~ngine type', O10I0l0O )));OO1I.ASSIGN (17 , 3 , 30 , 6 );O10I0l0O := NEW
  137. (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Local', NEWSITEM ('Network', NEWSITEM ('None', NIL )))));INSERT (O10I0l0O );
  138. OO1I.ASSIGN (16 , 2 , 30 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~D~OS share', O10I0l0O )));OO1I.ASSIGN (32 , 3 , 51 ,
  139. 6 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Shared', NEWSITEM ('Single client', NEWSITEM ('Exclusive',
  140. NIL )))));INSERT (O10I0l0O );OO1I.ASSIGN (31 , 2 , 47 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~W~indows share',
  141. O10I0l0O )));OO1I.ASSIGN (2 , 8 , 15 , 10 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('4.0', NEWSITEM
  142. ('3.5', NIL ))));INSERT (O10I0l0O );OO1I.ASSIGN (1 , 7 , 15 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~C~reate format',
  143. O10I0l0O )));OO1I.ASSIGN (17 , 8 , 30 , 10 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('4.0', NEWSITEM
  144. ('3.5', NIL ))));INSERT (O10I0l0O );OO1I.ASSIGN (16 , 7 , 30 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~L~ock mode',
  145. O10I0l0O )));OO1I.ASSIGN (32 , 8 , 51 , 13 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('ASCII', NEWSITEM
  146. ('International', NEWSITEM ('Norwegian 3.5', NEWSITEM ('Norwegian 4.0', NEWSITEM ('Swedish', NIL )))))));INSERT (O10I0l0O
  147. );OO1I.ASSIGN (31 , 7 , 51 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~S~ort order', O10I0l0O )));OO1I.ASSIGN (13 , 11 ,
  148. 21 , 12 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (8
  149. , 256 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 11 , 12 , 12 );INSERT (NEW (PLABEL , INIT (OO1I , 'Swap si~z~e',
  150. OIO1000lI0l )));OO1I.ASSIGN (13 , 12 , 21 , 13 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^.
  151. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 64 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 12 , 12 , 13 );INSERT (NEW
  152. (PLABEL , INIT (OO1I , '~T~ables', OIO1000lI0l )));OO1I.ASSIGN (13 , 13 , 21 , 14 );OIO1000lI0l := NEW (PINPUTLINE , INIT
  153. (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 512 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 ,
  154. 13 , 12 , 14 );INSERT (NEW (PLABEL , INIT (OO1I , '~R~ecords', OIO1000lI0l )));OO1I.ASSIGN (13 , 14 , 21 , 15 );
  155. OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 128 )));
  156. INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 14 , 12 , 15 );INSERT (NEW (PLABEL , INIT (OO1I , 'L~o~cks', OIO1000lI0l )));
  157. OO1I.ASSIGN (13 , 15 , 21 , 16 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW
  158. (PRANGEVALIDATOR , INIT (3 , 255 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 15 , 12 , 16 );INSERT (NEW (PLABEL , INIT
  159. (OO1I , '~F~iles', OIO1000lI0l )));OO1I.ASSIGN (32 , 14 , 51 , 15 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , SIZEOF
  160. (PATHSTR )- 1 ));INSERT (OIO1000lI0l );OO1I.ASSIGN (22 , 14 , 31 , 15 );INSERT (NEW (PLABEL , INIT (OO1I , 'Net ~p~ath',
  161. OIO1000lI0l )));OO1I.ASSIGN (32 , 15 , 51 , 16 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , MAXNAMELEN ));INSERT
  162. (OIO1000lI0l );OO1I.ASSIGN (22 , 15 , 31 , 16 );INSERT (NEW (PLABEL , INIT (OO1I , '~N~ame', OIO1000lI0l )));OO1I.ASSIGN
  163. (32 , 16 , 51 , 17 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , MAXNAMELEN ));INSERT (OIO1000lI0l );OO1I.ASSIGN (22 ,
  164. 16 , 31 , 17 );INSERT (NEW (PLABEL , INIT (OO1I , 'Cl~i~ent', OIO1000lI0l )));OO1I.ASSIGN (1 , 17 , 11 , 19 );INSERT (NEW
  165. (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (12 , 17 , 22 , 19 );INSERT (NEW (PBUTTON , INIT (OO1I ,
  166. 'Cancel', CMCANCEL , BFNORMAL )))END ;CONSTRUCTOR TPXEMEMOEDIT.INIT ;VAR OO1I:TRECT;
  167. OOIOI1II000O,OOIOI1II00l1:PSCROLLBAR;BEGIN DESKTOP ^. GETEXTENT (OO1I );INHERITED INIT(OO1I , 'BLOB Memo Editor');
  168. OPTIONS := OPTIONS OR OFVALIDATE OR OFTILEABLE ;FLAGS := WFMOVE + WFGROW + WFCLOSE + WFZOOM ;GROWMODE := GFGROWREL ;
  169. PALETTE := DPBLUEDIALOG ;OOIOI1II000O := STANDARDSCROLLBAR (SBHORIZONTAL OR SBHANDLEKEYBOARD );INSERT (OOIOI1II000O );
  170. OOIOI1II00l1 := STANDARDSCROLLBAR (SBVERTICAL OR SBHANDLEKEYBOARD );INSERT (OOIOI1II00l1 );GETEXTENT (OO1I );OO1I.GROW (-
  171. 1 , - 1 );MEMO := NEW (PMEMO , INIT (OO1I , OOIOI1II000O , OOIOI1II00l1 , NIL , PXEMAXUMEMOSIZE ));INSERT (MEMO )END ;
  172. PROCEDURE TPXEMEMOEDIT.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN IF (EVENT.WHAT =EVCOMMAND )AND (EVENT.COMMAND =CMCANCEL )THEN
  173. EVENT.COMMAND := CMOK ;INHERITED HANDLEEVENT(EVENT )END ;FUNCTION TPXEFIELDLISTBOX.GETTEXT (ITEM:INTEGER;
  174. MAXLEN:INTEGER):STRING ;VAR OIOI:CHAR;OO10:PFIELDDESC;BEGIN IF LIST <> NIL THEN BEGIN OO10 := PFIELDDESC (LIST ^. AT
  175. (ITEM ));CASE BYTE (OO10 ^. FLDTYPE ) OF BYTE (FLDCHAR ):OIOI := 'A';BYTE (FLDSHORT ):OIOI := 'S';BYTE (FLDDOUBLE ):IF
  176. OO10 ^. FLDSUBTYPE =FLDSTNONE THEN OIOI := 'N'ELSE OIOI := '$';BYTE (FLDDATE ):OIOI := 'D';BYTE (FLDBLOB ):CASE OO10 ^.
  177. FLDSUBTYPE  OF FLDSTMEMO :OIOI := 'M';FLDSTBINARY :OIOI := 'B';FLDSTFMTMEMO :OIOI := 'F';FLDSTOLEOBJ :OIOI := 'O';
  178. FLDSTGRAPHIC :OIOI := 'G'END ;PXEPRIMARY :OIOI := 'P';PXECOMPOSITE :OIOI := 'C'END ;GETTEXT := INTTORIGHTSTR (OO10 ^.
  179. FLDNUM , 3 )+ ' │ '+ OIOI + ' │ '+ INTTORIGHTSTR (OO10 ^. FLDLEN , 3 )+ ' │ '+ OO10 ^. FLDNAME END ELSE GETTEXT := ''END
  180. ;PROCEDURE TPXEFIELDLISTBOX.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVKEYDOWN
  181. )AND (EVENT.KEYCODE =KBENTER )AND (LIST ^. COUNT > 0 )THEN BEGIN EVENT.WHAT := EVBROADCAST ;EVENT.COMMAND :=
  182. CMLISTITEMSELECTED ;PUTEVENT (EVENT );CLEAREVENT (EVENT )END END ;CONSTRUCTOR TPXECREATEDIALOG.INIT (TBLNAME:PATHSTR;
  183. FLDCOLL:PCOLLECTION);VAR OO1I:TRECT;OOIOI1II00l1:PSCROLLBAR;BEGIN OO1I.ASSIGN (0 , 0 , 66 , 17 );INHERITED INIT(OO1I ,
  184. TBLNAME );OPTIONS := OPTIONS OR OFCENTERED ;TABLENAM := TBLNAME ;FIELDPTR := FLDCOLL ;OO1I.ASSIGN (2 , 3 , 29 , 4 );
  185. NAMELINE := NEW (PINPUTLINE , INIT (OO1I , 25 ));INSERT (NAMELINE );OO1I.ASSIGN (1 , 2 , 6 , 3 );INSERT (NEW (PLABEL ,
  186. INIT (OO1I , '~N~ame', NAMELINE )));OO1I.ASSIGN (41 , 3 , 46 , 4 );LENGTHLINE := NEW (PINPUTLINE , INIT (OO1I , 3 ));
  187. LENGTHLINE ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (0 , 255 )));INSERT (LENGTHLINE );OO1I.ASSIGN (40 , 2 , 46 , 3 );
  188. INSERT (NEW (PLABEL , INIT (OO1I , '~L~en', LENGTHLINE )));OO1I.ASSIGN (47 , 3 , 64 , 13 );TYPEBUTTONS := NEW
  189. (PMSGBUTTONS , INIT (OO1I , NEWSITEM ('Alhpa', NEWSITEM ('Short', NEWSITEM ('Double', NEWSITEM ('Date', NEWSITEM
  190. ('Currency', NEWSITEM ('Memo', NEWSITEM ('Binary', NEWSITEM ('Fmt Memo', NEWSITEM ('Windows OLE', NEWSITEM ('Graphic',
  191. NIL ))))))))))));INSERT (TYPEBUTTONS );OO1I.ASSIGN (46 , 2 , 51 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~T~ype',
  192. TYPEBUTTONS )));OO1I.ASSIGN (45 , 5 , 46 , 13 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 ,
  193. 5 , 45 , 13 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (FIELDBOX );OO1I.ASSIGN (1 , 4
  194. , 22 , 5 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len   Name', FIELDBOX )));OO1I.ASSIGN (2 , 14 , 12 , 16 );
  195. INSERT (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (15 , 14 , 25 , 16 );INSERT (NEW (PBUTTON ,
  196. INIT (OO1I , '~A~dd', CMFIELDADD , BFNORMAL )));OO1I.ASSIGN (28 , 14 , 38 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I ,
  197. '~D~elete', CMFIELDDELETE , BFNORMAL )));OO1I.ASSIGN (41 , 14 , 51 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I , '~E~dit',
  198. CMFIELDEDIT , BFNORMAL )));OO1I.ASSIGN (54 , 14 , 64 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCEL ,
  199. BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXECREATEDIALOG.SETDATA (VAR REC);BEGIN INHERITED SETDATA(REC );
  200. DEFTYPELEN END ;PROCEDURE TPXECREATEDIALOG.ADDFIELD ;VAR O101I1l1OO010,O1lll1llI0:INTEGER;OO10:PFIELDDESC;FUNCTION O10l
  201. (OI1000l1II00:POINTER):BOOLEAN ;FAR ;BEGIN O10l := (UPCASESTR (PFIELDDESC (OI1000l1II00 )^. FLDNAME )=UPCASESTR (NAMELINE
  202. ^. DATA ^))END ;PROCEDURE OI0lI00100O1 (OI1000l1II00:POINTER);FAR ;BEGIN PFIELDDESC (OI1000l1II00 )^. FLDNUM :=
  203. O1lll1llI0 ;INC (O1lll1llI0 )END ;BEGIN IF FIELDBOX ^. RANGE < 255 THEN BEGIN IF NAMELINE ^. DATA ^<> ''THEN BEGIN IF
  204. FIELDPTR ^. FIRSTTHAT (@ O10l )=NIL THEN BEGIN IF LENGTHLINE ^. VALID (CMOK )THEN BEGIN O101I1l1OO010 := TYPEBUTTONS ^.
  205. VALUE ;OO10 := NEW (PFIELDDESC , INIT );WITH OO10^ DO BEGIN FLDNAME := NAMELINE ^. DATA ^;CASE O101I1l1OO010  OF 0 .. 1
  206. :BEGIN FLDTYPE := PXFIELDTYPE (O101I1l1OO010 );FLDSUBTYPE := FLDSTNONE END ;2 .. 3 :BEGIN FLDTYPE := PXFIELDTYPE
  207. (O101I1l1OO010 + 1 );FLDSUBTYPE := FLDSTNONE END ;4 :BEGIN FLDTYPE := FLDDOUBLE ;FLDSUBTYPE := FLDSTMONEY END ;5 .. 9
  208. :BEGIN FLDTYPE := FLDBLOB ;FLDSUBTYPE := PXFIELDSUBTYPE (O101I1l1OO010 - 3 )END ;END ;FLDLEN := STRTOINT (LENGTHLINE ^.
  209. DATA ^)END ;IF FIELDBOX ^. FOCUSED =FIELDBOX ^. RANGE - 1 THEN FIELDPTR ^. INSERT (OO10 )ELSE FIELDPTR ^. ATINSERT
  210. (FIELDBOX ^. FOCUSED , OO10 );O1lll1llI0 := 1 ;FIELDPTR ^. FOREACH (@ OI0lI00100O1 );FIELDBOX ^. SETRANGE (FIELDBOX ^.
  211. LIST ^. COUNT );IF FIELDBOX ^. FOCUSED < FIELDBOX ^. RANGE - 1 THEN FIELDBOX ^. FOCUSITEM (FIELDBOX ^. FOCUSED + 1 )ELSE
  212. FIELDBOX ^. DRAWVIEW END END ELSE BEGIN MESSAGEBOX (#3'Duplicate field name', NIL , MFERROR OR MFOKBUTTON );NAMELINE ^.
  213. FOCUS END END ELSE BEGIN MESSAGEBOX (#3'Name field blank', NIL , MFERROR OR MFOKBUTTON );NAMELINE ^. FOCUS END END ELSE
  214. MESSAGEBOX (#3'Only 255 fields allowed', NIL , MFERROR OR MFOKBUTTON )END ;PROCEDURE TPXECREATEDIALOG.DELETEFIELD ;
  215. VAR O1lll1llI0:INTEGER;PROCEDURE OI0lI00100O1 (OI1000l1II00:POINTER);FAR ;BEGIN PFIELDDESC (OI1000l1II00 )^. FLDNUM :=
  216. O1lll1llI0 ;INC (O1lll1llI0 )END ;BEGIN IF FIELDBOX ^. RANGE > 0 THEN BEGIN FIELDPTR ^. ATDELETE (FIELDBOX ^. FOCUSED );
  217. FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^. COUNT );O1lll1llI0 := 1 ;FIELDPTR ^. FOREACH (@ OI0lI00100O1 );FIELDBOX ^.
  218. DRAWVIEW END END ;PROCEDURE TPXECREATEDIALOG.DEFTYPELEN ;VAR OOlOO00O101O,OI1I0l1llIl:LONGINT;BEGIN CASE TYPEBUTTONS ^.
  219. VALUE  OF 0 :BEGIN OOlOO00O101O := 1 ;OI1I0l1llIl := 255 END ;1 .. 4 :BEGIN OOlOO00O101O := 0 ;OI1I0l1llIl := 0 END ;5
  220. :BEGIN OOlOO00O101O := 1 ;OI1I0l1llIl := 240 END ;6 .. 9 :BEGIN OOlOO00O101O := 0 ;OI1I0l1llIl := 240 END END ;
  221. PRANGEVALIDATOR (LENGTHLINE ^. VALIDATOR )^. MIN := OOlOO00O101O ;PRANGEVALIDATOR (LENGTHLINE ^. VALIDATOR )^. MAX :=
  222. OI1I0l1llIl END ;PROCEDURE TPXECREATEDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);PROCEDURE OOIllO1OOIO0 ;
  223. VAR O101I1l1OO010:INTEGER;Ol00II0I1I10:STRING [ 3 ] ;O101O0I1lIl0l:PFIELDDESC;BEGIN IF FIELDBOX ^. RANGE > 0 THEN
  224. BEGIN O101O0I1lIl0l := FIELDPTR ^. AT (FIELDBOX ^. FOCUSED );NAMELINE ^. SETDATA (O101O0I1lIl0l ^. FLDNAME );
  225. Ol00II0I1I10 := INTTOSTR (O101O0I1lIl0l ^. FLDLEN );LENGTHLINE ^. SETDATA (Ol00II0I1I10 );CASE O101O0I1lIl0l ^. FLDTYPE
  226.  OF FLDCHAR :O101I1l1OO010 := 0 ;FLDSHORT :O101I1l1OO010 := 1 ;FLDDOUBLE :IF O101O0I1lIl0l ^. FLDSUBTYPE =FLDSTMONEY THEN
  227. O101I1l1OO010 := 4 ELSE O101I1l1OO010 := 2 ;FLDDATE :O101I1l1OO010 := 3 ;FLDBLOB :O101I1l1OO010 := INTEGER (O101O0I1lIl0l
  228. ^. FLDSUBTYPE )+ 3 END ;TYPEBUTTONS ^. SETDATA (O101I1l1OO010 );DEFTYPELEN END END ;BEGIN INHERITED HANDLEEVENT(EVENT );
  229. CASE EVENT.WHAT  OF EVCOMMAND :BEGIN CASE EVENT.COMMAND  OF CMFIELDADD :ADDFIELD ;CMFIELDDELETE :DELETEFIELD ;
  230. CMFIELDEDIT :OOIllO1OOIO0 ELSE EXIT END ;CLEAREVENT (EVENT )END ;EVBROADCAST :BEGIN CASE EVENT.COMMAND
  231.  OF CMMSGBUTTONPRESS :DEFTYPELEN END END END END ;CONSTRUCTOR TPXEINDEXDIALOG.INIT (TBLNAME:PATHSTR);VAR OO1I:TRECT;
  232. OOIOI1II00l1:PSCROLLBAR;O1l0lIO0OII0,O1IIOOI0lI:PRADIOBUTTONS;BEGIN OO1I.ASSIGN (0 , 0 , 48 , 19 );INHERITED INIT(OO1I ,
  233. TBLNAME );OPTIONS := OPTIONS OR OFCENTERED ;OO1I.ASSIGN (45 , 3 , 46 , 7 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT
  234. (OOIOI1II00l1 );OO1I.ASSIGN (2 , 3 , 45 , 7 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));
  235. INSERT (FIELDBOX );OO1I.ASSIGN (1 , 2 , 22 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len   Name', FIELDBOX
  236. )));OO1I.ASSIGN (45 , 8 , 46 , 12 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 , 8 , 45 , 12
  237. );KEYBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (KEYBOX );OO1I.ASSIGN (1 , 7 , 22 , 8 );
  238. INSERT (NEW (PLABEL , INIT (OO1I , '~S~econdary key fields', KEYBOX )));OO1I.ASSIGN (2 , 13 , 19 , 17 );O1l0lIO0OII0 :=
  239. NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Primary', NEWSITEM ('Secondary', NEWSITEM ('Incremental', NIL )))));INSERT
  240. (O1l0lIO0OII0 );OO1I.ASSIGN (1 , 12 , 6 , 13 );INSERT (NEW (PLABEL , INIT (OO1I , '~T~ype', O1l0lIO0OII0 )));OO1I.ASSIGN
  241. (20 , 13 , 35 , 15 );O1IIOOI0lI := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('On', NEWSITEM ('Off', NIL ))));INSERT
  242. (O1IIOOI0lI );OO1I.ASSIGN (19 , 12 , 34 , 13 );INSERT (NEW (PLABEL , INIT (OO1I , '~C~ase sensitive', O1IIOOI0lI )));
  243. OO1I.ASSIGN (20 , 16 , 35 , 17 );NAMELINE := NEW (PINPUTLINE , INIT (OO1I , 25 ));INSERT (NAMELINE );OO1I.ASSIGN (19 , 15
  244. , 34 , 16 );INSERT (NEW (PLABEL , INIT (OO1I , '~N~ame', NAMELINE )));OO1I.ASSIGN (36 , 13 , 46 , 15 );INSERT (NEW
  245. (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (36 , 16 , 46 , 18 );INSERT (NEW (PBUTTON , INIT (OO1I ,
  246. 'Cancel', CMCANCEL , BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXEINDEXDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);
  247. VAR O10OO1000O0OI:PFIELDDESC;BEGIN INHERITED HANDLEEVENT(EVENT );IF EVENT.WHAT =EVBROADCAST THEN IF EVENT.COMMAND
  248. =CMLISTITEMSELECTED THEN BEGIN IF FIELDBOX ^. STATE AND SFSELECTED <> 0 THEN BEGIN O10OO1000O0OI := NEW (PFIELDDESC ,
  249. INIT );O10OO1000O0OI ^:= PFIELDDESC (FIELDBOX ^. LIST ^. AT (FIELDBOX ^. FOCUSED ))^;FIELDBOX ^. LIST ^. FREE (FIELDBOX
  250. ^. LIST ^. AT (FIELDBOX ^. FOCUSED ));KEYBOX ^. LIST ^. INSERT (O10OO1000O0OI );FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^.
  251. COUNT );FIELDBOX ^. DRAWVIEW ;KEYBOX ^. SETRANGE (KEYBOX ^. LIST ^. COUNT );KEYBOX ^. DRAWVIEW END ELSE
  252. BEGIN O10OO1000O0OI := NEW (PFIELDDESC , INIT );O10OO1000O0OI ^:= PFIELDDESC (KEYBOX ^. LIST ^. AT (KEYBOX ^. FOCUSED
  253. ))^;KEYBOX ^. LIST ^. FREE (KEYBOX ^. LIST ^. AT (KEYBOX ^. FOCUSED ));FIELDBOX ^. LIST ^. INSERT (O10OO1000O0OI );
  254. KEYBOX ^. SETRANGE (KEYBOX ^. LIST ^. COUNT );KEYBOX ^. DRAWVIEW ;FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^. COUNT );
  255. FIELDBOX ^. DRAWVIEW END END END ;CONSTRUCTOR TPXEKEYDIALOG.INIT (TBLNAME:PATHSTR);VAR OO1I:TRECT;
  256. OOIOI1II00l1:PSCROLLBAR;BEGIN OO1I.ASSIGN (0 , 0 , 48 , 12 );INHERITED INIT(OO1I , TBLNAME );OPTIONS := OPTIONS OR
  257. OFCENTERED ;OO1I.ASSIGN (45 , 3 , 46 , 7 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 , 3 ,
  258. 45 , 7 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (FIELDBOX );OO1I.ASSIGN (1 , 2 , 22
  259. , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len   Name', FIELDBOX )));OO1I.ASSIGN (25 , 8 , 35 , 10 );INSERT
  260. (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (36 , 8 , 46 , 10 );INSERT (NEW (PBUTTON , INIT
  261. (OO1I , 'Cancel', CMCANCEL , BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXEKEYDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);
  262. VAR O10OO1000O0OI:PFIELDDESC;BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND
  263. =CMLISTITEMSELECTED )THEN BEGIN EVENT.WHAT := EVCOMMAND ;EVENT.COMMAND := CMOK ;PUTEVENT (EVENT );CLEAREVENT (EVENT )END
  264. END ;PROCEDURE TPXETABLELINE.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE
  265. =SFSELECTED )AND (STATE AND SFACTIVE <> 0 )THEN BEGIN IF STATE AND SFSELECTED =0 THEN MESSAGE (OWNER , EVBROADCAST ,
  266. CMFIELDEXIT , @ SELF )ELSE MESSAGE (OWNER , EVBROADCAST , CMFIELDENTER , @ SELF )END END ;CONSTRUCTOR TPXETABLEVIEW.INIT
  267. (VAR BOUNDS:TRECT;AHSCROLLBAR:PSCROLLBAR;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
  268. IDXNUM:FIELDNUMBER);BEGIN INHERITED INIT(BOUNDS );OPTIONS := OPTIONS OR OFSELECTABLE OR OFVALIDATE ;EVENTMASK :=
  269. EVENTMASK OR EVBROADCAST ;GROWMODE := GFGROWHIX + GFGROWHIY ;HSCROLLBAR := AHSCROLLBAR ;TABLENAM := TBLNAME ;ENGINEPTR :=
  270. ENGPTR ;DATABASEPTR := DBPTR ;CURSORPTR := CURPTR ;INDEXNUMBER := IDXNUM ;EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;
  271. TABLEHAN := CURSORPTR ^. GETTABLEHANDLE ;FIELDCNT := CURSORPTR ^. GENERICREC ^. GETFIELDCOUNT ;PRIFIELDCNT := DATABASEPTR
  272. ^. GETNUMPFIELDS (TABLENAM );RECBUFS := DESKTOP ^. SIZE.Y - PXERECBUFDIFF ;NEWFIELDCOLL ;NEWRECCOLL ;GOTOHOME ;
  273. HSCROLLBAR ^. SETPARAMS (0 , 0 , FIELDCNT - 1 , 1 , 1 )END ;DESTRUCTOR TPXETABLEVIEW.DONE ;PROCEDURE OOlll0l0I0lO
  274. (OI1000l1II00:POINTER);FAR ;PROCEDURE Ol01IOI1I0lO (OI1000l1II00:POINTER);FAR ;BEGIN DISPOSESTR (PPXEFIELD (OI1000l1II00
  275. )^. DISPSTR )END ;BEGIN PPXERECORD (OI1000l1II00 )^. FLDCOLL ^. FOREACH (@ Ol01IOI1I0lO );DISPOSE (PPXERECORD
  276. (OI1000l1II00 )^. FLDCOLL , DONE )END ;PROCEDURE O1OlIl1IIOl0 (OI1000l1II00:POINTER);FAR ;BEGIN DISPOSE (PPXEFIELDDESC
  277. (OI1000l1II00 )^. FDESC , DONE )END ;BEGIN TABLELINE ^. MAXLEN := 255 ;IF FIELDDESCCOLL <> NIL THEN BEGIN FIELDDESCCOLL
  278. ^. FOREACH (@ O1OlIl1IIOl0 );DISPOSE (FIELDDESCCOLL , DONE )END ;IF RECORDCOLL <> NIL THEN BEGIN RECORDCOLL ^. FOREACH (@
  279. OOlll0l0I0lO );DISPOSE (RECORDCOLL , DONE )END ;IF CURSORPTR <> NIL THEN DISPOSE (CURSORPTR , DONE );INHERITED DONE END ;
  280. PROCEDURE TPXETABLEVIEW.SETLINEVAILDATOR (FTYP:PXFIELDTYPE);BEGIN CASE FTYP  OF FLDCHAR , FLDBLOB :IF TABLELINE ^.
  281. VALIDATOR <> NIL THEN BEGIN TABLELINE ^. VALIDATOR ^. FREE ;TABLELINE ^. VALIDATOR := NIL END ;FLDDOUBLE :TABLELINE ^.
  282. SETVALIDATOR (NEW (PFILTERVALIDATOR , INIT ([ '0'.. '9', '+', '-', '.', 'E', 'e', ' '] )));FLDDATE :TABLELINE ^.
  283. SETVALIDATOR (NEW (PPXPICTUREVALIDATOR , INIT ('{##}/{##}/{####}', TRUE )));FLDSHORT :TABLELINE ^. SETVALIDATOR (NEW
  284. (PFILTERVALIDATOR , INIT ([ '0'.. '9', '+', '-', ' '] )));FLDLONG :TABLELINE ^. SETVALIDATOR (NEW (PFILTERVALIDATOR ,
  285. INIT ([ '0'.. '9', '+', '-', ' '] )))END ;IF FTYP <> FLDBLOB THEN TABLELINE ^. SETSTATE (SFDISABLED , FALSE )ELSE
  286. TABLELINE ^. SETSTATE (SFDISABLED , TRUE )END ;PROCEDURE TPXETABLEVIEW.DRAWLINE ;VAR OOIO,OOIl:INTEGER;OO1I:TRECT;
  287. O10OO1000O0OI:PPXEFIELDDESC;BEGIN O10OO1000O0OI := FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );TABLELINE ^. FIELDSTR :=
  288. TRIMSTR (PSTRING (PPXEFIELD (PPXERECORD (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))^. FLDCOLL ^. AT
  289. (HSCROLLBAR ^. VALUE ))^. DISPSTR )^);TABLELINE ^. MAXLEN := O10OO1000O0OI ^. FDISPLEN ;TABLELINE ^. DATA ^:= TABLELINE
  290. ^. FIELDSTR ;IF SIZE.X > O10OO1000O0OI ^. FDISPLEN + 3 THEN OOIO := O10OO1000O0OI ^. FDISPLEN + 4 ELSE OOIO := SIZE.X + 1
  291. ;IF TABLELINE ^. ORIGIN.Y < SIZE.Y THEN OOIl := TABLELINE ^. ORIGIN.Y ELSE OOIl := SIZE.Y - 1 ;OO1I.ASSIGN (2 , OOIl ,
  292. OOIO , OOIl + 1 );TABLELINE ^. LOCATE (OO1I );SETLINEVAILDATOR (O10OO1000O0OI ^. FDESC ^. FLDTYPE );TABLELINE ^. DRAWVIEW
  293. ;LOCKUPDATE END ;PROCEDURE TPXETABLEVIEW.DRAW ;VAR Ol00lI1:WORD;OOIl,OIO10011lII,OOlIllI1OOIO,OOlIllI1OOlI:INTEGER;
  294. Ol00I1l0OOI1,Ol00II0lOOOO,Ol00II0lOlI1:STRING ;OIO1:TDRAWBUFFER;O10OO1000O0OI:PPXEFIELDDESC;BEGIN Ol00lI1 := GETCOLOR (6
  295. );MOVECHAR (OIO1 , ' ', Ol00lI1 , SIZE.X );OIO10011lII := HSCROLLBAR ^. VALUE ;Ol00I1l0OOI1 := '';Ol00II0lOOOO := '┌';
  296. Ol00II0lOlI1 := '└';OOlIllI1OOlI := SIZE.X ;REPEAT O10OO1000O0OI := FIELDDESCCOLL ^. AT (OIO10011lII );IF O10OO1000O0OI
  297. ^. FDISPLEN < OOlIllI1OOlI THEN OOlIllI1OOIO := O10OO1000O0OI ^. FDISPLEN + 2 ELSE OOlIllI1OOIO := OOlIllI1OOlI ;IF
  298. OIO10011lII < PRIFIELDCNT THEN BEGIN Ol00I1l0OOI1 := Ol00I1l0OOI1 + ' ~'+ PADRIGHTSTR (O10OO1000O0OI ^. FDESC ^. FLDNAME
  299. , ' ', OOlIllI1OOIO )+ '~';INC (OOlIllI1OOlI , 2 )END ELSE Ol00I1l0OOI1 := Ol00I1l0OOI1 + ' '+ PADRIGHTSTR (O10OO1000O0OI
  300. ^. FDESC ^. FLDNAME , ' ', OOlIllI1OOIO );Ol00II0lOOOO := Ol00II0lOOOO + FILLSTR ('─', OOlIllI1OOIO )+ '┬';Ol00II0lOlI1
  301. := Ol00II0lOlI1 + FILLSTR ('─', OOlIllI1OOIO )+ '┴';INC (OIO10011lII )UNTIL (BYTE (Ol00I1l0OOI1 [ 0 ] )> OOlIllI1OOlI )OR
  302. (OIO10011lII =FIELDCNT );MOVECSTR (OIO1 , Ol00I1l0OOI1 , GETCOLOR ($0706 ));WRITEBUF (0 , 0 , SIZE.X , 1 , OIO1 );
  303. Ol00II0lOOOO [ BYTE (Ol00II0lOOOO [ 0 ] )] := '┐';MOVESTR (OIO1 , Ol00II0lOOOO , Ol00lI1 );WRITEBUF (0 , 1 , SIZE.X , 1 ,
  304. OIO1 );FOR OOIl := 2 TO SIZE.Y - 2  DO BEGIN OIO10011lII := HSCROLLBAR ^. VALUE ;Ol00I1l0OOI1 := '│ ';REPEAT Ol00I1l0OOI1
  305. := Ol00I1l0OOI1 + PSTRING (PPXEFIELD (PPXERECORD (RECORDCOLL ^. AT (OOIl - 2 ))^. FLDCOLL ^. AT (OIO10011lII ))^. DISPSTR
  306. )^;IF BYTE (Ol00I1l0OOI1 [ 0 ] )> SIZE.X THEN BYTE (Ol00I1l0OOI1 [ 0 ] ):= SIZE.X + 1 ;Ol00I1l0OOI1 := Ol00I1l0OOI1 +
  307. ' │ ';INC (OIO10011lII )UNTIL (BYTE (Ol00I1l0OOI1 [ 0 ] )> SIZE.X )OR (OIO10011lII =FIELDCNT );MOVESTR (OIO1 ,
  308. Ol00I1l0OOI1 , Ol00lI1 );WRITEBUF (0 , OOIl , SIZE.X , 1 , OIO1 )END ;Ol00II0lOlI1 [ BYTE (Ol00II0lOlI1 [ 0 ] )] := '┘';
  309. MOVESTR (OIO1 , Ol00II0lOlI1 , Ol00lI1 );WRITEBUF (0 , SIZE.Y - 1 , SIZE.X , 1 , OIO1 );DRAWLINE END ;
  310. FUNCTION TPXETABLEVIEW.ERRORBOX (ERRCODE:INTEGER):BOOLEAN ;BEGIN IF ERRCODE <> PXSUCCESS THEN BEGIN MESSAGEBOX (ENGINEPTR
  311. ^. GETERRORMESSAGE (ERRCODE )+ '.', NIL , MFERROR OR MFOKBUTTON );ERRORBOX := TRUE END ELSE ERRORBOX := FALSE END ;
  312. PROCEDURE TPXETABLEVIEW.NEWFIELDCOLL ;VAR OIlO:FIELDNUMBER;O10OO1000O0OI:PPXEFIELDDESC;BEGIN FIELDDESCCOLL := NEW
  313. (PCOLLECTION , INIT (FIELDCNT , 0 ));FOR OIlO := 1 TO FIELDCNT  DO BEGIN O10OO1000O0OI := NEW (PPXEFIELDDESC , INIT );
  314. O10OO1000O0OI ^. FDESC := NEW (PFIELDDESC , INIT );CURSORPTR ^. GENERICREC ^. GETFIELDDESC (OIlO , O10OO1000O0OI ^. FDESC
  315. );CASE O10OO1000O0OI ^. FDESC ^. FLDTYPE  OF FLDCHAR :O10OO1000O0OI ^. FDISPLEN := O10OO1000O0OI ^. FDESC ^. FLDLEN ;
  316. FLDSHORT :O10OO1000O0OI ^. FDISPLEN := 6 ;FLDLONG :O10OO1000O0OI ^. FDISPLEN := 11 ;FLDDOUBLE :O10OO1000O0OI ^. FDISPLEN
  317. := 17 ;FLDDATE :O10OO1000O0OI ^. FDISPLEN := 10 ;FLDBLOB :CASE O10OO1000O0OI ^. FDESC ^. FLDSUBTYPE  OF FLDSTMEMO
  318. :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 0 , 0 ] );FLDSTBINARY :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES
  319. [ 1 , 0 ] );FLDSTFMTMEMO :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 2 , 0 ] );FLDSTOLEOBJ :O10OO1000O0OI ^.
  320. FDISPLEN := BYTE (PXEBLOBNAMES [ 3 , 0 ] );FLDSTGRAPHIC :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 4 , 0 ] )END
  321. END ;FIELDDESCCOLL ^. INSERT (O10OO1000O0OI )END END ;PROCEDURE TPXETABLEVIEW.NEWRECCOLL ;VAR OIlO:INTEGER;
  322. OIO111ll00I:PCOLLECTION;O10O0l1IO0101:PPXERECORD;PROCEDURE OOIII0I1O11l (OI1000l1II00:POINTER);FAR ;
  323. VAR OIO0OlOl1OO:PPXEFIELD;BEGIN OIO0OlOl1OO := NEW (PPXEFIELD , INIT );OIO0OlOl1OO ^. DISPSTR := NEWSTR (FILLSTR (' ',
  324. PPXEFIELDDESC (OI1000l1II00 )^. FDISPLEN ));OIO111ll00I ^. INSERT (OIO0OlOl1OO )END ;BEGIN RECORDCOLL := NEW (PCOLLECTION
  325. , INIT (PXEMAXRECBUFS , 0 ));FOR OIlO := 1 TO PXEMAXRECBUFS  DO BEGIN OIO111ll00I := NEW (PCOLLECTION , INIT (FIELDCNT ,
  326. 0 ));FIELDDESCCOLL ^. FOREACH (@ OOIII0I1O11l );O10O0l1IO0101 := NEW (PPXERECORD , INIT );O10O0l1IO0101 ^. FLDCOLL :=
  327. OIO111ll00I ;RECORDCOLL ^. INSERT (O10O0l1IO0101 )END END ;PROCEDURE TPXETABLEVIEW.XLATEFIELD (RECDATA:PPXERECORD;
  328. PFLD:PPXEFIELDDESC);VAR O10111IIlO0ll:BOOLEAN;OO1O:INTEGER;OO01:LONGINT;OIOO:DOUBLE;OOO0IlO0OI1O:STRING ;
  329. Ol00II10ll1l:PSTRING;BEGIN Ol00II10ll1l := PSTRING (PPXEFIELD (RECDATA ^. FLDCOLL ^. AT (PFLD ^. FDESC ^. FLDNUM - 1 ))^.
  330. DISPSTR );IF NOT CURSORPTR ^. GENERICREC ^. ISNULL (PFLD ^. FDESC ^. FLDNUM )THEN BEGIN CASE PFLD ^. FDESC ^. FLDTYPE
  331.  OF FLDCHAR :BEGIN CURSORPTR ^. GENERICREC ^. GETSTRING (PFLD ^. FDESC ^. FLDNUM , OOO0IlO0OI1O , O10111IIlO0ll );
  332. OOO0IlO0OI1O := PADRIGHTSTR (OOO0IlO0OI1O , ' ', PFLD ^. FDISPLEN )END ;FLDDOUBLE :BEGIN CURSORPTR ^. GENERICREC ^.
  333. GETDOUBLE (PFLD ^. FDESC ^. FLDNUM , OIOO , O10111IIlO0ll );IF (ABS (OIOO )< PXEFIXEDMAX )THEN STR (OIOO :17 :2 ,
  334. OOO0IlO0OI1O )ELSE STR (OIOO :17 , OOO0IlO0OI1O )END ;FLDDATE :CURSORPTR ^. GENERICREC ^. GETSTRING (PFLD ^. FDESC ^.
  335. FLDNUM , OOO0IlO0OI1O , O10111IIlO0ll );FLDSHORT :BEGIN CURSORPTR ^. GENERICREC ^. GETFIELD (PFLD ^. FDESC ^. FLDNUM , @
  336. OO1O , SIZEOF (OO1O ), O10111IIlO0ll );STR (OO1O :6 , OOO0IlO0OI1O )END ;FLDBLOB :CASE PFLD ^. FDESC ^. FLDSUBTYPE
  337.  OF FLDSTMEMO :OOO0IlO0OI1O := PXEBLOBNAMES [ 0 ] ;FLDSTBINARY :OOO0IlO0OI1O := PXEBLOBNAMES [ 1 ] ;FLDSTFMTMEMO
  338. :OOO0IlO0OI1O := PXEBLOBNAMES [ 2 ] ;FLDSTOLEOBJ :OOO0IlO0OI1O := PXEBLOBNAMES [ 3 ] ;FLDSTGRAPHIC :OOO0IlO0OI1O :=
  339. PXEBLOBNAMES [ 4 ] END ;FLDLONG :BEGIN CURSORPTR ^. GENERICREC ^. GETFIELD (PFLD ^. FDESC ^. FLDNUM , @ OO01 , SIZEOF
  340. (OO01 ), O10111IIlO0ll );STR (OO01 :11 , OOO0IlO0OI1O )END END ;Ol00II10ll1l ^:= OOO0IlO0OI1O END ELSE Ol00II10ll1l ^:=
  341. FILLSTR (' ', PFLD ^. FDISPLEN )END ;PROCEDURE TPXETABLEVIEW.READFIELDS ;VAR OIlO:INTEGER;O10O0l1IO00IO:PPXERECORD;
  342. PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD (O10O0l1IO00IO , OI1000l1II00 )END ;
  343. PROCEDURE OOIlII01lO1I (OI1000l1II00:POINTER);FAR ;VAR Ol00II10ll1l:PSTRING;OIO1001I000:PPXEFIELDDESC;BEGIN OIO1001I000
  344. := OI1000l1II00 ;Ol00II10ll1l := PSTRING (PPXEFIELD (O10O0l1IO00IO ^. FLDCOLL ^. AT (OIO1001I000 ^. FDESC ^. FLDNUM - 1
  345. ))^. DISPSTR );Ol00II10ll1l ^:= FILLSTR (' ', OIO1001I000 ^. FDISPLEN )END ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL
  346. )AND (CURSORPTR ^. HASCHANGED )THEN CURSORPTR ^. REFRESH ;FOR OIlO := 0 TO RECBUFS - 1  DO BEGIN O10O0l1IO00IO :=
  347. RECORDCOLL ^. AT (OIlO );IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC
  348. );IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN O10O0l1IO00IO ^. RECNUM := CURSORPTR ^. GETCURRECNUM ;FIELDDESCCOLL ^.
  349. FOREACH (@ OI1I01lO00 );CURSORPTR ^. GOTONEXT END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^. FOREACH (@
  350. OOIlII01lO1I )END END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^. FOREACH (@ OOIlII01lO1I )END END ;IF
  351. CURSORPTR ^. LASTERROR =PXERR_ENDOFTABLE THEN GOTOLAST ;LOCKUPDATE END ;FUNCTION TPXETABLEVIEW.SEARCHKEY
  352. (RECDATA:PPXERECORD;SMODE:INTEGER):RETCODE ;VAR OIlO:INTEGER;BEGIN CURSORPTR ^. GENERICREC ^. CLEAR ;IF PRIFIELDCNT <> 0
  353. THEN BEGIN FOR OIlO := 0 TO PRIFIELDCNT - 1  DO CURSORPTR ^. GENERICREC ^. PUTSTRING (OIlO + 1 , PSTRING (PPXEFIELD
  354. (RECDATA ^. FLDCOLL ^. AT (OIlO ))^. DISPSTR )^);SEARCHKEY := PXSRCHKEY (TABLEHAN , CURSORPTR ^. GENERICREC ^. RECH ,
  355. PRIFIELDCNT , SMODE )END ELSE IF RECDATA ^. RECNUM <> 0 THEN SEARCHKEY := CURSORPTR ^. GOTOREC (RECDATA ^. RECNUM )ELSE
  356. SEARCHKEY := GOTOHOME END ;FUNCTION TPXETABLEVIEW.SEARCHSECKEY (RECDATA:PPXERECORD;SMODE:INTEGER):RETCODE ;
  357. VAR OIlO:INTEGER;BEGIN CURSORPTR ^. GENERICREC ^. CLEAR ;IF PRIFIELDCNT <> 0 THEN BEGIN FOR OIlO := 0 TO FIELDCNT - 1
  358.  DO CURSORPTR ^. GENERICREC ^. PUTSTRING (OIlO + 1 , PSTRING (PPXEFIELD (RECDATA ^. FLDCOLL ^. AT (OIlO ))^. DISPSTR )^);
  359. SEARCHSECKEY := PXSRCHFLD (TABLEHAN , CURSORPTR ^. GENERICREC ^. RECH , INDEXNUMBER , SMODE );END ELSE IF RECDATA ^.
  360. RECNUM <> 0 THEN SEARCHSECKEY := CURSORPTR ^. GOTOREC (RECDATA ^. RECNUM )ELSE SEARCHSECKEY := GOTOHOME ;END ;
  361. PROCEDURE TPXETABLEVIEW.REFRESH ;BEGIN IF INDEXNUMBER =0 THEN BEGIN IF SEARCHKEY (RECORDCOLL ^. AT (0 ), SEARCHFIRST )<>
  362. PXSUCCESS THEN SEARCHKEY (RECORDCOLL ^. AT (0 ), CLOSESTRECORD )END ELSE BEGIN IF SEARCHKEY (RECORDCOLL ^. AT (0 ),
  363. SEARCHFIRST )<> PXSUCCESS THEN SEARCHSECKEY (RECORDCOLL ^. AT (0 ), CLOSESTRECORD )END ;READFIELDS ;DRAWVIEW END ;
  364. FUNCTION TPXETABLEVIEW.GOTOHOME :RETCODE ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^. HASCHANGED
  365. )THEN CURSORPTR ^. REFRESH ;WITH CURSORPTR^ DO BEGIN GOTOBEGIN ;IF LASTERROR =PXSUCCESS THEN GOTONEXT END ;GOTOHOME :=
  366. CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.GOTOLAST :RETCODE ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND
  367. (CURSORPTR ^. HASCHANGED )THEN CURSORPTR ^. REFRESH ;WITH CURSORPTR^ DO BEGIN GOTOEND ;IF LASTERROR =PXSUCCESS THEN
  368. GOTOPREV END ;GOTOLAST := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.DOWNREAD :RETCODE ;VAR OIlO:INTEGER;
  369. O10O0l1IO00IO:PPXERECORD;PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD (O10O0l1IO00IO , OI1000l1II00
  370. )END ;PROCEDURE OOIlII01lO1I (OI1000l1II00:POINTER);FAR ;VAR Ol00II10ll1l:PSTRING;OIO1001I000:PPXEFIELDDESC;
  371. BEGIN OIO1001I000 := OI1000l1II00 ;Ol00II10ll1l := PSTRING (PPXEFIELD (O10O0l1IO00IO ^. FLDCOLL ^. AT (OIO1001I000 ^.
  372. FDESC ^. FLDNUM - 1 ))^. DISPSTR );Ol00II10ll1l ^:= FILLSTR (' ', OIO1001I000 ^. FDISPLEN )END ;BEGIN IF TABLELINE ^.
  373. ORIGIN.Y < SIZE.Y - 1 THEN BEGIN INC (TABLELINE ^. ORIGIN.Y );DRAWVIEW ;DOWNREAD := PXSUCCESS END ELSE IF PPXERECORD
  374. (RECORDCOLL ^. AT (SIZE.Y - 4 ))^. RECNUM <> 0 THEN BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^.
  375. HASCHANGED )THEN CURSORPTR ^. REFRESH ;O10O0l1IO00IO := NEW (PPXERECORD , INIT );O10O0l1IO00IO ^:= PPXERECORD (RECORDCOLL
  376. ^. AT (0 ))^;SEARCHKEY (RECORDCOLL ^. AT (RECBUFS - 1 ), SEARCHFIRST );RECORDCOLL ^. FREE (RECORDCOLL ^. AT (0 ));
  377. RECORDCOLL ^. ATINSERT (RECBUFS - 1 , O10O0l1IO00IO );CURSORPTR ^. GOTONEXT ;IF CURSORPTR ^. LASTERROR <>
  378. PXERR_ENDOFTABLE THEN BEGIN CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC );O10O0l1IO00IO ^. RECNUM := CURSORPTR ^.
  379. GETCURRECNUM ;FIELDDESCCOLL ^. FOREACH (@ OI1I01lO00 )END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^.
  380. FOREACH (@ OOIlII01lO1I )END ;DRAWVIEW ;DOWNREAD := CURSORPTR ^. LASTERROR END END ;FUNCTION TPXETABLEVIEW.UPREAD
  381. :RETCODE ;VAR OIlO:INTEGER;O10O0l1IO00IO:PPXERECORD;PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD
  382. (O10O0l1IO00IO , OI1000l1II00 )END ;BEGIN IF TABLELINE ^. ORIGIN.Y > 3 THEN BEGIN DEC (TABLELINE ^. ORIGIN.Y );DRAWVIEW ;
  383. UPREAD := PXSUCCESS END ELSE BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^. HASCHANGED )THEN CURSORPTR
  384. ^. REFRESH ;SEARCHKEY (RECORDCOLL ^. AT (0 ), SEARCHFIRST );CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR <>
  385. PXERR_STARTOFTABLE THEN BEGIN O10O0l1IO00IO := NEW (PPXERECORD , INIT );O10O0l1IO00IO ^:= PPXERECORD (RECORDCOLL ^. AT
  386. (RECBUFS - 1 ))^;RECORDCOLL ^. FREE (RECORDCOLL ^. AT (RECBUFS - 1 ));RECORDCOLL ^. ATINSERT (0 , O10O0l1IO00IO );
  387. CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC );O10O0l1IO00IO ^. RECNUM := CURSORPTR ^. GETCURRECNUM ;FIELDDESCCOLL ^.
  388. FOREACH (@ OI1I01lO00 )END ;DRAWVIEW ;UPREAD := CURSORPTR ^. LASTERROR END END ;FUNCTION TPXETABLEVIEW.PAGEDOWNREAD
  389. :RETCODE ;VAR OIlO:INTEGER;O10O0l1IO0101:PPXERECORD;BEGIN O10O0l1IO0101 := RECORDCOLL ^. AT (SIZE.Y - 4 );IF
  390. O10O0l1IO0101 ^. RECNUM <> 0 THEN BEGIN SEARCHKEY (O10O0l1IO0101 , SEARCHFIRST );CURSORPTR ^. GOTONEXT ;IF CURSORPTR ^.
  391. LASTERROR =PXERR_ENDOFTABLE THEN GOTOLAST ;READFIELDS ;IF O10O0l1IO0101 ^. RECNUM =0 THEN BEGIN FOR OIlO := 6 TO SIZE.Y
  392.  DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR =PXERR_STARTOFTABLE THEN GOTOHOME ;READFIELDS END ;DRAWVIEW END ;
  393. PAGEDOWNREAD := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.PAGEUPREAD :RETCODE ;VAR OIlO:INTEGER;BEGIN SEARCHKEY
  394. (RECORDCOLL ^. AT (0 ), SEARCHFIRST );FOR OIlO := 4 TO SIZE.Y  DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR
  395. =PXERR_STARTOFTABLE THEN GOTOHOME ;IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN READFIELDS ;DRAWVIEW END ;PAGEUPREAD
  396. := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.HOMEREAD :RETCODE ;BEGIN GOTOHOME ;READFIELDS ;DRAWVIEW ;HOMEREAD
  397. := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.ENDREAD :RETCODE ;VAR OIlO:INTEGER;BEGIN GOTOLAST ;FOR OIlO := 6 TO
  398. SIZE.Y  DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR =PXERR_STARTOFTABLE THEN GOTOHOME ;READFIELDS ;DRAWVIEW ;
  399. ENDREAD := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.LOCKREC (RECDATA:PPXERECORD):RETCODE ;
  400. VAR OOO1IlI0l0OI:RETCODE;OIO1O1II01l:WORD;O11lOl0I1O:LONGINT;OIl1I0IlOO:STRING ;BEGIN IF RECDATA ^. RECNUM <> 0 THEN
  401. BEGIN IF EDITLOCKHAN =0 THEN BEGIN OOO1IlI0l0OI := SEARCHKEY (RECDATA , SEARCHFIRST );IF OOO1IlI0l0OI =PXSUCCESS THEN
  402. BEGIN IF ENGINEPTR ^. ENGINETYPE <> PXLOCAL THEN BEGIN REPEAT EDITLOCKHAN := CURSORPTR ^. LOCKRECORD ;OOO1IlI0l0OI :=
  403. CURSORPTR ^. LASTERROR ;IF OOO1IlI0l0OI =PXERR_RECLOCKED THEN BEGIN OIl1I0IlOO := DATABASEPTR ^. GETNETERRUSER ;IF
  404. OIl1I0IlOO =''THEN OIl1I0IlOO := 'unknown or local user';O11lOl0I1O := LONGINT (@ OIl1I0IlOO );OIO1O1II01l := MESSAGEBOX
  405. ('Record is locked by %s.  Try to lock record again?', @ O11lOl0I1O , MFYESBUTTON + MFNOBUTTON )END ELSE OIO1O1II01l :=
  406. CMNO UNTIL (OOO1IlI0l0OI =PXSUCCESS )OR (OIO1O1II01l =CMNO );IF OOO1IlI0l0OI =PXSUCCESS THEN EDITLOCKRECNUM := RECDATA ^.
  407. RECNUM ELSE BEGIN TABLELINE ^. DATA ^:= TABLELINE ^. FIELDSTR ;TABLELINE ^. DRAWVIEW END END ELSE BEGIN EDITLOCKHAN :=
  408. RECDATA ^. RECNUM ;EDITLOCKRECNUM := EDITLOCKHAN END END END ELSE OOO1IlI0l0OI := SEARCHKEY (RECDATA , SEARCHFIRST )END
  409. ELSE BEGIN EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;OOO1IlI0l0OI := PXSUCCESS END ;IF (OOO1IlI0l0OI =PXERR_RECDELETED )OR
  410. (OOO1IlI0l0OI =PXERR_RECNOTFOUND )THEN REFRESH ;LOCKREC := OOO1IlI0l0OI END ;FUNCTION TPXETABLEVIEW.UNLOCKREC :RETCODE ;
  411. BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (EDITLOCKHAN <> 0 )THEN CURSORPTR ^. UNLOCKRECORD (EDITLOCKHAN );
  412. EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;UNLOCKREC := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.LOCKUPDATE
  413. :RETCODE ;BEGIN IF (PPXERECORD (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))^. RECNUM <> EDITLOCKRECNUM )OR
  414. (STATE AND SFSELECTED <> 0 )THEN LOCKUPDATE := UNLOCKREC ELSE LOCKUPDATE := PXSUCCESS END ;
  415. FUNCTION TPXETABLEVIEW.WRITEFIELD :RETCODE ;BEGIN WRITEFIELD := CURSORPTR ^. LASTERROR END ;
  416. FUNCTION TPXETABLEVIEW.BLOBMEMOEDIT :RETCODE ;VAR O101I1lllO0OO:LONGINT;OOO1IlI0l0OI:RETCODE;
  417. O10OO1000O0OI:PPXEFIELDDESC;OOO0O1lIIOO1:PPXEMEMOREC;OOIIOOlOl0Il:PPXEMEMOEDIT;PROCEDURE O10OlOO0O1l1O ;
  418. VAR OOIl000I1:CHAR;OI110IlIOIO1:WORD;BEGIN IF OOO0O1lIIOO1 ^. LEN > 0 THEN BEGIN OOIl000I1 := #0;FOR OI110IlIOIO1 := 0 TO
  419. OOO0O1lIIOO1 ^. LEN - 1  DO BEGIN IF (OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] =#10)AND (OOIl000I1 <> #13)THEN
  420. BEGIN OOIl000I1 := OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] ;OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] := #13;END ELSE OOIl000I1
  421. := OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] END END END ;BEGIN O10OO1000O0OI := FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );
  422. OOO1IlI0l0OI := CURSORPTR ^. GENERICREC ^. OPENBLOBREAD (O10OO1000O0OI ^. FDESC ^. FLDNUM , TRUE );IF NOT ERRORBOX
  423. (OOO1IlI0l0OI )THEN BEGIN O101I1lllO0OO := CURSORPTR ^. GENERICREC ^. GETBLOBSIZE (O10OO1000O0OI ^. FDESC ^. FLDNUM );IF
  424. O101I1lllO0OO < PXEMAXUMEMOSIZE THEN BEGIN OOO0O1lIIOO1 := MEMALLOC (SIZEOF (TPXEMEMOREC ));OOO0O1lIIOO1 ^. LEN :=
  425. O101I1lllO0OO ;OOIIOOlOl0Il := NEW (PPXEMEMOEDIT , INIT );IF OOIIOOlOl0Il ^. VALID (CMVALID )THEN BEGIN IF O101I1lllO0OO
  426. <> 0 THEN BEGIN OOO1IlI0l0OI := CURSORPTR ^. GENERICREC ^. GETBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , O101I1lllO0OO , 0
  427. , @ OOO0O1lIIOO1 ^. DATA );O10OlOO0O1l1O END ;CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM ,
  428. FALSE );APPLICATION ^. EXECUTEDIALOG (OOIIOOlOl0Il , OOO0O1lIIOO1 );FREEMEM (OOO0O1lIIOO1 , SIZEOF (TPXEMEMOREC ))END
  429. ELSE BEGIN CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , FALSE );IF OOO0O1lIIOO1 <> NIL THEN
  430. FREEMEM (OOO0O1lIIOO1 , SIZEOF (TPXEMEMOREC ));DISPOSE (OOIIOOlOl0Il , DONE );APPLICATION ^. OUTOFMEMORY END END ELSE
  431. BEGIN CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , FALSE );MESSAGEBOX
  432. (#3'Memo blob too large to fit editor buffer.', NIL , MFERROR OR MFOKBUTTON )END END ;BLOBMEMOEDIT := OOO1IlI0l0OI END ;
  433. FUNCTION TPXETABLEVIEW.BLOBEDIT :RETCODE ;VAR O10OO1000O0OI:PPXEFIELDDESC;O10O0l1IO0101:PPXERECORD;BEGIN O10OO1000O0OI :=
  434. FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );O10O0l1IO0101 := RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS );IF
  435. (O10O0l1IO0101 ^. RECNUM <> 0 )AND (O10OO1000O0OI ^. FDESC ^. FLDTYPE =FLDBLOB )THEN BEGIN IF (LOCKREC (O10O0l1IO0101
  436. )=PXSUCCESS )AND (CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC )=PXSUCCESS )THEN CASE O10OO1000O0OI ^. FDESC ^.
  437. FLDSUBTYPE  OF FLDSTMEMO :BLOBMEMOEDIT ELSE MESSAGEBOX (#3'This BLOB format not currently supported', NIL , MFINFORMATION
  438. + MFOKBUTTON )END END ;BLOBEDIT := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.DELETEREC :RETCODE ;
  439. VAR OIlO:INTEGER;O10O0l1IO0101:PPXERECORD;BEGIN OIlO := TABLELINE ^. ORIGIN.Y - PXELINEOFS ;O10O0l1IO0101 := RECORDCOLL
  440. ^. AT (OIlO );IF O10O0l1IO0101 ^. RECNUM <> 0 THEN IF LOCKREC (O10O0l1IO0101 )=PXSUCCESS THEN BEGIN IF CURSORPTR ^.
  441. DELETEREC =PXSUCCESS THEN BEGIN EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;IF OIlO <> 0 THEN BEGIN GOTOHOME ;REFRESH END ELSE
  442. BEGIN CURSORPTR ^. GOTONEXT ;READFIELDS ;DRAWVIEW END END END ;DELETEREC := CURSORPTR ^. LASTERROR END ;
  443. PROCEDURE TPXETABLEVIEW.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );CASE EVENT.WHAT  OF EVKEYDOWN
  444. :BEGIN CASE EVENT.KEYCODE  OF KBDOWN :DOWNREAD ;KBUP :UPREAD ;KBPGDN :PAGEDOWNREAD ;KBPGUP :PAGEUPREAD ;KBCTRLPGUP
  445. :HOMEREAD ;KBCTRLPGDN :ENDREAD ELSE CASE EVENT.CHARCODE  OF ^Y :DELETEREC ELSE EXIT END END ;CLEAREVENT (EVENT )END ;
  446. EVBROADCAST :BEGIN CASE EVENT.COMMAND  OF CMSCROLLBARCHANGED :BEGIN IF EVENT.INFOPTR =HSCROLLBAR THEN DRAWVIEW END ;
  447. CMFIELDEXIT :BEGIN IF TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN BEGIN IF ERRORBOX (WRITEFIELD )THEN
  448. BEGIN TABLELINE ^. SELEND := 0 ;DRAWLINE END END ELSE UNLOCKREC END END END END END ;FUNCTION TPXETABLEVIEW.VALID
  449. (COMMAND:WORD):BOOLEAN ;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0 := INHERITED VALID(COMMAND );IF COMMAND
  450. =CMRELEASEDFOCUS THEN OIOI100IlI0 := LOCKREC (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))=PXSUCCESS ;VALID :=
  451. OIOI100IlI0 END ;CONSTRUCTOR TPXETABLEWIN.INIT (TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
  452. IDXNUM:FIELDNUMBER);VAR OO1I:TRECT;OOIOI1II000O:PSCROLLBAR;BEGIN DESKTOP ^. GETEXTENT (OO1I );INHERITED INIT(OO1I ,
  453. TBLNAME );OPTIONS := OPTIONS OR OFVALIDATE OR OFTILEABLE ;FLAGS := WFMOVE + WFGROW + WFCLOSE + WFZOOM ;GROWMODE :=
  454. GFGROWREL ;PALETTE := DPBLUEDIALOG ;OOIOI1II000O := STANDARDSCROLLBAR (SBHORIZONTAL OR SBHANDLEKEYBOARD );INSERT
  455. (OOIOI1II000O );GETEXTENT (OO1I );OO1I.GROW (- 1 , - 1 );TABLEVIEW := NEW (PPXETABLEVIEW , INIT (OO1I , OOIOI1II000O ,
  456. TBLNAME , ENGPTR , DBPTR , CURPTR , IDXNUM ));INSERT (TABLEVIEW );OO1I.ASSIGN (2 , 3 , 10 , 4 );TABLEVIEW ^. TABLELINE :=
  457. NEW (PPXETABLELINE , INIT (OO1I , 255 ));INSERT (TABLEVIEW ^. TABLELINE );TABLEVIEW ^. TABLELINE ^. MOVETO (2 , 3 );
  458. SELECTNEXT (FALSE )END ;PROCEDURE TPXETABLEWIN.SIZELIMITS (VAR MIN,MAX:TPOINT);BEGIN INHERITED SIZELIMITS(MIN , MAX );IF
  459. TABLEVIEW ^. TABLELINE ^. STATE AND SFSELECTED <> 0 THEN BEGIN MIN := SIZE ;MAX := SIZE END END ;
  460. PROCEDURE TPXETABLEWIN.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF ASTATE
  461. =SFACTIVE THEN BEGIN IF ENABLE THEN BEGIN TABLEVIEW ^. REFRESH ;ENABLECOMMANDS (PXEEDITCMDS )END ELSE DISABLECOMMANDS
  462. (PXEEDITCMDS )END END ;PROCEDURE TPXETABLEWIN.HANDLEEVENT (VAR EVENT:TEVENT);PROCEDURE O10OIIlOlIO11 ;
  463. VAR OOlOO0O1lO0I:INTEGER;BEGIN WITH TABLEVIEW^ DO BEGIN IF EVENT.KEYCODE =KBTAB THEN BEGIN IF HSCROLLBAR ^. VALUE <
  464. FIELDCNT - 1 THEN OOlOO0O1lO0I := 1 ELSE OOlOO0O1lO0I := 0 END ELSE BEGIN IF HSCROLLBAR ^. VALUE > 0 THEN OOlOO0O1lO0I :=
  465. - 1 ELSE OOlOO0O1lO0I := 0 END ;IF OOlOO0O1lO0I <> 0 THEN BEGIN IF TABLELINE ^. STATE AND SFSELECTED <> 0 THEN BEGIN IF
  466. TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN BEGIN IF NOT ERRORBOX (WRITEFIELD )THEN BEGIN IF EDITLOCKRECNUM =0 THEN
  467. FOCUS ELSE BEGIN HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I );TABLELINE ^. SELECTALL (TRUE )END END END
  468. ELSE BEGIN HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I );TABLELINE ^. SELECTALL (TRUE )END END ELSE
  469. HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I )END ;CLEAREVENT (EVENT )END END ;PROCEDURE OOlOOOlOI1Ol ;
  470. BEGIN WITH TABLEVIEW^ DO BEGIN IF PPXEFIELDDESC (FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE ))^. FDESC ^. FLDTYPE <>
  471. FLDBLOB THEN BEGIN IF TABLELINE ^. STATE AND SFSELECTED =0 THEN TABLELINE ^. FOCUS ELSE TABLEVIEW ^. FOCUS END ELSE
  472. TABLEVIEW ^. BLOBEDIT ;LOCKUPDATE END END ;PROCEDURE O1lI0ll100OO ;VAR OOII0IOOI010:STRING ;
  473. BEGIN WITH TABLEVIEW^ DO BEGIN IF (CLIPBOARD <> NIL )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )AND (TABLELINE ^.
  474. SELEND > 0 )THEN BEGIN OOII0IOOI010 := COPY (TABLELINE ^. DATA ^, TABLELINE ^. SELSTART + 1 , TABLELINE ^. SELEND -
  475. TABLELINE ^. SELSTART );CLIPBOARD ^. INSERTTEXT (@ OOII0IOOI010 [ 1 ] , BYTE (OOII0IOOI010 [ 0 ] ), TRUE )END END END ;
  476. PROCEDURE O1lIlOl1OlIO ;VAR OOIlIlIlI010:WORD;OOO0IlO0OI1O:STRING ;O10OO1000O0OI:PPXEFIELDDESC;
  477. BEGIN WITH TABLEVIEW^ DO IF (CLIPBOARD <> NIL )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )THEN BEGIN O10OO1000O0OI :=
  478. FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );OOO0IlO0OI1O := '';OOIlIlIlI010 := CLIPBOARD ^. SELSTART ;WHILE (OOIlIlIlI010
  479. < CLIPBOARD ^. SELEND )AND (BYTE (OOO0IlO0OI1O [ 0 ] )< O10OO1000O0OI ^. FDISPLEN ) DO BEGIN OOO0IlO0OI1O := OOO0IlO0OI1O
  480. + CLIPBOARD ^. BUFCHAR (OOIlIlIlI010 );INC (OOIlIlIlI010 )END ;IF OOO0IlO0OI1O <> ''THEN TABLELINE ^. SETDATA
  481. (OOO0IlO0OI1O )END END ;BEGIN CASE EVENT.WHAT  OF EVKEYDOWN :BEGIN CASE EVENT.KEYCODE  OF KBTAB , KBSHIFTTAB
  482. :O10OIIlOlIO11 ;KBENTER :OOlOOOlOI1Ol END END END ;INHERITED HANDLEEVENT(EVENT );CASE EVENT.WHAT  OF EVCOMMAND
  483. :BEGIN CASE EVENT.COMMAND  OF CMCOPY :O1lI0ll100OO ;CMPASTE :O1lIlOl1OlIO END END ;EVBROADCAST :BEGIN CASE EVENT.COMMAND
  484.  OF CMFIELDENTER :BEGIN TABLEVIEW ^. HSCROLLBAR ^. SETSTATE (SFDISABLED , TRUE );FLAGS := FLAGS AND NOT WFZOOM ;FRAME ^.
  485. DRAWVIEW END ;CMFIELDEXIT :BEGIN TABLEVIEW ^. HSCROLLBAR ^. SETSTATE (SFDISABLED , FALSE );FLAGS := FLAGS OR WFZOOM ;
  486. FRAME ^. DRAWVIEW END ;CMVIDEOCHANGE :BEGIN TABLEVIEW ^. RECBUFS := DESKTOP ^. SIZE.Y - PXERECBUFDIFF ;IF STATE AND
  487. SFSELECTED <> 0 THEN TABLEVIEW ^. REFRESH END END END END END ;FUNCTION TPXETABLEWIN.VALID (COMMAND:WORD):BOOLEAN ;
  488. VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0 := INHERITED VALID(COMMAND );IF (COMMAND =CMRELEASEDFOCUS )OR (COMMAND =CMCLOSE
  489. )THEN BEGIN WITH TABLEVIEW^ DO BEGIN IF TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN OIOI100IlI0 := NOT ERRORBOX
  490. (WRITEFIELD )ELSE OIOI100IlI0 := TRUE ;IF (OIOI100IlI0 )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )THEN TABLEVIEW ^.
  491. FOCUS ;IF COMMAND =CMRELEASEDFOCUS THEN LOCKUPDATE ELSE UNLOCKREC END END ;VALID := OIOI100IlI0 END ;END .
  492.