home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / TCYBER.ZIP / PXBROWSE.PAS < prev    next >
Pascal/Delphi Source File  |  1994-01-15  |  31KB  |  310 lines

  1. {
  2. Turbo Vision CyberTools 1.0
  3. (C) 1994 Steve Goldsmith
  4. All Rights Reserved
  5.  
  6. PX Browse is a generic paradox table browser and supporting tools to
  7. interface Turbo Vision with the Database Framework.
  8. }
  9.  
  10. UNIT PXBROWSE;{$I APP.INC} {$X+} INTERFACE USES DOS,OOPXENG,PXENGINE,DRIVERS,OBJECTS,VIEWS,VALIDATE,
  11. DIALOGS,MSGBOX,EDITORS,APP,MEMORY,CBCMDS;CONST PXBBLOBNAMES:ARRAY [0..4] OF STRING [17]
  12. =('<BLOB Memo>','<BLOB Binary>','<BLOB Fmt Memo>','<BLOB OLE Object>','<BLOB Graphic>');PXBMAXUMEMOSIZE=16384;
  13. PXBFIXEDMAX=1E13;PXBDOUBLEMAX:EXTENDED=1.7E308;PXBDOUBLEMIN:EXTENDED=5E-324;
  14. TYPE PPXBFIELDNAME=^TPXBFIELDNAME;TPXBFIELDNAME=OBJECT(TSTATICTEXT)XYZX,XYZY:TPOINT;CONSTRUCTOR INIT
  15. (VAR BOUNDS:TRECT;CONST ATEXT:STRING);PROCEDURE CALCBOUNDS(VAR BOUNDS:TRECT;DELTA:TPOINT);VIRTUAL;END;
  16. PPXBINPUTLINE=^TPXBINPUTLINE;TPXBINPUTLINE=OBJECT(TINPUTLINE)YXZZX:PXFIELDTYPE;YXZZZ:PXFIELDSUBTYPE;
  17. YXZXY:FIELDNUMBER;YXZYX:RECORDNUMBER;XYZX,XYZY,XYZZ:TPOINT;XYZXX,XYZXY,XYZXZ,XYZYX,
  18. XYZYY:PPXBINPUTLINE;CONSTRUCTOR INIT(VAR BOUNDS:TRECT;AMAXLEN:INTEGER);PROCEDURE CALCBOUNDS(VAR BOUNDS:TRECT;
  19. DELTA:TPOINT);VIRTUAL;PROCEDURE SETSTATE(ASTATE:WORD;ENABLE:BOOLEAN);VIRTUAL;FUNCTION VALID
  20. (COMMAND:WORD):BOOLEAN;VIRTUAL;PROCEDURE HANDLEEVENT(VAR EVENT:TEVENT);VIRTUAL;END;
  21. TPXBENGINECFGREC=RECORD ENGTYP,DOSSHR,WINSHR,CRTFMT,LCKMOD,SRTORD:INTEGER;SWPSIZ,TABHAN,RECHAN,
  22. LCKHAN,FILHAN:STRING [6];NETPAT:PATHSTR;USRNAM:STRING [MAXNAMELEN];CLINAM:STRING [MAXNAMELEN];END;
  23. PPXBENGINECFG=^TPXBENGINECFG;TPXBENGINECFG=OBJECT(TDIALOG)CONSTRUCTOR INIT;END;PPXBMEMOREC=^TPXBMEMOREC;
  24. TPXBMEMOREC=RECORD LEN:WORD;DATA:ARRAY [0..PXBMAXUMEMOSIZE-1] OF CHAR;END;PPXBMEMOEDIT=^TPXBMEMOEDIT;
  25. TPXBMEMOEDIT=OBJECT(TDIALOG)MEMO:PMEMO;CONSTRUCTOR INIT;END;PPXBDIALOG=^TPXBDIALOG;
  26. TPXBDIALOG=OBJECT(TDIALOG)XYZYZ,XYZZX,XYZZY:INTEGER;XYZZZ:FIELDNUMBER;YXZX:LOCKHANDLE;YXZY:RECORDNUMBER;
  27. YXZZ,ZXYX:STRING;ZXYY:PATHSTR;ZXYZ:PENGINE;ZYXX:PDATABASE;ZYXY:PCURSOR;ZYXZ:PCOLLECTION;ZZXX:PRECORD;
  28. ZZXY:PINPUTLINE;ZZXZ:TPOINT;ZZZX:PGROUP;YXZZY,YXZXX,YXZXZ:PPXBINPUTLINE;YXZYY:PPXBFIELDNAME;
  29. CONSTRUCTOR INIT(RECLINES:INTEGER;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
  30. IDXNUM:FIELDNUMBER);DESTRUCTOR DONE;VIRTUAL;PROCEDURE UPDATESTATUS(S:STRING);FUNCTION ERRORBOX
  31. (ERRCODE:INTEGER):BOOLEAN;VIRTUAL;PROCEDURE INITBROWSER;VIRTUAL;FUNCTION INPLINELEN(P:PFIELDDESC):INTEGER;
  32. VIRTUAL;PROCEDURE MAKEVALIDATOR(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE MAKEMOVELINKS;VIRTUAL;PROCEDURE BUILDFIELDS
  33. ;VIRTUAL;PROCEDURE READFIELDS;VIRTUAL;FUNCTION SEARCHKEY(INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;FUNCTION LOCKREC
  34. (INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;FUNCTION UNLOCKREC:RETCODE;VIRTUAL;PROCEDURE LOCKUPDATE
  35. (INPLINE:PPXBINPUTLINE);VIRTUAL;FUNCTION WRITEFIELD(INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;PROCEDURE TABPOSLINE
  36. (INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE TOGGLEINS;VIRTUAL;PROCEDURE FIELDCHANGED(INPLINE:PPXBINPUTLINE);VIRTUAL;
  37. PROCEDURE FIELDENTER(INPLINE:PPXBINPUTLINE);VIRTUAL;FUNCTION FIELDEXIT(INPLINE:PPXBINPUTLINE):BOOLEAN;VIRTUAL;
  38. PROCEDURE GOTOHOME;VIRTUAL;PROCEDURE GOTOLAST;VIRTUAL;PROCEDURE DOWNREAD(INPLINE:PPXBINPUTLINE);VIRTUAL;
  39. PROCEDURE UPREAD(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE PAGEUPREAD;VIRTUAL;PROCEDURE PAGEDOWNREAD;VIRTUAL;
  40. PROCEDURE HOMEREAD;VIRTUAL;PROCEDURE ENDREAD;VIRTUAL;PROCEDURE COPYCLIP(INPLINE:PPXBINPUTLINE);VIRTUAL;
  41. PROCEDURE PASTECLIP(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE BLOBMEMOEDIT(INPLINE:PPXBINPUTLINE);VIRTUAL;
  42. PROCEDURE BLOBEDIT(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE DELETEREC(INPLINE:PPXBINPUTLINE);VIRTUAL;
  43. PROCEDURE SIZELIMITS(VAR MIN,MAX:TPOINT);VIRTUAL;PROCEDURE HANDLEEVENT(VAR EVENT:TEVENT);VIRTUAL;FUNCTION VALID
  44. (COMMAND:WORD):BOOLEAN;VIRTUAL;END;FUNCTION TRIMSTR(S:STRING):STRING;FUNCTION INTTOSTR(L:LONGINT):STRING;
  45. FUNCTION STRTOINT(S:STRING):LONGINT;PROCEDURE ENGCFGTODLGCFG(ENGCFG:TENV;VAR DLGCFG:TPXBENGINECFGREC);
  46. PROCEDURE DLGCFGTOENGCFG(DLGCFG:TPXBENGINECFGREC;VAR ENGCFG:TENV);IMPLEMENTATION FUNCTION TRIMSTR(S:STRING):STRING
  47. ;VAR OIlO:WORD;BEGIN WHILE(BYTE(S [0])>0)AND(S [BYTE(S [0])]<=' ') DO DEC(BYTE(S [0]));OIlO:=1;
  48. WHILE(OIlO<=BYTE(S [0]))AND(S [OIlO]<=' ') DO INC(OIlO);DEC(OIlO);IF OIlO >0 THEN DELETE(S,1,OIlO
  49. );TRIMSTR:=S END;FUNCTION INTTOSTR(L:LONGINT):STRING;VAR OO1O:STRING;BEGIN STR(L,OO1O);INTTOSTR:=OO1O END;
  50. FUNCTION STRTOINT(S:STRING):LONGINT;VAR Ol000OO00IlO:INTEGER;OO01:LONGINT;BEGIN VAL(S,OO01,Ol000OO00IlO);
  51. STRTOINT:=OO01 END;PROCEDURE ENGCFGTODLGCFG(ENGCFG:TENV;VAR DLGCFG:TPXBENGINECFGREC);
  52. BEGIN WITH ENGCFG DO BEGIN WITH DLGCFG DO BEGIN ENGTYP:=INTEGER(ENGINETYPE);DOSSHR:=INTEGER(DOSSHARE);WINSHR:=
  53. INTEGER(WINSHARE);CRTFMT:=INTEGER(TABCRTMODE);LCKMOD:=INTEGER(TABLCKMODE);SRTORD:=INTEGER(SORTORDER);
  54. SWPSIZ:=INTTOSTR(BUFSIZE);TABHAN:=INTTOSTR(MAXTABLES);RECHAN:=INTTOSTR(MAXRECBUFS);LCKHAN:=INTTOSTR
  55. (MAXLOCKS);FILHAN:=INTTOSTR(MAXFILES);NETPAT:=NETNAMEPATH;USRNAM:=USERNAME;CLINAM:=CLIENTNAME END END END
  56. ;PROCEDURE DLGCFGTOENGCFG(DLGCFG:TPXBENGINECFGREC;VAR ENGCFG:TENV);BEGIN WITH DLGCFG DO BEGIN WITH ENGCFG DO BEGIN
  57. ENGINETYPE:=TENGINETYPE(ENGTYP);DOSSHARE:=PXDOSSHARE(DOSSHR);WINSHARE:=PXWINSHARE(WINSHR);TABCRTMODE:=
  58. PXTABCRTMODE(CRTFMT);TABLCKMODE:=PXTBLLCKMODE(LCKMOD);SORTORDER:=PXSORTORDER(SRTORD);BUFSIZE:=STRTOINT
  59. (SWPSIZ);MAXTABLES:=STRTOINT(TABHAN);MAXRECBUFS:=STRTOINT(RECHAN);MAXLOCKS:=STRTOINT(LCKHAN);MAXFILES:=
  60. STRTOINT(FILHAN);NETNAMEPATH:=NETPAT;USERNAME:=USRNAM;CLIENTNAME:=CLINAM END END END;CONSTRUCTOR
  61. TPXBENGINECFG.INIT;VAR OO1I:TRECT;O10I0l0O:PRADIOBUTTONS;OIO1000lI0l:PINPUTLINE;BEGIN OO1I.ASSIGN(0,0,53
  62. ,20);INHERITED INIT(OO1I,'Engine Options');OPTIONS:=OPTIONS OR OFCENTERED;OO1I.ASSIGN(2,3,15,6);
  63. O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('Local',NEWSITEM('Network',NEWSITEM('Windows',NIL)))));
  64. INSERT(O10I0l0O);OO1I.ASSIGN(1,2,13,3);INSERT(NEW(PLABEL,INIT(OO1I,'~E~ngine type',O10I0l0O)));
  65. OO1I.ASSIGN(17,3,30,6);O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('Local',NEWSITEM('Network',
  66. NEWSITEM('None',NIL)))));INSERT(O10I0l0O);OO1I.ASSIGN(16,2,30,3);INSERT(NEW(PLABEL,INIT(OO1I,
  67. '~D~OS share',O10I0l0O)));OO1I.ASSIGN(32,3,51,6);O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM
  68. ('Shared',NEWSITEM('Single client',NEWSITEM('Exclusive',NIL)))));INSERT(O10I0l0O);OO1I.ASSIGN(31,2,47,3);
  69. INSERT(NEW(PLABEL,INIT(OO1I,'~W~indows share',O10I0l0O)));OO1I.ASSIGN(2,8,15,10);O10I0l0O:=NEW
  70. (PRADIOBUTTONS,INIT(OO1I,NEWSITEM('4.0',NEWSITEM('3.5',NIL))));INSERT(O10I0l0O);OO1I.ASSIGN(1,7,15,8
  71. );INSERT(NEW(PLABEL,INIT(OO1I,'~C~reate format',O10I0l0O)));OO1I.ASSIGN(17,8,30,10);O10I0l0O:=NEW
  72. (PRADIOBUTTONS,INIT(OO1I,NEWSITEM('4.0',NEWSITEM('3.5',NIL))));INSERT(O10I0l0O);OO1I.ASSIGN(16,7,30,8
  73. );INSERT(NEW(PLABEL,INIT(OO1I,'~L~ock mode',O10I0l0O)));OO1I.ASSIGN(32,8,51,13);O10I0l0O:=NEW
  74. (PRADIOBUTTONS,INIT(OO1I,NEWSITEM('ASCII',NEWSITEM('International',NEWSITEM('Norwegian 3.5',NEWSITEM
  75. ('Norwegian 4.0',NEWSITEM('Swedish',NIL)))))));INSERT(O10I0l0O);OO1I.ASSIGN(31,7,51,8);INSERT(NEW(PLABEL
  76. ,INIT(OO1I,'~S~ort order',O10I0l0O)));OO1I.ASSIGN(13,11,21,12);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I
  77. ,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(8,256)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,11,
  78. 12,12);INSERT(NEW(PLABEL,INIT(OO1I,'Swap si~z~e',OIO1000lI0l)));OO1I.ASSIGN(13,12,21,13);OIO1000lI0l
  79. :=NEW(PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(1,64)));INSERT
  80. (OIO1000lI0l);OO1I.ASSIGN(1,12,12,13);INSERT(NEW(PLABEL,INIT(OO1I,'~T~ables',OIO1000lI0l)));
  81. OO1I.ASSIGN(13,13,21,14);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW
  82. (PRANGEVALIDATOR,INIT(1,512)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,13,12,14);INSERT(NEW(PLABEL,INIT
  83. (OO1I,'~R~ecords',OIO1000lI0l)));OO1I.ASSIGN(13,14,21,15);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,6));
  84. OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(1,128)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,14,12,15
  85. );INSERT(NEW(PLABEL,INIT(OO1I,'L~o~cks',OIO1000lI0l)));OO1I.ASSIGN(13,15,21,16);OIO1000lI0l:=NEW
  86. (PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(3,255)));INSERT(OIO1000lI0l
  87. );OO1I.ASSIGN(1,15,12,16);INSERT(NEW(PLABEL,INIT(OO1I,'~F~iles',OIO1000lI0l)));OO1I.ASSIGN(32,14,51
  88. ,15);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,SIZEOF(PATHSTR)-1));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,14,
  89. 31,15);INSERT(NEW(PLABEL,INIT(OO1I,'Net ~p~ath',OIO1000lI0l)));OO1I.ASSIGN(32,15,51,16);OIO1000lI0l
  90. :=NEW(PINPUTLINE,INIT(OO1I,MAXNAMELEN));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,15,31,16);INSERT(NEW
  91. (PLABEL,INIT(OO1I,'~N~ame',OIO1000lI0l)));OO1I.ASSIGN(32,16,51,17);OIO1000lI0l:=NEW(PINPUTLINE,INIT
  92. (OO1I,MAXNAMELEN));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,16,31,17);INSERT(NEW(PLABEL,INIT(OO1I,
  93. 'Cl~i~ent',OIO1000lI0l)));OO1I.ASSIGN(1,17,11,19);INSERT(NEW(PBUTTON,INIT(OO1I,'O~K~',CMOK,BFDEFAULT
  94. )));OO1I.ASSIGN(12,17,22,19);INSERT(NEW(PBUTTON,INIT(OO1I,'Cancel',CMCANCEL,BFNORMAL)))END;
  95. CONSTRUCTOR TPXBMEMOEDIT.INIT;VAR OO1I:TRECT;OOIOI1II000O,OOIOI1II00l1:PSCROLLBAR;BEGIN APPLICATION^.GETEXTENT(OO1I
  96. );OO1I.B.Y:=OO1I.B.Y-2;OO1I.A.Y:=(OO1I.B.Y SHR 1)-1;INHERITED INIT(OO1I,'Memo Editor');GETEXTENT(OO1I);
  97. OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.B.X-1;OO1I.A.Y:=OO1I.B.Y-5;OO1I.B.Y:=OO1I.A.Y+1;OOIOI1II000O:=
  98. NEW(PSCROLLBAR,INIT(OO1I));INSERT(OOIOI1II000O);GETEXTENT(OO1I);OO1I.A.X:=OO1I.B.X-1;OO1I.B.X:=OO1I.A.X+
  99. 1;OO1I.A.Y:=OO1I.A.Y+1;OO1I.B.Y:=OO1I.B.Y-5;OOIOI1II00l1:=NEW(PSCROLLBAR,INIT(OO1I));INSERT
  100. (OOIOI1II00l1);GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.B.X-1;OO1I.A.Y:=OO1I.A.Y+1;OO1I.B.Y
  101. :=OO1I.B.Y-5;MEMO:=NEW(PMEMO,INIT(OO1I,OOIOI1II000O,OOIOI1II00l1,NIL,PXBMAXUMEMOSIZE));INSERT(MEMO);
  102. GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.A.X+10;OO1I.A.Y:=OO1I.B.Y-3;OO1I.B.Y:=OO1I.A.Y+2
  103. ;INSERT(NEW(PBUTTON,INIT(OO1I,'O~K~',CMOK,BFDEFAULT)));OO1I.A.X:=OO1I.B.X+2;OO1I.B.X:=OO1I.A.X+10;
  104. INSERT(NEW(PBUTTON,INIT(OO1I,'Cancel',CMCANCEL,BFNORMAL)));SELECTNEXT(FALSE)END;
  105. CONSTRUCTOR TPXBFIELDNAME.INIT(VAR BOUNDS:TRECT;CONST ATEXT:STRING);BEGIN INHERITED INIT(BOUNDS,ATEXT);XYZX:=
  106. BOUNDS.A;GETEXTENT(BOUNDS);XYZY:=BOUNDS.B END;PROCEDURE TPXBFIELDNAME.CALCBOUNDS(VAR BOUNDS:TRECT;
  107. DELTA:TPOINT);BEGIN BOUNDS.A.X:=ORIGIN.X;BOUNDS.A.Y:=ORIGIN.Y;BOUNDS.B.X:=ORIGIN.X+XYZY.X;BOUNDS.B.Y:=
  108. ORIGIN.Y+XYZY.Y END;CONSTRUCTOR TPXBINPUTLINE.INIT(VAR BOUNDS:TRECT;AMAXLEN:INTEGER);BEGIN INHERITED INIT(BOUNDS
  109. ,AMAXLEN);OPTIONS:=OPTIONS OR OFVALIDATE;XYZX:=BOUNDS.A;GETEXTENT(BOUNDS);XYZY:=BOUNDS.B END;
  110. PROCEDURE TPXBINPUTLINE.CALCBOUNDS(VAR BOUNDS:TRECT;DELTA:TPOINT);BEGIN BOUNDS.A.X:=ORIGIN.X;BOUNDS.A.Y:=ORIGIN.Y;
  111. BOUNDS.B.X:=ORIGIN.X+XYZY.X;BOUNDS.B.Y:=ORIGIN.Y+XYZY.Y END;PROCEDURE TPXBINPUTLINE.SETSTATE(ASTATE:WORD;
  112. ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE,ENABLE);IF(ASTATE=SFSELECTED)AND(STATE AND SFACTIVE<>0)AND
  113. (STATE AND SFSELECTED<>0)THEN MESSAGE(OWNER^.OWNER,EVCOMMAND,CMFIELDENTER,@ SELF)END;
  114. FUNCTION TPXBINPUTLINE.VALID(COMMAND:WORD):BOOLEAN;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0:=INHERITED VALID(COMMAND
  115. );IF COMMAND=CMRELEASEDFOCUS THEN BEGIN IF MESSAGE(OWNER^.OWNER,EVCOMMAND,CMFIELDEXIT,@ SELF)=NIL THEN
  116. BEGIN SELECT;OIOI100IlI0:=FALSE END END;VALID:=OIOI100IlI0 END;PROCEDURE TPXBINPUTLINE.HANDLEEVENT
  117. (VAR EVENT:TEVENT);BEGIN IF EVENT.WHAT=EVKEYDOWN THEN BEGIN IF YXZZX=FLDBLOB THEN BEGIN CLEAREVENT(EVENT);
  118. INHERITED HANDLEEVENT(EVENT)END ELSE BEGIN INHERITED HANDLEEVENT(EVENT);MESSAGE(OWNER^.OWNER,EVCOMMAND,
  119. CMFIELDCHANGED,@ SELF)END END ELSE INHERITED HANDLEEVENT(EVENT)END;CONSTRUCTOR TPXBDIALOG.INIT
  120. (RECLINES:INTEGER;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;IDXNUM:FIELDNUMBER);VAR OO1I:TRECT;
  121. OO1100I1001:PVIEW;BEGIN APPLICATION^.GETEXTENT(OO1I);OO1I.B.Y:=OO1I.A.Y+RECLINES+6;INHERITED INIT(OO1I,
  122. TBLNAME);OPTIONS:=OPTIONS OR OFVALIDATE OR OFTILEABLE;FLAGS:=WFMOVE+WFGROW+WFCLOSE+WFZOOM;GROWMODE:=
  123. GFGROWREL;PALETTE:=DPBLUEDIALOG;GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+2;OO1I.B.X:=OO1I.A.X+12;OO1I.A.Y:=
  124. OO1I.B.Y-1;ZZXY:=NEW(PINPUTLINE,INIT(OO1I,10));ZZXY^.OPTIONS:=ZZXY^.OPTIONS AND NOT OFSELECTABLE;ZZXY
  125. ^.GROWMODE:=GFGROWLOY;INSERT(ZZXY);GETEXTENT(OO1I);INC(OO1I.A.X,2);INC(OO1I.A.Y,2);DEC(OO1I.B.X,2);
  126. DEC(OO1I.B.Y,2);ZZZX:=NEW(PGROUP,INIT(OO1I));WITH ZZZX^DO BEGIN GROWMODE:=GFGROWHIX+GFGROWHIY;GETEXTENT
  127. (OO1I);XYZZY:=OO1I.B.Y-2;OO1100I1001:=NEW(PVIEW,INIT(OO1I));OO1100I1001^.GROWMODE:=GFGROWHIX+GFGROWHIY
  128. ;INSERT(OO1100I1001)END;INSERT(ZZZX);GETEXTENT(OO1I);ZZXZ.X:=OO1I.B.X;ZZXZ.Y:=OO1I.B.Y;ZXYY:=TBLNAME;
  129. ZXYZ:=ENGPTR;ZYXX:=DBPTR;ZYXY:=CURPTR;XYZZZ:=IDXNUM;INITBROWSER END;DESTRUCTOR TPXBDIALOG.DONE;
  130. BEGIN IF ZYXZ<>NIL THEN DISPOSE(ZYXZ,DONE);IF ZZXX<>NIL THEN DISPOSE(ZZXX,DONE);IF ZYXY<>NIL THEN DISPOSE
  131. (ZYXY,DONE);INHERITED DONE END;PROCEDURE TPXBDIALOG.UPDATESTATUS(S:STRING);BEGIN ZZXY^.SETDATA(S)END;
  132. FUNCTION TPXBDIALOG.ERRORBOX(ERRCODE:INTEGER):BOOLEAN;BEGIN IF ERRCODE<>PXSUCCESS THEN BEGIN MESSAGEBOX(ZXYZ^.
  133. GETERRORMESSAGE(ERRCODE),NIL,MFERROR OR MFOKBUTTON);ERRORBOX:=TRUE END ELSE ERRORBOX:=FALSE END;
  134. PROCEDURE TPXBDIALOG.INITBROWSER;VAR OIlO:FIELDNUMBER;OO10:PFIELDDESC;BEGIN YXZX:=0;YXZY:=0;ZZXX:=NEW(PRECORD,
  135. INIT(ZYXY));XYZYZ:=ZYXY^.GENERICREC^.GETFIELDCOUNT;XYZZX:=ZYXX^.GETNUMPFIELDS(ZXYY);ZYXZ:=NEW
  136. (PCOLLECTION,INIT(XYZYZ,0));FOR OIlO:=1 TO XYZYZ DO BEGIN OO10:=NEW(PFIELDDESC,INIT);ZYXY^.GENERICREC^.
  137. GETFIELDDESC(OIlO,OO10);ZYXZ^.INSERT(OO10)END;BUILDFIELDS;YXZZY^.SELECT;YXZXZ:=YXZZY;GOTOHOME;
  138. READFIELDS END;FUNCTION TPXBDIALOG.INPLINELEN(P:PFIELDDESC):INTEGER;BEGIN CASE P^.FLDTYPE OF FLDCHAR
  139. :INPLINELEN:=P^.FLDLEN;FLDSHORT:INPLINELEN:=6;FLDLONG:INPLINELEN:=11;FLDDOUBLE:INPLINELEN:=17;FLDDATE
  140. :INPLINELEN:=10;FLDBLOB:CASE P^.FLDSUBTYPE OF FLDSTMEMO:INPLINELEN:=BYTE(PXBBLOBNAMES [0,0]);FLDSTBINARY
  141. :INPLINELEN:=BYTE(PXBBLOBNAMES [1,0]);FLDSTFMTMEMO:INPLINELEN:=BYTE(PXBBLOBNAMES [2,0]);FLDSTOLEOBJ
  142. :INPLINELEN:=BYTE(PXBBLOBNAMES [3,0]);FLDSTGRAPHIC:INPLINELEN:=BYTE(PXBBLOBNAMES [4,0])END END END;
  143. PROCEDURE TPXBDIALOG.MAKEVALIDATOR(INPLINE:PPXBINPUTLINE);BEGIN CASE INPLINE^.YXZZX OF FLDSHORT:INPLINE
  144. ^.SETVALIDATOR(NEW(PFILTERVALIDATOR,INIT(['0'..'9','+','-',' '])));FLDLONG:INPLINE^.SETVALIDATOR(NEW
  145. (PFILTERVALIDATOR,INIT(['0'..'9','+','-',' '])));FLDDOUBLE:INPLINE^.SETVALIDATOR(NEW(PFILTERVALIDATOR,
  146. INIT(['0'..'9','+','-','.','E','e',' '])));FLDDATE:INPLINE^.SETVALIDATOR(NEW(PPXPICTUREVALIDATOR,INIT
  147. ('{##}/{##}/{####}',TRUE)))END END;PROCEDURE TPXBDIALOG.MAKEMOVELINKS;
  148. VAR O101000OOOI01,O10O0OlO01OII:INTEGER;O10O0ll1OOllO,O10O0ll1Ol00O:PPXBINPUTLINE;BEGIN O10O0ll1OOllO:=YXZZY;
  149. O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O10O0OlO01OII:=1 TO XYZYZ DO PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW;
  150. FOR O101000OOOI01:=1 TO XYZZY DO FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1OOllO^.XYZXX:=O10O0ll1Ol00O;
  151. IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW;IF O10O0ll1Ol00O<>NIL THEN
  152. PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW END;O10O0ll1OOllO:=YXZZY;FOR O101000OOOI01:=1 TO XYZZY
  153.  DO FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO^.XYZXX;IF O10O0ll1Ol00O<>NIL THEN
  154. O10O0ll1Ol00O^.XYZXY:=O10O0ll1OOllO;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO
  155. ^.PREVVIEW END;O10O0ll1OOllO:=YXZZY;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;
  156. FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O^.XYZXZ:=O10O0ll1OOllO;IF O10O0ll1Ol00O^.PREVVIEW<>NIL
  157. THEN PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW END;PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.XYZXX
  158. END;O10O0ll1OOllO:=YXZXX;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O10O0OlO01OII
  159. :=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O^.XYZYX:=O10O0ll1OOllO;PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.NEXTVIEW
  160. END;O10O0ll1OOllO:=O10O0ll1OOllO^.XYZXY END;O10O0ll1OOllO:=YXZZY;FOR O10O0OlO01OII:=1 TO XYZYZ
  161.  DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O^.XYZYY:=
  162. O10O0ll1OOllO;O10O0ll1Ol00O:=O10O0ll1Ol00O^.XYZXX END;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW
  163. (O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END END;PROCEDURE TPXBDIALOG.BUILDFIELDS;VAR OIlO:INTEGER;
  164. OI000O0O00:TPOINT;OO1I:TRECT;PROCEDURE OOIII0I1O11l(OO10:PFIELDDESC);FAR;VAR O1lO1ll0Il1I:PPXBINPUTLINE;
  165. BEGIN OO1I.ASSIGN(OI000O0O00.X,OI000O0O00.Y,OI000O0O00.X+INPLINELEN(OO10)+2,OI000O0O00.Y+1);O1lO1ll0Il1I
  166. :=NEW(PPXBINPUTLINE,INIT(OO1I,INPLINELEN(OO10)));O1lO1ll0Il1I^.XYZZ:=OI000O0O00;O1lO1ll0Il1I^.YXZXY:=
  167. OO10^.FLDNUM;O1lO1ll0Il1I^.YXZZX:=OO10^.FLDTYPE;O1lO1ll0Il1I^.YXZZZ:=OO10^.FLDSUBTYPE;MAKEVALIDATOR
  168. (O1lO1ll0Il1I);ZZZX^.INSERT(O1lO1ll0Il1I);OI000O0O00.X:=OI000O0O00.X+INPLINELEN(OO10)+3 END;
  169. PROCEDURE O10O0OIl1OOl0(OO10:PFIELDDESC);FAR;BEGIN OO1I.ASSIGN(OI000O0O00.X,OI000O0O00.Y,OI000O0O00.X+INPLINELEN
  170. (OO10)+2,OI000O0O00.Y+2);ZZZX^.INSERT(NEW(PPXBFIELDNAME,INIT(OO1I,#3+OO10^.FLDNAME)));OI000O0O00.X:=
  171. OI000O0O00.X+INPLINELEN(OO10)+3 END;FUNCTION Ol000IOOlI10(OO10:PVIEW):BOOLEAN;FAR;BEGIN Ol000IOOlI10:=
  172. (TYPEOF(OO10^)=TYPEOF(TPXBINPUTLINE))AND(TYPEOF(OO10^.NEXTVIEW^)=TYPEOF(TPXBFIELDNAME))END;
  173. BEGIN OI000O0O00.X:=0;OI000O0O00.Y:=0;ZYXZ^.FOREACH(@ O10O0OIl1OOl0);OI000O0O00.X:=0;INC(OI000O0O00.Y,2
  174. );FOR OIlO:=1 TO XYZZY DO BEGIN ZYXZ^.FOREACH(@ OOIII0I1O11l);OI000O0O00.X:=0;INC(OI000O0O00.Y)END;
  175. PVIEW(YXZYY):=ZZZX^.LAST^.PREV;PVIEW(YXZXX):=ZZZX^.LAST^.NEXT;PVIEW(YXZZY):=ZZZX^.FIRSTTHAT(@
  176. Ol000IOOlI10);MAKEMOVELINKS END;PROCEDURE TPXBDIALOG.READFIELDS;VAR OO1O,OIlO,O10O0OlO01OII:INTEGER;OO01:LONGINT;
  177. OIOO:DOUBLE;O10111IIlO0ll:BOOLEAN;O100I0OIOO1:STRING;O10O0ll1OOllO:PPXBINPUTLINE;BEGIN IF ZYXY^.HASCHANGED THEN ZYXY
  178. ^.REFRESH;O10O0ll1OOllO:=YXZZY;ZYXY^.GETRECORD(ZZXX);FOR OIlO:=1 TO XYZZY DO BEGIN IF ZYXY^.LASTERROR
  179. =PXSUCCESS THEN BEGIN ZYXY^.GETRECORD(ZYXY^.GENERICREC);FOR O10O0OlO01OII:=1 TO XYZYZ DO IF O10O0ll1OOllO^.
  180. YXZZX<>FLDBLOB THEN BEGIN IF NOT ZYXY^.GENERICREC^.ISNULL(O10O0ll1OOllO^.YXZXY)THEN BEGIN CASE O10O0ll1OOllO^.
  181. YXZZX OF FLDCHAR:ZYXY^.GENERICREC^.GETSTRING(O10O0ll1OOllO^.YXZXY,O100I0OIOO1,O10111IIlO0ll);FLDSHORT
  182. :BEGIN ZYXY^.GENERICREC^.GETFIELD(O10O0ll1OOllO^.YXZXY,@ OO1O,SIZEOF(OO1O),O10111IIlO0ll);STR(OO1O:6,
  183. O100I0OIOO1)END;FLDLONG:BEGIN ZYXY^.GENERICREC^.GETFIELD(O10O0ll1OOllO^.YXZXY,@ OO01,SIZEOF(OO01),
  184. O10111IIlO0ll);STR(OO01:11,O100I0OIOO1)END;FLDDOUBLE:BEGIN ZYXY^.GENERICREC^.GETDOUBLE(O10O0ll1OOllO^.
  185. YXZXY,OIOO,O10111IIlO0ll);IF(ABS(OIOO)< PXBFIXEDMAX)THEN STR(OIOO:17:2,O100I0OIOO1)ELSE STR(OIOO:17,
  186. O100I0OIOO1)END;FLDDATE:ZYXY^.GENERICREC^.GETSTRING(O10O0ll1OOllO^.YXZXY,O100I0OIOO1,O10111IIlO0ll)
  187. END;IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;
  188. O10O0ll1OOllO^.YXZYX:=ZYXY^.GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW);END ELSE
  189. BEGIN O100I0OIOO1:='';IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.
  190. DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=ZYXY^.GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.
  191. PREVVIEW);END END ELSE BEGIN CASE O10O0ll1OOllO^.YXZZZ OF FLDSTMEMO:O100I0OIOO1:=PXBBLOBNAMES [0];
  192. FLDSTBINARY:O100I0OIOO1:=PXBBLOBNAMES [1];FLDSTFMTMEMO:O100I0OIOO1:=PXBBLOBNAMES [2];FLDSTOLEOBJ:O100I0OIOO1
  193. :=PXBBLOBNAMES [3];FLDSTGRAPHIC:O100I0OIOO1:=PXBBLOBNAMES [4] END;IF O10O0ll1OOllO^.EXPOSED THEN
  194. O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=ZYXY^.
  195. GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW)END;ZYXY^.GOTONEXT END ELSE
  196. BEGIN O100I0OIOO1:='';FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.
  197. SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=0;O10O0ll1OOllO:=
  198. PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW)END END END;YXZZ:=PPXBINPUTLINE(ZZZX^.CURRENT)^.DATA^;
  199. LOCKUPDATE(PPXBINPUTLINE(ZZZX^.CURRENT))END;FUNCTION TPXBDIALOG.SEARCHKEY(INPLINE:PPXBINPUTLINE):RETCODE;
  200. VAR O10O0ll1OOllO:PPXBINPUTLINE;OIlO:INTEGER;BEGIN O10O0ll1OOllO:=INPLINE^.XYZXZ;ZYXY^.GENERICREC^.CLEAR;IF
  201. XYZZZ=0 THEN BEGIN IF XYZZX<>0 THEN BEGIN FOR OIlO:=1 TO XYZZX DO BEGIN IF(O10O0ll1OOllO^.YXZYX=PPXBINPUTLINE
  202. (ZZZX^.CURRENT)^.YXZYX)AND(O10O0ll1OOllO^.YXZXY=PPXBINPUTLINE(ZZZX^.CURRENT)^.YXZXY)THEN ZYXY^.
  203. GENERICREC^.PUTSTRING(O10O0ll1OOllO^.YXZXY,YXZZ)ELSE ZYXY^.GENERICREC^.PUTSTRING(O10O0ll1OOllO^.YXZXY,
  204. O10O0ll1OOllO^.DATA^);PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END;SEARCHKEY:=ZYXY^.SEARCHINDEX
  205. (ZYXY^.GENERICREC,PXSEARCHFIRST,XYZZX)END ELSE SEARCHKEY:=ZYXY^.GOTOREC(O10O0ll1OOllO^.YXZYX)
  206. END ELSE SEARCHKEY:=ZYXY^.GOTOREC(O10O0ll1OOllO^.YXZYX)END;FUNCTION TPXBDIALOG.LOCKREC
  207. (INPLINE:PPXBINPUTLINE):RETCODE;VAR OOO1IlI0l0OI:RETCODE;OIO1O1II01l:WORD;O11lOl0I1O:LONGINT;OIl1I0IlOO:STRING;
  208. BEGIN IF INPLINE^.YXZYX<>0 THEN BEGIN IF YXZX=0 THEN BEGIN OOO1IlI0l0OI:=SEARCHKEY(INPLINE);IF OOO1IlI0l0OI
  209. =PXSUCCESS THEN BEGIN IF ZXYZ^.ENGINETYPE<>PXLOCAL THEN BEGIN REPEAT YXZX:=ZYXY^.LOCKRECORD;OOO1IlI0l0OI:=ZYXY
  210. ^.LASTERROR;IF OOO1IlI0l0OI=PXERR_RECLOCKED THEN BEGIN OIl1I0IlOO:=ZYXX^.GETNETERRUSER;IF OIl1I0IlOO=''THEN
  211. OIl1I0IlOO:='unknown or local user';O11lOl0I1O:=LONGINT(@ OIl1I0IlOO);OIO1O1II01l:=MESSAGEBOX
  212. (#3'Record is locked by %s.'#13#13#3'Try to lock record again?',@ O11lOl0I1O,MFYESBUTTON+MFNOBUTTON)END ELSE
  213. OIO1O1II01l:=CMNO UNTIL(OOO1IlI0l0OI=PXSUCCESS)OR(OIO1O1II01l=CMNO);IF OOO1IlI0l0OI=PXSUCCESS THEN BEGIN YXZY:=
  214. INPLINE^.YXZYX;UPDATESTATUS('Locked') END ELSE IF OOO1IlI0l0OI<>PXERR_RECLOCKED THEN ERRORBOX(OOO1IlI0l0OI)
  215. END END END ELSE OOO1IlI0l0OI:=ZYXY^.GOTOREC(INPLINE^.YXZYX)END ELSE BEGIN YXZX:=0;YXZY:=0;
  216. OOO1IlI0l0OI:=PXSUCCESS END;IF OOO1IlI0l0OI<>PXERR_RECLOCKED THEN ERRORBOX(OOO1IlI0l0OI);IF(OOO1IlI0l0OI
  217. =PXERR_RECDELETED)OR(OOO1IlI0l0OI=PXERR_RECNOTFOUND)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS END;
  218. LOCKREC:=OOO1IlI0l0OI END;FUNCTION TPXBDIALOG.UNLOCKREC:RETCODE;BEGIN IF(ZXYZ^.ENGINETYPE<>PXLOCAL)AND
  219. (YXZX<>0)THEN BEGIN ZYXY^.UNLOCKRECORD(YXZX);YXZX:=0;YXZY:=0 END;UNLOCKREC:=ZYXY^.LASTERROR END
  220. ;PROCEDURE TPXBDIALOG.LOCKUPDATE(INPLINE:PPXBINPUTLINE);BEGIN IF YXZY<>INPLINE^.YXZYX THEN UNLOCKREC;IF YXZX=0
  221. THEN UPDATESTATUS('Browse')ELSE UPDATESTATUS('Locked')END;FUNCTION TPXBDIALOG.WRITEFIELD
  222. (INPLINE:PPXBINPUTLINE):RETCODE;VAR OIOl:EXTENDED;OOO1IlI0l0OI:RETCODE;BEGIN IF INPLINE^.YXZYX<>0 THEN
  223. BEGIN OOO1IlI0l0OI:=ZYXY^.GOTOREC(INPLINE^.YXZYX);IF OOO1IlI0l0OI=PXSUCCESS THEN OOO1IlI0l0OI:=ZYXY^.
  224. GETRECORD(ZYXY^.GENERICREC) END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.CLEAR;IF OOO1IlI0l0OI=PXSUCCESS THEN
  225. BEGIN IF TRIMSTR(INPLINE^.DATA^)<>''THEN BEGIN IF INPLINE^.YXZZX=FLDDOUBLE THEN BEGIN VAL(TRIMSTR(INPLINE^.
  226. DATA^),OIOl,OOO1IlI0l0OI);IF OOO1IlI0l0OI=0 THEN BEGIN IF((ABS(OIOl)>=PXBDOUBLEMIN)AND(ABS(OIOl)<=
  227. PXBDOUBLEMAX))OR(OIOl=0.0)THEN OOO1IlI0l0OI:=ZYXY^.GENERICREC^.PUTDOUBLE(INPLINE^.YXZXY,OIOl)ELSE
  228. OOO1IlI0l0OI:=PXERR_OUTOFRANGE END ELSE BEGIN INPLINE^.CURPOS:=OOO1IlI0l0OI-1;OOO1IlI0l0OI:=PXERR_DATACONV
  229. END END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.PUTSTRING(INPLINE^.YXZXY,TRIMSTR(INPLINE^.DATA^))
  230. END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.SETNULL(INPLINE^.YXZXY);IF OOO1IlI0l0OI=PXSUCCESS THEN BEGIN IF
  231. INPLINE^.YXZYX<>0 THEN OOO1IlI0l0OI:=ZYXY^.UPDATEREC(ZYXY^.GENERICREC)ELSE OOO1IlI0l0OI:=ZYXY^.APPENDREC
  232. (ZYXY^.GENERICREC)END END;ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS;WRITEFIELD:=OOO1IlI0l0OI END;
  233. PROCEDURE TPXBDIALOG.TABPOSLINE(INPLINE:PPXBINPUTLINE);VAR O10O0O01IO0l1,OIlO:INTEGER;
  234. O10O0ll1OOllO,O10O0ll1OOlOO:PPXBINPUTLINE;O10O0ll1Ol001:PPXBFIELDNAME;BEGIN IF INPLINE^.YXZXY<>YXZXZ^.YXZXY THEN
  235. BEGIN O10O0ll1Ol001:=YXZYY;FOR OIlO:=1 TO XYZYZ DO BEGIN O10O0ll1Ol001^.MOVETO(O10O0ll1Ol001^.XYZX.X-INPLINE
  236. ^.XYZZ.X,O10O0ll1Ol001^.XYZX.Y);PVIEW(O10O0ll1Ol001):=O10O0ll1Ol001^.PREV END;O10O0ll1OOllO:=YXZXZ^.
  237. XYZYY;WHILE O10O0ll1OOllO^.EXPOSED DO BEGIN O10O0ll1OOlOO:=O10O0ll1OOllO^.XYZYY;FOR O10O0O01IO0l1:=1 TO XYZZY
  238.  DO BEGIN O10O0ll1OOlOO^.MOVETO(ZZXZ.X,O10O0ll1OOlOO^.XYZX.Y);O10O0ll1OOlOO:=O10O0ll1OOlOO^.XYZXX END;
  239. IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END;O10O0ll1OOllO:=
  240. INPLINE^.XYZYY;OIlO:=0;REPEAT O10O0ll1OOlOO:=O10O0ll1OOllO^.XYZYY;FOR O10O0O01IO0l1:=1 TO XYZZY
  241.  DO BEGIN O10O0ll1OOlOO^.MOVETO(OIlO,O10O0ll1OOlOO^.XYZX.Y);O10O0ll1OOlOO:=O10O0ll1OOlOO^.XYZXX END;
  242. OIlO:=OIlO+O10O0ll1OOllO^.XYZY.X+1;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=
  243. O10O0ll1OOllO^.PREVVIEW ELSE OIlO:=ZZXZ.X+1 UNTIL(OIlO >ZZXZ.X)OR(INPLINE^.YXZXY >=O10O0ll1OOllO^.YXZXY
  244. )END END;PROCEDURE TPXBDIALOG.TOGGLEINS;VAR O10O0O01IO0l1,OIlO:INTEGER;O10O0ll1OOllO:PPXBINPUTLINE;
  245. BEGIN O10O0ll1OOllO:=YXZZY;FOR O10O0O01IO0l1:=1 TO XYZZY DO FOR OIlO:=1 TO XYZYZ DO BEGIN IF(NOT O10O0ll1OOllO
  246. ^.GETSTATE(SFFOCUSED))AND(O10O0ll1OOllO^.YXZZX<>FLDBLOB)THEN IF O10O0ll1OOllO^.GETSTATE(SFCURSORINS)THEN
  247. O10O0ll1OOllO^.SETSTATE(SFCURSORINS,FALSE)ELSE O10O0ll1OOllO^.SETSTATE(SFCURSORINS,TRUE);PVIEW(O10O0ll1OOllO
  248. ):=O10O0ll1OOllO^.PREV END END;PROCEDURE TPXBDIALOG.FIELDCHANGED(INPLINE:PPXBINPUTLINE);
  249. VAR OOO1IlI0l0OI:RETCODE;BEGIN IF YXZZ<>INPLINE^.DATA^THEN BEGIN OOO1IlI0l0OI:=LOCKREC(INPLINE);IF(OOO1IlI0l0OI
  250. <>PXSUCCESS)AND(OOO1IlI0l0OI<>PXERR_RECDELETED)AND(OOO1IlI0l0OI<>PXERR_RECNOTFOUND)THEN INPLINE^.SETDATA
  251. (YXZZ)END END;PROCEDURE TPXBDIALOG.FIELDENTER(INPLINE:PPXBINPUTLINE);BEGIN YXZZ:=INPLINE^.DATA^;
  252. TABPOSLINE(INPLINE);LOCKUPDATE(INPLINE)END;FUNCTION TPXBDIALOG.FIELDEXIT(INPLINE:PPXBINPUTLINE):BOOLEAN;
  253. VAR OOO1IlI0l0OI:RETCODE;BEGIN YXZXZ:=INPLINE;IF YXZZ=INPLINE^.DATA^THEN FIELDEXIT:=TRUE ELSE BEGIN FIELDEXIT:=
  254. (NOT ERRORBOX(WRITEFIELD(INPLINE)));ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS END END;
  255. PROCEDURE TPXBDIALOG.GOTOHOME;BEGIN WITH ZYXY^DO BEGIN GOTOBEGIN;IF LASTERROR=PXSUCCESS THEN GOTONEXT END END
  256. ;PROCEDURE TPXBDIALOG.GOTOLAST;BEGIN WITH ZYXY^DO BEGIN GOTOEND;IF LASTERROR=PXSUCCESS THEN GOTOPREV END END
  257. ;PROCEDURE TPXBDIALOG.DOWNREAD(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.XYZXX<>NIL THEN INPLINE^.XYZXX^.
  258. FOCUS ELSE IF INPLINE^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);ZYXY^.GOTONEXT;
  259. READFIELDS END END;PROCEDURE TPXBDIALOG.UPREAD(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.XYZXY<>NIL THEN
  260. INPLINE^.XYZXY^.FOCUS ELSE IF INPLINE^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);ZYXY^.
  261. GOTOPREV;IF ZYXY^.LASTERROR=PXERR_STARTOFTABLE THEN GOTOHOME;READFIELDS END END;
  262. PROCEDURE TPXBDIALOG.PAGEUPREAD;VAR OIlO:INTEGER;BEGIN IF ZZZX^.CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.
  263. GOTOREC(YXZZY^.YXZYX);FOR OIlO:=1 TO XYZZY DO ZYXY^.GOTOPREV;IF ZYXY^.LASTERROR=PXERR_STARTOFTABLE THEN
  264. GOTOHOME;READFIELDS END END;PROCEDURE TPXBDIALOG.PAGEDOWNREAD;VAR OIlO:INTEGER;BEGIN IF ZZZX^.CURRENT^.
  265. VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);FOR OIlO:=1 TO XYZZY DO ZYXY^.GOTONEXT;IF ZYXY
  266. ^.LASTERROR=PXERR_ENDOFTABLE THEN GOTOLAST;READFIELDS END END;PROCEDURE TPXBDIALOG.HOMEREAD;BEGIN IF ZZZX^.
  267. CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOPREV;GOTOHOME;READFIELDS END END;
  268. PROCEDURE TPXBDIALOG.ENDREAD;BEGIN IF ZZZX^.CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTONEXT;GOTOLAST;
  269. READFIELDS END END;PROCEDURE TPXBDIALOG.COPYCLIP(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.SELEND >0 THEN
  270. ZXYX:=COPY(INPLINE^.DATA^,INPLINE^.SELSTART+1,INPLINE^.SELEND-INPLINE^.SELSTART)END;
  271. PROCEDURE TPXBDIALOG.PASTECLIP(INPLINE:PPXBINPUTLINE);VAR OIOI100IlI0:STRING;BEGIN IF INPLINE^.YXZZX<>FLDBLOB THEN
  272. BEGIN IF BYTE(ZXYX [0])<=INPLINE^.MAXLEN THEN INPLINE^.SETDATA(ZXYX)ELSE BEGIN OIOI100IlI0:=COPY(ZXYX,1,
  273. INPLINE^.MAXLEN);INPLINE^.SETDATA(OIOI100IlI0)END;FIELDCHANGED(INPLINE)END END;
  274. PROCEDURE TPXBDIALOG.BLOBMEMOEDIT(INPLINE:PPXBINPUTLINE);VAR OOIl000I1:CHAR;OI110IlIOIO1:WORD;O101I1lllO0OO:LONGINT;
  275. OOO0O1lIIOO1:PPXBMEMOREC;OOIIOOlOl0Il:PPXBMEMOEDIT;BEGIN ERRORBOX(ZYXY^.GENERICREC^.OPENBLOBREAD(INPLINE^.YXZXY,
  276. TRUE));O101I1lllO0OO:=ZYXY^.GENERICREC^.GETBLOBSIZE(INPLINE^.YXZXY);IF O101I1lllO0OO< PXBMAXUMEMOSIZE THEN
  277. BEGIN OOO0O1lIIOO1:=MEMALLOC(SIZEOF(TPXBMEMOREC));OOO0O1lIIOO1^.LEN:=O101I1lllO0OO;OOIIOOlOl0Il:=NEW
  278. (PPXBMEMOEDIT,INIT);IF OOIIOOlOl0Il^.VALID(CMVALID)THEN BEGIN IF O101I1lllO0OO<>0 THEN BEGIN ZYXY^.GENERICREC
  279. ^.GETBLOB(INPLINE^.YXZXY,O101I1lllO0OO,0,@ OOO0O1lIIOO1^.DATA);OOIl000I1:=#0;FOR OI110IlIOIO1:=0 TO
  280. O101I1lllO0OO-1 DO BEGIN IF(OOO0O1lIIOO1^.DATA [OI110IlIOIO1]=#10)AND(OOIl000I1<>#13)THEN BEGIN OOIl000I1:=
  281. OOO0O1lIIOO1^.DATA [OI110IlIOIO1];OOO0O1lIIOO1^.DATA [OI110IlIOIO1]:=#13;END ELSE OOIl000I1:=OOO0O1lIIOO1^.
  282. DATA [OI110IlIOIO1] END END;ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,FALSE);IF APPLICATION^.
  283. EXECUTEDIALOG(OOIIOOlOl0Il,OOO0O1lIIOO1)<>CMCANCEL THEN BEGIN ZYXY^.GENERICREC^.OPENBLOBWRITE(INPLINE^.YXZXY
  284. ,OOO0O1lIIOO1^.LEN,FALSE);ZYXY^.GENERICREC^.PUTBLOB(INPLINE^.YXZXY,OOO0O1lIIOO1^.LEN,0,@
  285. OOO0O1lIIOO1^.DATA);ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,TRUE);ZYXY^.UPDATEREC(ZYXY^.GENERICREC
  286. );END;FREEMEM(OOO0O1lIIOO1,SIZEOF(TPXBMEMOREC)) END ELSE BEGIN ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY
  287. ,FALSE);FREEMEM(OOO0O1lIIOO1,SIZEOF(TPXBMEMOREC));DISPOSE(OOIIOOlOl0Il,DONE);APPLICATION^.OUTOFMEMORY
  288. END END ELSE ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,FALSE)END;PROCEDURE TPXBDIALOG.BLOBEDIT
  289. (INPLINE:PPXBINPUTLINE);BEGIN IF(INPLINE^.YXZYX<>0)AND(INPLINE^.YXZZX=FLDBLOB)THEN BEGIN IF(LOCKREC(INPLINE
  290. )=PXSUCCESS)AND(ZYXY^.GETRECORD(ZYXY^.GENERICREC)=PXSUCCESS)THEN CASE INPLINE^.YXZZZ OF FLDSTMEMO
  291. :BLOBMEMOEDIT(INPLINE)ELSE MESSAGEBOX('This blob format not currently supported.',NIL,MFINFORMATION+MFOKBUTTON
  292. )END END END;PROCEDURE TPXBDIALOG.DELETEREC(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.YXZYX<>0 THEN IF
  293. LOCKREC(INPLINE)=PXSUCCESS THEN BEGIN ZYXY^.DELETEREC;UNLOCKREC;UPDATESTATUS('Delete');ZYXY^.GOTOREC(YXZZY^.
  294. YXZYX);READFIELDS END END;PROCEDURE TPXBDIALOG.SIZELIMITS(VAR MIN,MAX:TPOINT);BEGIN INHERITED SIZELIMITS(MIN,
  295. MAX);MIN.X:=MINWINSIZE.X;MIN.Y:=MINWINSIZE.Y;MAX.Y:=ZZXZ.Y END;PROCEDURE TPXBDIALOG.HANDLEEVENT
  296. (VAR EVENT:TEVENT);VAR O1OO01l1lI0O:BOOLEAN;BEGIN CASE EVENT.WHAT OF EVKEYDOWN:BEGIN O1OO01l1lI0O:=TRUE;
  297. CASE EVENT.KEYCODE OF KBTAB:ZZZX^.FOCUSNEXT(FALSE);KBSHIFTTAB:ZZZX^.FOCUSNEXT(TRUE);KBDOWN:DOWNREAD
  298. (PPXBINPUTLINE(ZZZX^.CURRENT));KBUP:UPREAD(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLHOME:PPXBINPUTLINE(ZZZX^.
  299. CURRENT)^.XYZXZ^.FOCUS;KBCTRLEND:PPXBINPUTLINE(ZZZX^.CURRENT)^.XYZYX^.FOCUS;KBPGDN:PAGEDOWNREAD;KBPGUP
  300. :PAGEUPREAD;KBCTRLPGUP:HOMEREAD;KBCTRLPGDN:ENDREAD;KBENTER:BLOBEDIT(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLDEL
  301. :DELETEREC(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLINS:COPYCLIP(PPXBINPUTLINE(ZZZX^.CURRENT));KBSHIFTINS
  302. :PASTECLIP(PPXBINPUTLINE(ZZZX^.CURRENT));KBINS:BEGIN TOGGLEINS;O1OO01l1lI0O:=FALSE END ELSE O1OO01l1lI0O:=
  303. FALSE END;IF O1OO01l1lI0O THEN CLEAREVENT(EVENT)END;EVCOMMAND:BEGIN O1OO01l1lI0O:=TRUE;
  304. CASE EVENT.COMMAND OF CMFIELDCHANGED:FIELDCHANGED(PPXBINPUTLINE(EVENT.INFOPTR));CMFIELDENTER:FIELDENTER
  305. (PPXBINPUTLINE(EVENT.INFOPTR));CMFIELDEXIT:O1OO01l1lI0O:=FIELDEXIT(PPXBINPUTLINE(EVENT.INFOPTR))ELSE O1OO01l1lI0O
  306. :=FALSE END;IF O1OO01l1lI0O THEN CLEAREVENT(EVENT)END END;INHERITED HANDLEEVENT(EVENT)END;
  307. FUNCTION TPXBDIALOG.VALID(COMMAND:WORD):BOOLEAN;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0:=INHERITED VALID(COMMAND);
  308. IF COMMAND=CMCLOSE THEN BEGIN IF FIELDEXIT(PPXBINPUTLINE(ZZZX^.CURRENT))THEN UNLOCKREC ELSE OIOI100IlI0:=FALSE;
  309. END;VALID:=OIOI100IlI0 END;END.
  310.