home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR36 / DRGDRP.ZIP / DRAGDROP.PRG < prev    next >
Text File  |  1993-11-04  |  25KB  |  719 lines

  1. ***************************************************************************
  2. *
  3. * Procedure file: DRAGDROP.PRG
  4. *         System: GenScrnX
  5. *        Version: 1.0
  6. *         Author: Ken R. Levy
  7. *        Company: Jet Propulsion Laboratory
  8. *      Copyright: None (Public Domain)
  9. *
  10. ***************************************************************************
  11. *
  12. * DRAGDROP - DragDrop driver for GENSCRNX.
  13. *
  14. * Description:
  15. * This program is used as an optional driver for use with GENSCRNX.PRG.
  16. *
  17. * Features:
  18. * Generates drag-and-drop event/property code.
  19. *
  20. * Notes:
  21. * In this program, for clarity/readability reasons, variable names
  22. * are used that are longer than 10 characters.  Note, however, that only
  23. * the first 10 characters are significant.
  24. *
  25. * Important:
  26. * Function calls made from this program may be contained in GENSCRNX.PRG.
  27. * Variable names not declared PRIVATE in this program defined PRIVATE in
  28. * GENSCRNX.PRG.
  29. *
  30. PRIVATE c_dragmode,dragover,c_dragdrop,c_dragenter,c_dragleave,c_dragwithin
  31. PRIVATE c_objcmd,c_objmsg,objarray,c_objtxt,c_dragicon,c_overicon,c_overtxt
  32. PRIVATE c_overbutton,c_dblclick,c_dragheight,c_dragwidth,c_noiconlist
  33. PRIVATE c_objheight,c_objwidth,c_overheight,c_overwidth,c_3d,c_no3d
  34. PRIVATE dragicon,overicon,overtxt,overbutton,objclass,objmsg
  35. PRIVATE dragmode,dragover,dragdrop,dragenter,dragleave,dragwithin,objtxt
  36. PRIVATE objarray,iconlist,codedata,codedata2,codedata3,setupdata,cleanupdata
  37. PRIVATE dragheight,dragwidth,objheight,objwidth,overheight,overwidth
  38. PRIVATE cfontstylm,vfontratio,hfontratio,vfactor,hfactor,dblclick
  39. PRIVATE r,i,expr2,vpos2,hpos2,height2,width2,match,offset
  40.  
  41. IF OBJTYPE#1.OR..NOT.drvenable(PROGRAM()).OR.m.drv_no>7
  42.   GOTO BOTTOM
  43.   RETURN .F.
  44. ENDIF
  45. IF TYPE('m.gsxversion')#'C'.OR.LEFT(m.gsxversion,4)<'1.7a'
  46.   GOTO BOTTOM
  47.   =warning('DragDrop driver requires GENSCNRX 1.7a or later')
  48.   RETURN .F.
  49. ENDIF
  50. IF m.drv_no<7.AND..NOT.m.loop_flag
  51.   a_scxdrvs(7)=a_scxdrvs(7)+1
  52.   IF ALEN(a_scxdrv)<(8*a_scxdrvs(7))
  53.     DIMENSION a_scxdrv(a_scxdrvs(7),8)
  54.   ENDIF
  55.   a_scxdrv(a_scxdrvs(7),7)=a_scxdrv(m.drv_cnt,m.drv_no)
  56. ENDIF
  57. m.c_dblclick='*:DBLCLICK'
  58. m.c_dragdrop='*:DRAGDROP'
  59. m.c_dragenter='*:DRAGENTER'
  60. m.c_dragheight='*:DRAGHEIGHT'
  61. m.c_dragicon='*:DRAGICON'
  62. m.c_dragleave='*:DRAGLEAVE'
  63. m.c_dragmode='*:DRAGMODE'
  64. m.c_dragover='*:DRAGOVER'
  65. m.c_dragwidth='*:DRAGWIDTH'
  66. m.c_dragwithin='*:DRAGWITHIN'
  67. m.c_noiconlist='*:NOICONLIST'
  68. m.c_objarray='*:OBJARRAY'
  69. m.c_objclass='*:OBJCLASS'
  70. m.c_objheight='*:OBJHEIGHT'
  71. m.c_objmsg='*:OBJMSG'
  72. m.c_objtxt='*:OBJTXT'
  73. m.c_objwidth='*:OBJWIDTH'
  74. m.c_overbutton='*:OVERBUTTON'
  75. m.c_overheight='*:OVERHEIGHT'
  76. m.c_overicon='*:OVERICON'
  77. m.c_overtxt='*:OVERTXT'
  78. m.c_overwidth='*:OVERWIDTH'
  79. m.c_3d='*:3D'
  80. m.c_no3d='*:NO3D'
  81. m.iconlist=(wordsearch(m.c_noiconlist)==m.null)
  82. IF m.drv_no=7
  83.   IF EMPTY(NAME)
  84.     REPLACE NAME WITH SYS(2015)
  85.   ENDIF
  86.   m.iconlist=(wordsearch(m.c_noiconlist)==m.null)
  87.   m.cleanupdata=''
  88.   m.codedata="dragover"+IIF(m.scxcount=1,"",;
  89.              ALLTRIM(STR(m.scxcount,2)))+m.cr_lf+;
  90.              "PARAMETERS m.objmsgonly"+m.cr_lf+;
  91.              "PRIVATE m.objmsgonly,m.xlinkfnct,m.arraycount"+m.cr_lf+;
  92.              "EXTERNAL ARRAY evlmsg"+m.cr_lf+m.cr_lf
  93.   IF m.scxcount=1
  94.     m.codedata=m.codedata+"IF m.scnno>1"+m.cr_lf+;
  95.                "  m.xlinkfnct=[dragover]+ALLTRIM(STR(m.scnno,2))+"+;
  96.                "[(m.objmsgonly)]"+m.cr_lf+"  RETURN &xlinkfnct"+m.cr_lf+;
  97.                "ENDIF"+m.cr_lf
  98.   ENDIF
  99.   m.codedata2=''
  100.   m.setupdata=''
  101.   m.match=.F.
  102.   SCAN ALL
  103.     m.dragdrop=nobrackets(wordsearch(m.c_dragdrop))
  104.     m.dragmode=nobrackets(wordsearch(m.c_dragmode))
  105.     IF m.dragdrop==m.null
  106.       IF .NOT.m.dragmode==m.null
  107.         m.match=.T.
  108.       ENDIF
  109.       LOOP
  110.     ENDIF
  111.     m.match=.T.
  112.     m.dragmode=fnctexpr(m.dragmode)
  113.     m.dragover=fnctexpr(nobrackets(wordsearch(m.c_dragover)))
  114.     m.dragenter=fnctexpr(nobrackets(wordsearch(m.c_dragenter)))
  115.     m.dragwithin=fnctexpr(nobrackets(wordsearch(m.c_dragwithin)))
  116.     m.dragleave=fnctexpr(nobrackets(wordsearch(m.c_dragleave)))
  117.     m.objmsg=nobrackets(wordsearch(m.c_objmsg))
  118.     IF m.objmsg==m.null
  119.       m.objmsg=''
  120.     ENDIF
  121.     m.objtxt=nobrackets(wordsearch(m.c_objtxt))
  122.     IF m.objtxt==m.null
  123.       m.objtxt=''
  124.     ENDIF
  125.     IF EMPTY(m.objmsg)
  126.       m.objmsg=m.objtxt
  127.       IF EMPTY(m.objmsg)
  128.         m.objmsg=SYS(2015)
  129.       ENDIF
  130.     ENDIF
  131.     IF LEFT(m.dragdrop,1)=='*'
  132.       m.dragdrop=m.null
  133.     ELSE
  134.       m.dragdrop=fnctexpr(m.dragdrop)
  135.     ENDIF
  136.     m.overheight=nobrackets(wordsearch(m.c_overheight))
  137.     IF m.overheight==m.null
  138.       m.overheight=''
  139.     ENDIF
  140.     m.overwidth=nobrackets(wordsearch(m.c_overwidth))
  141.     IF m.overwidth==m.null
  142.       m.overwidth=''
  143.     ENDIF
  144.     m.overtxt=nobrackets(wordsearch(m.c_overtxt))
  145.     DO CASE
  146.       CASE m.overtxt==m.null
  147.         DO CASE
  148.           CASE m.dragdrop==m.null
  149.             m.overtxt=''
  150.           CASE OBJTYPE=1
  151.             m.overtxt="[]"
  152.           CASE EMPTY(m.objmsg)
  153.             m.overtxt="[Drop ]+m.objmsg"
  154.           OTHERWISE
  155.             m.overtxt="[Drop ]+m.objmsg+[ on ]+evlmsg(["+m.objmsg+"])"
  156.         ENDCASE
  157.       CASE EMPTY(m.overtxt)
  158.         m.overtxt=''
  159.       CASE .NOT.LEFT(m.overtxt,1)=="'".AND..NOT.LEFT(m.overtxt,1)=='"'
  160.         m.overtxt="["+m.overtxt+"]"
  161.     ENDCASE
  162.     m.overbutton=nobrackets(wordsearch(m.c_overbutton))
  163.     DO CASE
  164.       CASE m.overbutton==m.null.OR.OBJTYPE#14
  165.         m.overbutton=''
  166.       CASE EMPTY(m.overbutton)
  167.         m.overbutton=MLINE(NAME,1)
  168.     ENDCASE
  169.     m.overicon=nobrackets(wordsearch(m.c_overicon))
  170.     DO CASE
  171.       CASE m.overicon==m.null
  172.         m.overicon=''
  173.       CASE EMPTY(m.overicon)
  174.         IF EMPTY(m.overbutton)
  175.           IF OBJTYPE=1
  176.             m.overicon="[]"
  177.           ELSE
  178.             m.overicon="IIF(FILE([OVERICON.ICO]),[OVERICON.ICO],[])"
  179.             =updiconlst('OVERICON.ICO')
  180.           ENDIF
  181.         ELSE
  182.           m.overicon=''
  183.         ENDIF
  184.       CASE .NOT.LEFT(m.overicon,1)=="'".AND..NOT.LEFT(m.overicon,1)=='"'
  185.         =updiconlst(m.overicon)
  186.         m.overicon="["+m.overicon+"]"
  187.     ENDCASE
  188.     m.objarray=nobrackets(wordsearch(m.c_objarray))
  189.     DO CASE
  190.       CASE m.objarray==m.null.OR.m.dragdrop==m.null
  191.         m.objarray=''
  192.       CASE EMPTY(m.objarray)
  193.         m.objarray=SYS(2015)
  194.     ENDCASE
  195.     m.vpos2=VPOS
  196.     m.hpos2=HPOS
  197.     IF ALLTRIM(m.platform_)=='DOS'.OR.ALLTRIM(m.platform_)=='UNIX'
  198.       m.hpos2=m.hpos2+1
  199.       m.height2=HEIGHT-1
  200.       m.width2=WIDTH-1
  201.     ELSE
  202.       m.height2=objheight()
  203.       m.width2=objwidth()
  204.     ENDIF
  205.     m.codedata2="IF BETWEEN(m.objrow,"+ALLTRIM(STR(m.vpos2,7,3))+","+;
  206.                 ALLTRIM(STR(m.vpos2+m.height2,7,3))+").AND.BETWEEN(m.objcol,"+;
  207.                 ALLTRIM(STR(m.hpos2,7,3))+","+;
  208.                 ALLTRIM(STR(m.hpos2+m.width2,7,3))+")"+m.cr_lf
  209.     m.codedata2=m.codedata2+;
  210.                 "  IF .NOT.m.objmsgonly"+m.cr_lf+;
  211.                 "    IF m.objstate=-1"+m.cr_lf
  212.     IF .NOT.EMPTY(m.overbutton)
  213.       m.codedata2=m.codedata2+;
  214.                   "      "+m.overbutton+"=0"+m.cr_lf+;
  215.                   "      SHOW GET "+m.overbutton+m.cr_lf
  216.     ENDIF
  217.     IF .NOT.EMPTY(m.objarray)
  218.       m.codedata2=m.codedata2+;
  219.                   "      IF TYPE(["+m.objarray+"])#[C]"+m.cr_lf+;
  220.                   "        m.arraycount=1"+m.cr_lf+;
  221.                   "        PUBLIC "+m.objarray+"(m.arraycount,2)"+m.cr_lf+;
  222.                   "      ELSE"+m.cr_lf+;
  223.                   "        m.arraycount=ALEN("+m.objarray+",1)+1"+m.cr_lf+;
  224.                   "        DIMENSION "+m.objarray+"(m.arraycount,2)"+m.cr_lf+;
  225.                   "      ENDIF"+m.cr_lf+;
  226.                   "      "+m.objarray+"(m.arraycount,1)=m.objclass"+m.cr_lf+;
  227.                   "      "+m.objarray+"(m.arraycount,2)=m.objmsg"+m.cr_lf
  228.       m.cleanupdata="RELEASE "+m.objarray+m.cr_lf+m.cleanupdata
  229.     ENDIF
  230.     m.codedata2=m.codedata2+;
  231.                 "      ="+IIF(EMPTY(m.dragdrop).OR.m.dragdrop==m.null,".F.",;
  232.                 m.dragdrop)+m.cr_lf
  233.     IF .NOT.EMPTY(m.dragover).OR..NOT.EMPTY(m.dragenter).OR.;
  234.        .NOT.EMPTY(m.dragwithin).OR..NOT.EMPTY(m.dragleave).OR.;
  235.        .NOT.EMPTY(m.overicon).OR..NOT.EMPTY(m.overheight).OR.;
  236.        .NOT.EMPTY(m.overwidth).OR..NOT.EMPTY(m.overtxt)
  237.       m.codedata2=m.codedata2+;
  238.                   "    ELSE"+m.cr_lf+;
  239.                   "      IF .NOT.m.objover==["+m.objmsg+"]"+m.cr_lf+;
  240.                   "        IF .NOT.m.objover==m.null"+m.cr_lf+;
  241.                   "          RETURN m.null"+m.cr_lf+;
  242.                   "        ENDIF"+m.cr_lf+;
  243.                   "        IF m.objstate#1"+m.cr_lf+;
  244.                   "          m.objstate=0"+m.cr_lf+;
  245.                   "        ENDIF"+m.cr_lf+;
  246.                   "      ENDIF"+m.cr_lf
  247.       m.codedata2=m.codedata2+;
  248.                   "      DO CASE"+m.cr_lf+;
  249.                   "        CASE m.objmsg0==["+m.objmsg+"]"+m.cr_lf+;
  250.                   "          =.F."+m.cr_lf
  251.       m.codedata3=''
  252.       IF .NOT.EMPTY(m.overtxt)
  253.         IF m.dragmode==m.null
  254.           m.codedata3=m.codedata3+;
  255.                       "          m.dragtxt="+m.overtxt+m.cr_lf
  256.         ELSE
  257.           m.codedata3=m.codedata3+;
  258.                       "          m.dragtxt="+m.overtxt+m.cr_lf
  259.         ENDIF
  260.       ENDIF
  261.       IF .NOT.EMPTY(m.overicon)
  262.         m.codedata3=m.codedata3+;
  263.                     "          m.dragicon="+m.overicon+m.cr_lf+;
  264.                     "          m.objheight=-1"+m.cr_lf+;
  265.                     "          m.objwidth=-1"+m.cr_lf+;
  266.                     "          m.icontimer=-1000"+m.cr_lf
  267.       ENDIF
  268.       IF .NOT.EMPTY(m.overheight)
  269.         m.codedata3=m.codedata3+;
  270.                     "          m.objheight="+m.overheight+m.cr_lf
  271.       ENDIF
  272.       IF .NOT.EMPTY(m.overwidth)
  273.         m.codedata3=m.codedata3+;
  274.                     "          m.objwidth="+m.overwidth+m.cr_lf
  275.       ENDIF
  276.       IF .NOT.EMPTY(m.overbutton)
  277.         m.codedata3=m.codedata3+;
  278.                     "          "+m.overbutton+"=1"+m.cr_lf+;
  279.                     "          SHOW GET "+m.overbutton+m.cr_lf
  280.       ENDIF
  281.       IF .NOT.EMPTY(m.codedata3)
  282.         m.codedata2=m.codedata2+;
  283.                     "        CASE m.objstate=0"+m.cr_lf+m.codedata3
  284.       ENDIF
  285.       m.codedata3=''
  286.       IF .NOT.EMPTY(m.overtxt)
  287.         m.codedata3=m.codedata3+;
  288.                   "          m.dragtxt=[]"+m.cr_lf
  289.       ENDIF
  290.       IF .NOT.EMPTY(m.overicon)
  291.         m.codedata3=m.codedata3+;
  292.                   "          m.dragicon=[]"+m.cr_lf+;
  293.                   "          m.icontimer=-1000"+m.cr_lf
  294.       ENDIF
  295.       IF .NOT.EMPTY(m.overbutton)
  296.         m.codedata3=m.codedata3+;
  297.                     "          "+m.overbutton+"=0"+m.cr_lf+;
  298.                     "          SHOW GET "+m.overbutton+m.cr_lf
  299.       ENDIF
  300.       IF .NOT.EMPTY(m.codedata3)
  301.         m.codedata2=m.codedata2+;
  302.                     "        CASE m.objstate=1"+m.cr_lf+m.codedata3
  303.       ENDIF
  304.       m.codedata2=m.codedata2+;
  305.                   "      ENDCASE"+m.cr_lf
  306.       m.codedata3=''
  307.       IF .NOT.EMPTY(m.dragenter).OR..NOT.EMPTY(m.dragwithin).OR.;
  308.          .NOT.EMPTY(m.dragleave)
  309.         m.codedata2=m.codedata2+;
  310.                     "      DO CASE"+m.cr_lf
  311.         IF .NOT.EMPTY(m.dragenter)
  312.           m.codedata2=m.codedata2+;
  313.                       "        CASE m.objstate=0"+m.cr_lf+;
  314.                       "          ="+m.dragenter+m.cr_lf
  315.         ENDIF
  316.         IF .NOT.EMPTY(m.dragleave)
  317.           m.codedata2=m.codedata2+;
  318.                       "        CASE m.objstate=1"+m.cr_lf+;
  319.                       "          ="+m.dragleave+m.cr_lf
  320.         ENDIF
  321.         IF .NOT.EMPTY(m.dragwithin)
  322.           m.codedata2=m.codedata2+;
  323.                       "        CASE m.objstate=2"+m.cr_lf+;
  324.                       "          ="+m.dragwithin+m.cr_lf
  325.         ENDIF
  326.         m.codedata2=m.codedata2+;
  327.                     "      ENDCASE"+m.cr_lf
  328.       ENDIF
  329.     ENDIF
  330.     IF .NOT.EMPTY(m.dragover)
  331.       m.codedata2=m.codedata2+"      ="+m.dragover+m.cr_lf
  332.     ENDIF
  333.     m.codedata2=m.codedata2+;
  334.                 "    ENDIF"+m.cr_lf+;
  335.                 "  ENDIF"+m.cr_lf+;
  336.                 "  RETURN ["+m.objmsg+"]"+m.cr_lf+;
  337.                 "ENDIF"+m.cr_lf
  338.     IF OBJTYPE=1
  339.       m.setupdata=m.codedata2
  340.       m.codedata2=''
  341.     ELSE
  342.       m.codedata=m.codedata+m.codedata2
  343.     ENDIF
  344.   ENDSCAN
  345.   m.codedata=m.codedata+m.setupdata+"RETURN m.null"+m.cr_lf
  346.   m.codedata2=''
  347.   m.setupdata=''
  348.   IF TYPE('m.iconfiles')=='N'.AND.m.iconfiles>0
  349.     =ASORT(a_iconfile)
  350.     m.codedata=m.codedata+"* Start of null icon file list"+m.cr_lf
  351.     FOR m.i = 1 TO m.iconfiles
  352.       IF .NOT.EMPTY(a_iconfile(m.i))
  353.         m.codedata=m.codedata+"DO "+LOWER(a_iconfile(m.i))+m.cr_lf
  354.       ENDIF
  355.     ENDFOR
  356.     m.codedata=m.codedata+"* End of null icon file list"+m.cr_lf
  357.   ENDIF
  358.   RELEASE a_iconfile,m.iconfiles
  359.   m.codedata=m.codedata+m.cr_lf+"* END dragover"+m.cr_lf
  360.   IF m.match.OR.m.screens>1
  361.     =insfnct(m.codedata)
  362.   ENDIF
  363.   IF .NOT.EMPTY(m.cleanupdata)
  364.     LOCATE
  365.     REPLACE PROCCODE WITH m.cleanupdata+m.cr_lf+PROCCODE
  366.   ENDIF
  367.   GOTO BOTTOM
  368.   RETURN .T.
  369. ENDIF
  370. SCAN ALL
  371.   IF OBJTYPE=1.OR.OBJTYPE=6.OR.EMPTY(COMMENT).OR..NOT.drvobj()
  372.     LOOP
  373.   ENDIF
  374.   m.vpos2=VPOS
  375.   m.hpos2=HPOS
  376.   m.height2=objheight()
  377.   m.width2=objwidth()
  378.   m.dragmode=nobrackets(wordsearch(m.c_dragmode))
  379.   m.dragdrop=nobrackets(wordsearch(m.c_dragdrop))
  380.   m.dragover=nobrackets(wordsearch(m.c_dragover))
  381.   m.dragenter=nobrackets(wordsearch(m.c_dragenter))
  382.   m.dragwithin=nobrackets(wordsearch(m.c_dragwithin))
  383.   m.dragleave=nobrackets(wordsearch(m.c_dragleave))
  384.   m.overicon=nobrackets(wordsearch(m.c_overicon))
  385.   m.overbutton=nobrackets(wordsearch(m.c_overbutton))
  386.   IF m.dragdrop==m.null.AND.(.NOT.m.dragover==m.null.OR.;
  387.                  .NOT.m.dragenter==m.null.OR..NOT.m.dragwithin==m.null.OR.;
  388.                  .NOT.m.dragleave==m.null.OR..NOT.m.overicon==m.null.OR.;
  389.                  .NOT.m.overbutton==m.null)
  390.     REPLACE COMMENT WITH m.c_dragdrop+" *"+m.cr_lf+COMMENT
  391.   ENDIF
  392.   m.objmsg=nobrackets(wordsearch(m.c_objmsg))
  393.   IF m.objmsg==m.null
  394.     m.objmsg=''
  395.   ENDIF
  396.   m.objarray=nobrackets(wordsearch(m.c_objarray))
  397.   DO CASE
  398.     CASE m.objarray==m.null
  399.       m.objarray=''
  400.     CASE EMPTY(m.objarray)
  401.       m.objarray=SYS(2015)
  402.       REPLACE COMMENT WITH m.c_objarray+' '+m.objarray+m.cr_lf+COMMENT
  403.   ENDCASE
  404.   m.objtxt=nobrackets(wordsearch(m.c_objtxt))
  405.   IF m.objtxt==m.null
  406.     m.objtxt=''
  407.   ENDIF
  408.   DO CASE
  409.     CASE OBJTYPE#14.OR.m.overbutton==m.null
  410.       m.overbutton=''
  411.     CASE EMPTY(m.overbutton)
  412.       m.overbutton=MLINE(NAME,1)
  413.       IF EMPTY(WHEN)
  414.         REPLACE WHENTYPE WITH 0, WHEN WITH ".F."
  415.       ENDIF
  416.   ENDCASE
  417.   IF (_WINDOWS.OR._MAC).AND.INLIST(ALLTRIM(m.platform_),'WINDOWS','MAC').AND.;
  418.      (OBJTYPE=17.OR.OBJTYPE=12.OR.OBJTYPE=14)
  419.     m.offset=4
  420.     m.cfontstylm=IIF(m.fontstyle=1.OR.m.fontstyle=3,'B','')
  421.     m.vfontratio=FONTMETRIC(1,'MS Sans Serif',8,'N')/;
  422.                  (FONTMETRIC(1,m.fontface,m.fontsize,m.cfontstylm)+;
  423.                  FONTMETRIC(5,m.fontface,m.fontsize,m.cfontstylm))*;
  424.                  (FONTMETRIC(1,WFONT(1,''),WFONT(2,''),WFONT(3,''))+;
  425.                  FONTMETRIC(5,WFONT(1,''),WFONT(2,''),WFONT(3,'')))/;
  426.                  FONTMETRIC(1,'FoxFont',9,'N')
  427.     m.hfontratio=FONTMETRIC(6,'MS Sans Serif',8,'N')/;
  428.                  FONTMETRIC(6,m.fontface,m.fontsize,m.cfontstylm)*;
  429.                  FONTMETRIC(6,WFONT(1,''),WFONT(2,''),WFONT(3,''))/;
  430.                  FONTMETRIC(6,'FoxFont',9,'N')
  431.     IF OBJTYPE=17.AND..NOT.m.dragdrop==m.null.AND.;
  432.        wordsearch(m.c_3d)==m.null.AND.wordsearch(m.c_no3d)==m.null
  433.       REPLACE COMMENT WITH m.c_3d+' '+IIF(m.dragmode==m.null,'INSET','RAISED')+;
  434.                            m.cr_lf+COMMENT
  435.       IF OBJTYPE=14
  436.         m.i=4
  437.       ELSE
  438.         m.i=8
  439.       ENDIF
  440.       =insrec(-1)
  441.       m.vfactor=m.i*m.vfontratio*(SROWS()/SYSMETRIC(1))
  442.       m.hfactor=2*m.i*m.hfontratio*(SROWS()/SYSMETRIC(2))
  443.       REPLACE OBJTYPE WITH 7, OBJCODE WITH 4,;
  444.               VPOS WITH m.vpos2-m.vfactor, HPOS WITH m.hpos2-m.hfactor,;
  445.               HEIGHT WITH m.height2+2*m.vfactor, WIDTH WITH m.width2+2*m.hfactor,;
  446.               PENSIZE WITH 1, PENPAT WITH 8,;
  447.               COMMENT WITH m.c_3d+' '+IIF(m.dragmode==m.null,'1','-1')+' BOX'
  448.       m.offset=m.offset+4
  449.       SKIP
  450.     ENDIF
  451.     IF .NOT.EMPTY(m.objtxt)
  452.       =insrec(-1)
  453.       m.vfactor=m.offset*m.vfontratio*(SROWS()/SYSMETRIC(1))
  454.       m.i=TXTWIDTH(m.objtxt,'MS Sans Serif',8)
  455.       REPLACE OBJTYPE WITH 5, EXPR WITH '"'+m.objtxt+'"',;
  456.               VPOS WITH m.vpos2+m.height2+m.vfactor,;
  457.               HPOS WITH m.hpos2+m.width2/2-m.i/2,;
  458.               HEIGHT WITH 1, WIDTH WITH m.i,;
  459.               FONTFACE WITH 'MS Sans Serif', FONTSTYLE WITH 0,;
  460.               FONTSIZE WITH 8, MODE WITH 1, COMMENT WITH m.c_no3d
  461.       SKIP
  462.     ENDIF
  463.   ENDIF
  464.   IF m.dragmode==m.null.OR..NOT.wordsearch(m.c_click)==m.null
  465.     LOOP
  466.   ENDIF
  467.   DO CASE
  468.     CASE OBJTYPE=17
  469.       m.expr2=ALLTRIM(FULLPATH(EVALUATE(PICTURE),m.fscxbase))
  470.       REPLACE PICTURE WITH '"'+m.expr2+'"'
  471.     CASE OBJTYPE=5
  472.       m.expr2=''
  473.       FOR m.i = 1 TO MEMLINES(EXPR)
  474.         m.expr2=m.expr2+MLINE(EXPR,m.i)
  475.       ENDFOR
  476.       m.expr2=ALLTRIM(EVALUATE(m.expr2))
  477.     OTHERWISE
  478.       m.expr2=ALLTRIM(MLINE(NAME,1))
  479.       IF .NOT.EMPTY(m.expr2)
  480.         m.expr2='@'+m.expr2
  481.       ENDIF
  482.   ENDCASE
  483.   m.objclass=nobrackets(wordsearch(m.c_objclass))
  484.   IF m.objclass==m.null
  485.     m.objclass=''
  486.   ENDIF
  487.   IF EMPTY(m.objclass).AND..NOT.EMPTY(m.objarray)
  488.     m.objclass='ARRAY'
  489.   ENDIF
  490.   IF EMPTY(m.objmsg)
  491.     DO CASE
  492.       CASE .NOT.EMPTY(m.objarray)
  493.         m.objmsg=m.objarray
  494.       CASE EMPTY(m.objtxt)
  495.         m.objmsg=IIF(OBJTYPE=17,trimpath(m.expr2),m.expr2)
  496.       OTHERWISE
  497.         m.objmsg=m.objtxt
  498.     ENDCASE
  499.     IF EMPTY(m.objmsg)
  500.       m.objmsg=SYS(2015)
  501.       REPLACE COMMENT WITH m.c_objmsg+' '+m.objmsg+m.cr_lf+COMMENT
  502.     ENDIF
  503.   ENDIF
  504.   IF EMPTY(m.expr2)
  505.     m.expr2=m.objmsg
  506.   ENDIF
  507.   m.dragicon=nobrackets(wordsearch(m.c_dragicon))
  508.   IF m.dragicon==m.null
  509.     m.dragicon=m.expr2
  510.   ENDIF
  511.   =updiconlst(m.dragicon)
  512.   m.dblclick=fnctexpr(nobrackets(wordsearch(m.c_dblclick)))
  513.   m.dragheight=nobrackets(wordsearch(m.c_dragheight))
  514.   DO CASE
  515.     CASE m.dragheight==m.null.OR.VAL(m.dragheight)<0
  516.       m.dragheight='-1'
  517.     CASE EMPTY(m.dragheight)
  518.       m.dragheight=ALLTRIM(STR(objheight(),9,3))
  519.   ENDCASE
  520.   m.dragwidth=nobrackets(wordsearch(m.c_dragwidth))
  521.   DO CASE
  522.     CASE m.dragwidth==m.null.OR.VAL(m.dragwidth)<0
  523.       m.dragwidth='-1'
  524.     CASE EMPTY(m.dragwidth)
  525.       m.dragwidth=ALLTRIM(STR(objwidth(),9,3))
  526.   ENDCASE
  527.   m.objheight=nobrackets(wordsearch(m.c_objheight))
  528.   DO CASE
  529.     CASE m.objheight==m.null.OR.VAL(m.objheight)<0
  530.       m.objheight='0'
  531.     CASE EMPTY(m.objheight)
  532.       m.objheight=ALLTRIM(STR(objheight(),9,3))
  533.   ENDCASE
  534.   m.objwidth=nobrackets(wordsearch(m.c_objwidth))
  535.   DO CASE
  536.     CASE m.objwidth==m.null.OR.VAL(m.objwidth)<0
  537.       m.objwidth='0'
  538.     CASE EMPTY(m.objwidth)
  539.       m.objwidth=ALLTRIM(STR(objwidth(),9,3))
  540.   ENDCASE
  541.   IF (_WINDOWS.OR._MAC).AND.INLIST(ALLTRIM(m.platform_),'WINDOWS','MAC').AND.;
  542.      wordsearch(m.c_3d)==m.null.AND.wordsearch(m.c_no3d)==m.null
  543.     IF OBJTYPE=5.AND.MODE=1
  544.       REPLACE MODE WITH 0
  545.     ENDIF
  546.     REPLACE COMMENT WITH m.c_3d+' RAISED'+m.cr_lf+COMMENT
  547.   ENDIF
  548.   m.codedata="MDOWN().AND.BETWEEN(MROW(),"+ALLTRIM(STR(VPOS,9,3))+","+;
  549.              ALLTRIM(STR(VPOS+m.height2,9,3))+").AND.BETWEEN(MCOL(),"+;
  550.              ALLTRIM(STR(HPOS,9,3))+","+ALLTRIM(STR(HPOS+m.width2,9,3))+;
  551.              ").AND."+"dragevnt(MWINDOW(),MROW(MWINDOW()),MCOL(MWINDOW()),"+;
  552.              "SECONDS(),["+m.dragicon+"],["+m.objclass+"],["+m.objmsg+"],["+;
  553.              m.objarray+"],["+m.dragmode+"],"+m.dragheight+","+m.dragwidth+;
  554.              ","+ALLTRIM(STR(VPOS+m.height2/2,9,3))+","+;
  555.              ALLTRIM(STR(HPOS+m.width2/2,9,3))+","+m.objheight+","+m.objwidth+;
  556.              ","+ALLTRIM(STR(m.scxcount,2))+","+ALLTRIM(STR(m.scheme,2))+;
  557.              ",["+m.dblclick+"])"
  558.   IF OBJTYPE=17.OR.OBJTYPE=5.OR.OBJTYPE=7.OR.(OBJTYPE=15.AND.OBJCODE=0)
  559.     m.codedata=m.codedata+".AND..F."
  560.     m.r=RECNO()
  561.     GOTO m.r_scxdata
  562.     IF .NOT.insrec(-1)
  563.       GOTO m.r
  564.       LOOP
  565.     ENDIF
  566.     REPLACE VPOS WITH m.vpos2, HPOS WITH m.hpos2,;
  567.             HEIGHT WITH m.height2, WIDTH WITH m.width2
  568.     REPLACE OBJTYPE WITH 20, OBJCODE WITH 1,;
  569.             NAME WITH 'm.null'+ALLTRIM(STR(RECNO(),6)), EXPR WITH '',;
  570.             PICTURE WITH '"@*IHN "', FONTFACE WITH m.fontface,;
  571.             FONTSTYLE WITH m.fontstyle, FONTSIZE WITH m.fontsize,;
  572.             WHENTYPE WITH 0, WHEN WITH m.codedata,;
  573.             INITIALVAL WITH '', INITIALNUM WITH 0, COMMENT WITH '*:NO3D'
  574.     GOTO m.r
  575.     SKIP
  576.   ELSE
  577.     DO CASE
  578.       CASE EMPTY(WHEN)
  579.         m.codedata=".NOT.("+m.codedata+")"
  580.         REPLACE WHENTYPE WITH 0, WHEN WITH m.codedata
  581.       CASE WHENTYPE=1
  582.         m.codedata="IF "+m.codedata+m.cr_lf+"  RETURN .F."+m.cr_lf+"ENDIF"
  583.         REPLACE WHEN WITH m.codedata+m.cr_lf+WHEN
  584.       OTHERWISE
  585.         m.codedata=".NOT.("+m.codedata+")"
  586.         REPLACE WHEN WITH m.codedata+".AND."+WHEN
  587.     ENDCASE
  588.   ENDIF
  589. ENDSCAN
  590. GOTO BOTTOM
  591. RETURN .T.
  592.  
  593. * END dragdrop
  594.  
  595.  
  596.  
  597. FUNCTION updiconlst
  598. PARAMETERS m.iconfile
  599. PRIVATE m.iconfile,m.fileext,m.updflag,m.at_pos,m.iconno,m.laststexct
  600. PRIVATE m.animate,m.lowrange,m.highrange,m.iconmask,m.wildcard,m.ascflag
  601.  
  602. IF .NOT.m.iconlist
  603.   RETURN .F.
  604. ENDIF
  605. m.iconfile=ALLTRIM(UPPER(m.iconfile))
  606. m.animate=(ATC('animate(',m.iconfile)>0)
  607. IF m.animate
  608.   m.at_pos=ATC('animate(',m.iconfile)
  609.   m.iconfile=SUBSTR(m.iconfile,m.at_pos+9)
  610.   m.str_data=''
  611.   m.at_pos=AT("'",m.iconfile)
  612.   IF m.at_pos>0
  613.     m.str_data=SUBSTR(m.iconfile,m.at_pos+1)
  614.     m.iconfile=LEFT(m.iconfile,m.at_pos-1)
  615.   ENDIF
  616.   m.at_pos=AT('"',m.iconfile)
  617.   IF m.at_pos>0
  618.     m.str_data=SUBSTR(m.iconfile,m.at_pos+1)
  619.     m.iconfile=LEFT(m.iconfile,m.at_pos-1)
  620.   ENDIF
  621.   m.iconfile=ALLTRIM(UPPER(m.iconfile))
  622.   m.at_pos=AT(')',m.str_data)
  623.   IF m.at_pos>0
  624.     m.str_data=LEFT(m.str_data,m.at_pos-1)
  625.   ENDIF
  626.   m.str_data=ALLTRIM(UPPER(m.str_data))
  627. ENDIF
  628. m.fileext=UPPER(RIGHT(m.iconfile,4))
  629. IF .NOT.m.fileext=='.BMP'.AND..NOT.m.fileext=='.ICO'
  630.   RETURN .F.
  631. ENDIF
  632. IF m.animate.AND.'?'$m.iconfile
  633.   m.at_pos=AT(',',m.str_data,2)
  634.   IF m.at_pos=0
  635.     RETURN .F.
  636.   ENDIF
  637.   m.lowrange=SUBSTR(m.str_data,m.at_pos+1)
  638.   m.at_pos=AT(',',m.lowrange)
  639.   IF m.at_pos=0
  640.     RETURN .F.
  641.   ENDIF
  642.   m.iconmask=m.iconfile
  643.   IF '??'$m.iconmask
  644.     m.wildcard='??'
  645.   ELSE
  646.     m.wildcard='?'
  647.   ENDIF
  648.   m.highrange=SUBSTR(m.lowrange,m.at_pos+1)
  649.   m.lowrange=LEFT(m.lowrange,m.at_pos-1)
  650.   IF "'"$m.lowrange.OR.'"'$m.lowrange
  651.     m.ascflag=.T.
  652.     m.lowrange=ASC(SUBSTR(m.lowrange,2,1))
  653.     m.highrange=ASC(SUBSTR(m.highrange,2,1))
  654.   ELSE
  655.     m.ascflag=.F.
  656.     m.lowrange=VAL(m.lowrange)
  657.     m.highrange=VAL(m.highrange)
  658.   ENDIF
  659.   IF m.lowrange>m.highrange
  660.     m.iconno=m.lowrange
  661.     m.lowrange=m.highrange
  662.     m.highrange=m.iconno
  663.   ENDIF
  664.   FOR m.iconno = m.lowrange TO m.highrange
  665.     IF m.ascflag
  666.       m.iconfile=CHR(m.iconno)
  667.     ELSE
  668.       m.iconfile=ALLTRIM(STR(m.iconno,2))
  669.       IF LEN(m.wildcard)>LEN(m.iconfile)
  670.         m.iconfile=REPLICATE('0',LEN(m.wildcard)-LEN(m.iconfile))+m.iconfile
  671.       ENDIF
  672.     ENDIF
  673.     m.iconfile=STRTRAN(m.iconmask,m.wildcard,m.iconfile,1,1)
  674.     =updiconlst(m.iconfile)
  675.   ENDFOR
  676.   RETURN .T.
  677. ENDIF
  678. m.laststexct=SET('EXACT')
  679. SET EXACT ON
  680. IF TYPE('a_iconfile')#'C'
  681.   PUBLIC a_iconfile(1)
  682.   a_iconfile=''
  683. ENDIF
  684. IF TYPE('m.iconfiles')#'N'
  685.   PUBLIC m.iconfiles
  686.   m.iconfiles=0
  687. ENDIF
  688. IF EMPTY(m.iconfile).OR.ASCAN(a_iconfile,m.iconfile)>0
  689.   m.updflag=.F.
  690. ELSE
  691.   m.updflag=.T.
  692.   m.iconfiles=m.iconfiles+1
  693.   DIMENSION a_iconfile(m.iconfiles)
  694.   a_iconfile(m.iconfiles)=UPPER(m.iconfile)
  695. ENDIF
  696. IF m.laststexct=='ON'
  697.   SET EXACT ON
  698. ELSE
  699.   SET EXACT OFF
  700. ENDIF
  701. RETURN m.updflag
  702.  
  703. * END updiconlst
  704.  
  705.  
  706.  
  707. FUNCTION fnctexpr
  708. PARAMETERS fnctname
  709.  
  710. DO CASE
  711.   CASE m.fnctname==m.null
  712.     m.fnctname=''
  713.   CASE .NOT.EMPTY(m.fnctname).AND..NOT.RIGHT(m.fnctname,1)==')'
  714.     m.fnctname=m.fnctname+'()'
  715. ENDCASE
  716. RETURN m.fnctname
  717.  
  718. * END fnctexpr
  719.