home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / code_gen / vbxwzrd / vbapi.pa$ < prev    next >
Encoding:
Text File  |  1995-05-02  |  56.4 KB  |  1,983 lines

  1. unit VBApi;
  2. interface
  3. uses WinTypes,WinProcs,Messages;
  4. const
  5.   VB100_VERSION=$0100;
  6.   VB200_VERSION=$0200;
  7.   VB300_VERSION=$0300;
  8.   VB_VERSION   =$0300;
  9. {-----------------------------}
  10. { General types and modifiers }
  11. {-----------------------------}
  12. type Bool=WordBool;
  13.      Enum=Byte;
  14.      NPnt=Word;
  15.      LPnt=Pointer;
  16.      LPStr=PChar;
  17.      Hsz=LPHandle;
  18.      PHSZ=^HSZ;
  19.      HLStr=LPHandle;
  20.      HCtl=LPHandle;
  21.      HAD=LPHandle;
  22.      HFormFile=PHandle;
  23.      ERR=Word;
  24.      HPic=Word;
  25.      Float=Single;
  26. {-----------------------------------------------------------------------}
  27. { Language Variant structures                                           }
  28. { Variant type constants. These are the return value of GetVariantType. }
  29. { these are also defined in Constant.Txt for return value of VarType()  }
  30. {-----------------------------------------------------------------------}
  31. const
  32.   VT_EMPTY=0;    { Empty }
  33.   VT_NULL=1;     { Null  }
  34.   VT_I2=2;       { Integer }
  35.   VT_I4=3;       { Long }
  36.   VT_R4=4;       { Single }
  37.   VT_R8=5;       { Double }
  38.   VT_CURRENCY=6; { Currency }
  39.   VT_DATE=7;     { Date }
  40.   VT_STRING=8 ;  { String }
  41. type TCurrency=record
  42.        Lo,Hi:LongInt;
  43.      end;
  44.      PValue=^TValue;
  45.      TValue=record
  46.      case Byte of
  47.        VT_I2:(i2:Integer);
  48.        VT_I4:(i4:LongInt);
  49.        VT_R4:(r4:Single);
  50.        VT_R8:(r8:Double);
  51.        VT_CURRENCY:(cy:TCurrency);
  52.        VT_STRING:(HStr:HLStr);
  53.      end;
  54. {-----------------------------------------------------------------}
  55. { The size of Variant is needed when a Variant is passed by value }
  56. { or in a structure (user-defined type).                          }
  57. {-----------------------------------------------------------------}
  58. type PVariant=^TVariant;
  59.      TVariant=record
  60.        V:array[0..15] of char;
  61.      end;
  62. {------------------------------------}
  63. { COLOR - a Windows RGB DWORD value. }
  64. {------------------------------------}
  65. type Color=TColorREF;
  66.      PColor=^Color;
  67. const
  68.   Color_DefBitOn=$80000000;
  69. {-------------------------}
  70. { Property data structure }
  71. {-------------------------}
  72. type TIndex=record
  73.        DataType:Word;     { Type of nth index (Currently always DT_Integer) }
  74.        Data:LongInt       { Value of nth index }
  75.    end;
  76. type TDataStruct=record
  77.        Data:LongInt;      { Data for Get/Set }
  78.        cIndex:Word;       { Number of indecies }
  79.        index:array[0..0] of TIndex;
  80.      end;
  81.      PDataStruct=^TDataStruct;
  82. {-----------------------------}
  83. { VISUAL BASIC variable types }
  84. {-----------------------------}
  85. const
  86.   ET_I2=1;    { 16 bit signed integer scalar or array variable }
  87.   ET_I4=2;    { 32 bit signed integer scalar or array variable }
  88.   ET_R4=3;
  89.   ET_R8=4;    { 64 bit real scalar or array variable }
  90.   ET_CY=5;    { 64 bit currency scalar or array variable }
  91.   ET_HLSTR=6; { String scalar or array variable}
  92.   ET_SD=6;    { Older string scalar or array variable }
  93.   ET_FS=7;    { Fixed-length string variable }
  94. {----------------------------------------------}
  95. { Control Property definitions and structures. }
  96. {----------------------------------------------}
  97. const
  98.   PF_datatype      =$000000FF;
  99.   PF_fPropArray    =$00000100;
  100.   PF_fSetData      =$00000200;
  101.   PF_fSetMsg       =$00000400;
  102.   PF_fNoShow       =$00000800;
  103.   PF_fNoRuntimeW   =$00001000;
  104.   PF_fGetData      =$00002000;
  105.   PF_fGetMsg       =$00004000;
  106.   PF_fSetCheck     =$00008000;
  107.   PF_fSaveData     =$00010000;
  108.   PF_fSaveMsg      =$00020000;
  109.   PF_fLoadDataOnly =$20010000;
  110.   PF_fLoadMsgOnly  =$20020000;
  111.   PF_fGetHszMsg    =$00040000;
  112.   PF_fUpdateOnEdit =$00080000;
  113.   PF_fEditable     =$00100000;
  114.   PF_fPreHwnd      =$00200000;
  115.   PF_fDefVal       =$00400000;
  116.   PF_fNoInitDef    =$00800000;
  117.   PF_fNoRuntimeR   =$02000000;
  118.   PF_fNoMultiSelect=$04000000;
  119. type PPROPINFO=NPnt;
  120.      TPROPINFO=record
  121.        npszName:NPnt;       { Name }
  122.        fl:LongInt;          { PF_ flags}
  123.        offsetData:Byte;     { Offset into static structure }
  124.        infoData:Byte;       { 0 or _INFO value for bitfield }
  125.        dataDefault:LongInt; { 0 or _INFO value for bitfield }
  126.        npszEnumList:NPnt;   { For type DT_ENUM }
  127.        enumMax:Byte;        { Maximum legal value for enum.}
  128.      end;
  129.      PPROPLIST=^NPnt;
  130.      NPPROPLIST=NPnt;
  131. {---------------------------------}
  132. { Values for PROPINFO PF_datatype }
  133. {---------------------------------}
  134. const
  135.   DT_HSZ    =$01;
  136.   DT_SHORT  =$02;
  137.   DT_Integer=$02;
  138.   DT_LONG   =$03;
  139.   DT_BOOL   =$04;
  140.   DT_COLOR  =$05;
  141.   DT_ENUM   =$06;
  142.   DT_REAL   =$07;
  143.   DT_XPOS   =$08;
  144.   DT_XSIZE  =$09;
  145.   DT_YPOS   =$0A;
  146.   DT_YSIZE  =$0B;
  147.   DT_PICTURE=$0C;
  148.   DT_HLSTR  =$0D;
  149.   DT_OBJECT =$20;
  150. {-------------------------------------------}
  151. { Control event definitions and structures. }
  152. {-------------------------------------------}
  153.   EF_fNoUnload=$00000001;
  154. type TEVENTINFO=record
  155.        npszName:NPnt;     { Name }
  156.        cParms:Word;
  157.        cwParms:Word;      { # words of parameters  }
  158.        npParmTypes:NPnt;  { list of parameter types }
  159.        npszParmProf:NPnt; { event parameter profile string }
  160.        fl:LongInt;        { EF_ flags}
  161.      end;
  162.      PEVENTINFO =NPnt;
  163.      PPEVENTINFO=^NPnt;
  164.      NPEVENTINFO=NPnt;
  165.      LPEVENTINFO=^TEVENTINFO;  { Far }
  166.      LPEVENTLIST=^NPEVENTINFO; { Far }
  167.      NPEVENTLIST=NPnt;
  168. {-----------------------------}
  169. { Standard control event list }
  170. {-----------------------------}
  171. const
  172.   IEVENT_STD_CLICK     =$0000;
  173.   IEVENT_STD_DBLCLICK  =$0001;
  174.   IEVENT_STD_DRAGDROP  =$0002;
  175.   IEVENT_STD_DRAGOVER  =$0003;
  176.   IEVENT_STD_GOTFOCUS  =$0004;
  177.   IEVENT_STD_KEYDOWN   =$0005;
  178.   IEVENT_STD_KEYPRESS  =$0006;
  179.   IEVENT_STD_KEYUP     =$0007;
  180.   IEVENT_STD_LOSTFOCUS =$0008;
  181.   IEVENT_STD_MOUSEDOWN =$0009;
  182.   IEVENT_STD_MOUSEMOVE =$000A;
  183.   IEVENT_STD_MOUSEUP   =$000B;
  184.   IEVENT_STD_LINKERROR =$000C;
  185.   IEVENT_STD_LINKOPEN  =$000D;
  186.   IEVENT_STD_LINKCLOSE =$000E;
  187.   IEVENT_STD_LINKNOTIFY=$000F;
  188.   IEVENT_STD_LINKCHANGE=$0010;
  189.   IEVENT_STD_NONE      =$0FFF;
  190.   IEVENT_STD_LAST      =$0FFF;
  191.   PEVENTINFO_STD_CLICK     =PEVENTINFO(not IEVENT_STD_CLICK);
  192.   PEVENTINFO_STD_DBLCLICK  =PEVENTINFO(not IEVENT_STD_DBLCLICK);
  193.   PEVENTINFO_STD_DRAGDROP  =PEVENTINFO(not IEVENT_STD_DRAGDROP);
  194.   PEVENTINFO_STD_DRAGOVER  =PEVENTINFO(not IEVENT_STD_DRAGOVER);
  195.   PEVENTINFO_STD_GOTFOCUS  =PEVENTINFO(not IEVENT_STD_GOTFOCUS);
  196.   PEVENTINFO_STD_KEYDOWN   =PEVENTINFO(not IEVENT_STD_KEYDOWN);
  197.   PEVENTINFO_STD_KEYPRESS  =PEVENTINFO(not IEVENT_STD_KEYPRESS);
  198.   PEVENTINFO_STD_KEYUP     =PEVENTINFO(not IEVENT_STD_KEYUP);
  199.   PEVENTINFO_STD_LOSTFOCUS =PEVENTINFO(not IEVENT_STD_LOSTFOCUS);
  200.   PEVENTINFO_STD_MOUSEDOWN =PEVENTINFO(not IEVENT_STD_MOUSEDOWN);
  201.   PEVENTINFO_STD_MOUSEMOVE =PEVENTINFO(not IEVENT_STD_MOUSEMOVE);
  202.   PEVENTINFO_STD_MOUSEUP   =PEVENTINFO(not IEVENT_STD_MOUSEUP);
  203.   PEVENTINFO_STD_LINKERROR =PEVENTINFO(not IEVENT_STD_LINKERROR);
  204.   PEVENTINFO_STD_LINKOPEN  =PEVENTINFO(not IEVENT_STD_LINKOPEN);
  205.   PEVENTINFO_STD_LINKCLOSE =PEVENTINFO(not IEVENT_STD_LINKCLOSE);
  206.   PEVENTINFO_STD_LINKNOTIFY=PEVENTINFO(not IEVENT_STD_LINKNOTIFY);
  207.   PEVENTINFO_STD_LINKCHANGE=PEVENTINFO(not IEVENT_STD_LINKCHANGE);
  208.   PEVENTINFO_STD_NONE      =PEVENTINFO(not IEVENT_STD_NONE);
  209.   PEVENTINFO_STD_LAST      =PEVENTINFO(not IEVENT_STD_LAST);
  210. {-----------------------------}
  211. { Standard control properties }
  212. {-----------------------------}
  213.   IPROP_STD_NAME          =$0000;
  214.   IPROP_STD_CTLNAME       =$0000;
  215.   IPROP_STD_INDEX         =$0001;
  216.   IPROP_STD_HWND          =$0002;
  217.   IPROP_STD_BACKCOLOR     =$0003;
  218.   IPROP_STD_FORECOLOR     =$0004;
  219.   IPROP_STD_LEFT          =$0005;
  220.   IPROP_STD_TOP           =$0006;
  221.   IPROP_STD_WIDTH         =$0007;
  222.   IPROP_STD_HEIGHT        =$0008;
  223.   IPROP_STD_ENABLED       =$0009;
  224.   IPROP_STD_VISIBLE       =$000A;
  225.   IPROP_STD_MOUSEPOINTER  =$000B;
  226.   IPROP_STD_CAPTION       =$000C;
  227.   IPROP_STD_FONTNAME      =$000D;
  228.   IPROP_STD_FONTBOLD      =$000E;
  229.   IPROP_STD_FONTITALIC    =$000F;
  230.   IPROP_STD_FONTSTRIKE    =$0010;
  231.   IPROP_STD_FONTUNDER     =$0011;
  232.   IPROP_STD_FONTSIZE      =$0012;
  233.   IPROP_STD_TABINDEX      =$0013;
  234.   IPROP_STD_PARENT        =$0014;
  235.   IPROP_STD_DRAGMODE      =$0015;
  236.   IPROP_STD_DRAGICON      =$0016;
  237.   IPROP_STD_BORDERSTYLEOFF=$0017;
  238.   IPROP_STD_TABSTOP       =$0018;
  239.   IPROP_STD_TAG           =$0019;
  240.   IPROP_STD_TEXT          =$001B;
  241.   IPROP_STD_BORDERSTYLEON =$001C;
  242.   IPROP_STD_CLIPCONTROLS  =$001D;
  243.   IPROP_STD_NONE          =$001E;
  244.   IPROP_STD_HELPCONTEXTID =$001F;
  245.   IPROP_STD_LINKMODE      =$0020;
  246.   IPROP_STD_LINKITEM      =$0021;
  247.   IPROP_STD_LINKTOPIC     =$0022;
  248.   IPROP_STD_LINKTIMEOUT   =$0023;
  249.   IPROP_STD_LEFTNORUN     =$0024;
  250.   IPROP_STD_TOPNORUN      =$0025;
  251.   IPROP_STD_ALIGN         =$0026;
  252.   IPROP_STD_IMEMODE       =$0027;
  253.   IPROP_STD_DATASOURCE    =$0028;
  254.   IPROP_STD_DATAFIELD     =$0029;
  255.   IPROP_STD_DATACHANGED   =$002A;
  256.   IPROP_STD_LAST          =$0FFF;
  257.  
  258.   PPROPINFO_STD_NAME          =PPROPINFO(not IPROP_STD_NAME);
  259.   PPROPINFO_STD_CTLNAME       =PPROPINFO(not IPROP_STD_NAME);
  260.   PPROPINFO_STD_INDEX         =PPROPINFO(not IPROP_STD_INDEX);
  261.   PPROPINFO_STD_HWND          =PPROPINFO(not IPROP_STD_HWND);
  262.   PPROPINFO_STD_BACKCOLOR     =PPROPINFO(not IPROP_STD_BACKCOLOR);
  263.   PPROPINFO_STD_FORECOLOR     =PPROPINFO(not IPROP_STD_FORECOLOR);
  264.   PPROPINFO_STD_LEFT          =PPROPINFO(not IPROP_STD_LEFT);
  265.   PPROPINFO_STD_TOP           =PPROPINFO(not IPROP_STD_TOP);
  266.   PPROPINFO_STD_WIDTH         =PPROPINFO(not IPROP_STD_WIDTH);
  267.   PPROPINFO_STD_HEIGHT        =PPROPINFO(not IPROP_STD_HEIGHT);
  268.   PPROPINFO_STD_ENABLED       =PPROPINFO(not IPROP_STD_ENABLED);
  269.   PPROPINFO_STD_VISIBLE       =PPROPINFO(not IPROP_STD_VISIBLE);
  270.   PPROPINFO_STD_MOUSEPOINTER  =PPROPINFO(not IPROP_STD_MOUSEPOINTER);
  271.   PPROPINFO_STD_CAPTION       =PPROPINFO(not IPROP_STD_CAPTION);
  272.   PPROPINFO_STD_FONTNAME      =PPROPINFO(not IPROP_STD_FONTNAME);
  273.   PPROPINFO_STD_FONTBOLD      =PPROPINFO(not IPROP_STD_FONTBOLD);
  274.   PPROPINFO_STD_FONTITALIC    =PPROPINFO(not IPROP_STD_FONTITALIC);
  275.   PPROPINFO_STD_FONTSTRIKE    =PPROPINFO(not IPROP_STD_FONTSTRIKE);
  276.   PPROPINFO_STD_FONTUNDER     =PPROPINFO(not IPROP_STD_FONTUNDER);
  277.   PPROPINFO_STD_FONTSIZE      =PPROPINFO(not IPROP_STD_FONTSIZE);
  278.   PPROPINFO_STD_TABINDEX      =PPROPINFO(not IPROP_STD_TABINDEX);
  279.   PPROPINFO_STD_PARENT        =PPROPINFO(not IPROP_STD_PARENT);
  280.   PPROPINFO_STD_DRAGMODE      =PPROPINFO(not IPROP_STD_DRAGMODE);
  281.   PPROPINFO_STD_DRAGICON      =PPROPINFO(not IPROP_STD_DRAGICON);
  282.   PPROPINFO_STD_BORDERSTYLEOFF=PPROPINFO(not IPROP_STD_BORDERSTYLEOFF);
  283.   PPROPINFO_STD_TABSTOP       =PPROPINFO(not IPROP_STD_TABSTOP);
  284.   PPROPINFO_STD_TAG           =PPROPINFO(not IPROP_STD_TAG);
  285.   PPROPINFO_STD_TEXT          =PPROPINFO(not IPROP_STD_TEXT);
  286.   PPROPINFO_STD_BORDERSTYLEON =PPROPINFO(not IPROP_STD_BORDERSTYLEON);
  287.   PPROPINFO_STD_CLIPCONTROLS  =PPROPINFO(not IPROP_STD_CLIPCONTROLS);
  288.   PPROPINFO_STD_NONE          =PPROPINFO(not IPROP_STD_NONE);
  289.   PPROPINFO_STD_HELPCONTEXTID =PPROPINFO(not IPROP_STD_HELPCONTEXTID);
  290.   PPROPINFO_STD_LINKMODE      =PPROPINFO(not IPROP_STD_LINKMODE);
  291.   PPROPINFO_STD_LINKITEM      =PPROPINFO(not IPROP_STD_LINKITEM);
  292.   PPROPINFO_STD_LINKTOPIC     =PPROPINFO(not IPROP_STD_LINKTOPIC);
  293.   PPROPINFO_STD_LINKTIMEOUT   =PPROPINFO(not IPROP_STD_LINKTIMEOUT);
  294.   PPROPINFO_STD_LEFTNORUN     =PPROPINFO(not IPROP_STD_LEFTNORUN);
  295.   PPROPINFO_STD_TOPNORUN      =PPROPINFO(not IPROP_STD_TOPNORUN);
  296.   PPROPINFO_STD_ALIGN         =PPROPINFO(not IPROP_STD_ALIGN);
  297.   PPROPINFO_STD_IMEMODE       =PPROPINFO(not IPROP_STD_IMEMODE);
  298.   PPROPINFO_STD_DATASOURCE    =PPROPINFO(not IPROP_STD_DATASOURCE);
  299.   PPROPINFO_STD_DATAFIELD     =PPROPINFO(not IPROP_STD_DATAFIELD);
  300.   PPROPINFO_STD_DATACHANGED   =PPROPINFO(not IPROP_STD_DATACHANGED);
  301.   PPROPINFO_STD_LAST          =PPROPINFO(not IPROP_STD_LAST);
  302.  
  303. {//---------------------------------------------------------------------------
  304. // Structure for VBM_DRAGOVER and VBM_DRAGDROP events
  305. //---------------------------------------------------------------------------}
  306.  
  307. type
  308.     TDRAGINFO=record
  309.         Control:        HCtl;
  310.         pt:                     TPOINT;
  311.         state:          Word;   { Enter, Over, Exit; only used for VBM_DRAGOVER}
  312.     end;
  313.  
  314.     PDRAGINFO = ^TDRAGINFO;
  315.     NPDRAGINFO = NPnt;
  316.     LPDRAGINFO = ^TDRAGINFO;
  317.  
  318. const
  319.     DRAG_STATE_ENTER       =$00;
  320.     DRAG_STATE_EXIT        =$01;
  321.     DRAG_STATE_OVER        =$02;
  322.  
  323.  
  324. {//---------------------------------------------------------------------------
  325. // Control MODEL structure
  326. //---------------------------------------------------------------------------}
  327.  
  328. type
  329.     LPMODEL = ^TMODEL;
  330.     TModel=Record
  331.         usVersion:              Word;           {VB version used by control}
  332.         fl:                             LongInt;    { Bitfield structure}
  333.         ctlproc:                TFARPROC;       {the control proc.}
  334.         fsClassStyle:   Word;           { window class style}
  335.         flWndStyle:             LongInt;        {default window style}
  336.         cbCtlExtra:             Word;           { # bytes alloc'd for HCtl structure}
  337.         idBmpPalette:   Word;           { BITMAP id for tool palette}
  338.         DefCtlName:     NPnt;           {PSTR;  { default control name prefix}
  339.         ClassName:              NPnt;           {PSTR;          { Visual Basic class name}
  340.         ParentClassName:        NPnt;   {PSTR;  { Parent window class if subclassed}
  341.         proplist:               NPPROPLIST      ;               { Property list}
  342.         eventlist:              NPEVENTLIST ;           { Event list}
  343.         nDefProp:               Byte;           { index of default property}
  344.         nDefEvent:              Byte;           { index of default event}
  345.         nValueProp:             Byte;           {// Index of control value property}
  346.     usCtlVersion:   Word;       {   // Identifies the current version of
  347.                     // the custom control. The values
  348.                     // 1 and 2 are reserved for custom
  349.                     // controls created with VB 1.0 and
  350.                     // VB 2.0.}
  351.     end;
  352.  
  353.  
  354.  
  355. const
  356.     MODEL_fArrows       =$00000001;
  357.     MODEL_fFocusOk      =$00000002;
  358.     MODEL_fMnemonic     =$00000004;
  359.     MODEL_fChildrenOk   =$00000008;
  360.     MODEL_fInitMsg      =$00000010;
  361.     MODEL_fLoadMsg      =$00000020;
  362.     MODEL_fDesInteract  =$00000040;
  363.     MODEL_fInvisAtRun   =$00000080;
  364.     MODEL_fGraphical    =$00000100;
  365.  
  366. {//---------------------------------------------------------------------------}
  367. {// MODELINFO structure}
  368. {//---------------------------------------------------------------------------}
  369. type
  370.     LPModelInfo = ^TModelInfo;
  371.     TModelInfo      = record
  372.         usVersion:      Word;
  373.         lplpmodel:      ^LPMODEL;
  374.     end;
  375.  
  376.  
  377. {//---------------------------------------------------------------------------
  378. // Picture structure
  379. //---------------------------------------------------------------------------}
  380. const
  381.     PICTYPE_NONE =          0;
  382.     PICTYPE_BITMAP          =1;
  383.     PICTYPE_METAFILE        =2;
  384.     PICTYPE_ICON            =3;
  385.  
  386.     HPic_INVALID       =    $FFFF;
  387.     HPic_NULL               =0;
  388.  
  389. type
  390.     TPicData = record
  391.         case  Byte of
  392.             PICType_BitMap: (BitMap: HBitMap; hpal: HPalette);
  393.             PICType_MetaFile:       (Meta: THandle;
  394.                                 xExt, yExt: Integer);
  395.             PICType_Icon    :       (Icon: HIcon);
  396.     end;
  397.  
  398.  
  399.     PPIC = ^TPIC;
  400.     TPIC = record
  401.         picType:        Byte;
  402.     picData:        TPicData;
  403.         picReserved: array[0..3]of Byte;
  404.     end;
  405.  
  406. {----------------}
  407. { Mode constants }
  408. {----------------}
  409. const
  410.   MODE_DESIGN=1;
  411.   MODE_RUN   =2;
  412.   MODE_BREAK =3;
  413. {----------------------------------------------}
  414. { Control flags for use with VBSetControlFlags }
  415. {----------------------------------------------}
  416. const
  417.   CTLFLG_HASPALETTE          =$00000001;
  418.   CTLFLG_USESPALETTE         =$00000002;
  419.   CTLFLG_GRAPHICALOPAQUE     =$00000004;
  420.   CTLFLG_GRAPHICALTRANSLUCENT=$00000008;
  421.   CTLFLG_DATACHANGED         =$00000010;
  422.   CTLFLG_BOUNDDATASET        =$00000020;
  423. {------------------------------------------------------------}
  424. { Data xfer structure for VBM_LINKGETDATA or VBM_LINKSETDATA }
  425. {------------------------------------------------------------}
  426. type LPLinkData=^TVBLinkData;
  427.      TVBLinkData=record
  428.        wReserved:Word;
  429.        cb:LongInt;
  430.        HData:THandle;
  431.        dwReserved:LongInt;
  432.      end;
  433. {------------}
  434. { Link modes }
  435. {------------}
  436. const
  437.   LINKMODENONE        =0;
  438.   LINKMODEAUTO        =1;
  439.   LINKMODEMANUAL      =2;
  440.   LINKMODENOTIFY      =3;
  441.   LINKMODESERVERPOKE  =1;
  442.   LINKMODESERVERNOPOKE=2;
  443. var
  444.   VBDDEDATA:TVBLINKDATA;
  445.   LPDDEDATA:LPLINKDATA;
  446. {------------------}
  447. { Misc DDE defines }
  448. {------------------}
  449. const
  450.     MAX_EXEC                        =256;
  451.     MAXLINKITEMNAME                 =256;
  452.  
  453.     ACCEPTSDATAFORMAT                =1;
  454.     SUPPLIESDATAFORMAT               =2;
  455.  
  456.     LINKSRCASK                       =0;
  457.     LINKSRCTELL                      =1;
  458.  
  459.     LINK_DATA_OK                     =0;
  460.     LINK_DATA_OOM                    =1;
  461.     LINK_DATA_FORMATBAD              =2;
  462.     LINK_DATA_SETFAILED              =3;
  463.  
  464. {         // Attempted to Initate on a channel that had linkmode set to None.}
  465.     errInitOnNonServerDesk   =6;
  466.  
  467. {// The Server Channel array is filled.}
  468.     errAllServerChUsed       =7;
  469.  
  470. {// The Set quality failed possible string too long.}
  471.     errDataSettingFailed     =8;  
  472.  
  473.     errOutOfMemoryForLink   =11;
  474.  
  475.  
  476. {//---------------------------------------------------------------------------
  477. // Bound control interface
  478. //---------------------------------------------------------------------------}
  479.  
  480. {// values for the sAction parameter on VBM_DATA_GET messages.}
  481. const
  482.     DATA_FIELDVALUE      =0;
  483.     DATA_FIELDNAME       =1;
  484.     DATA_FIELDTYPE       =2;
  485.     DATA_FIELDSIZE       =3;
  486.     DATA_FIELDSCOUNT     =4;
  487.     DATA_FIELDCHUNK      =5;
  488.     DATA_FIELDPOSITION   =6;
  489.     DATA_FIELDATTRIBUTES =7;
  490.  
  491.     DATA_BOF             =16;
  492.     DATA_EOF             =17;
  493.     DATA_BOOKMARK        =18;
  494.     DATA_BOOKMARKABLE    =19;
  495.     DATA_UPDATABLE       =20;
  496.     DATA_RECORDCOUNT     =21;
  497.     DATA_LASTMODIFIED    =22;
  498.  
  499. {// sAction values during VBM_DATA_AVAILABLE messages}
  500.  
  501.     DATA_MOVEFIRST        =64;
  502.     DATA_MOVENEXT         =65;
  503.     DATA_MOVEPREV         =66;
  504.     DATA_MOVELAST         =67;
  505.     DATA_FINDFIRST        =68;
  506.     DATA_FINDNEXT         =69;
  507.     DATA_FINDPREV         =70;
  508.     DATA_FINDLAST         =71;
  509.     DATA_DELETE           =72;
  510.     DATA_ADDNEW           =73;
  511.     DATA_REFRESH          =74;
  512.     DATA_ROLLBACK         =76;
  513.     DATA_CLOSE            =77;
  514.     DATA_DATAFIELDCHANGED =78;
  515.     DATA_SAVEDATA         =79;
  516.     DATA_READDATA         =80;
  517.     DATA_UPDATE           =81;
  518.     DATA_UNLOAD           =82;
  519.  
  520.  
  521. {// return types for VBM_DATA_GET with sAction = DATA_FIELDTYPE}
  522.  
  523.     DATA_VT_BOOL       =1;
  524.     DATA_VT_VAR_BYTE   =2;
  525.     DATA_VT_INTEGER    =3;
  526.     DATA_VT_LONG       =4;
  527.     DATA_VT_CURRENCY   =5;
  528.     DATA_VT_SINGLE     =6;
  529.     DATA_VT_DOUBLE     =7;
  530.     DATA_VT_DATETIME   =8;
  531.     DATA_VT_TEXT       =10;
  532.     DATA_VT_BINARY     =11;
  533.     DATA_VT_MEMO       =12;
  534.  
  535. {// VBM_DATA_GET with sAction = DATA_BOOKMARK fill in ldata with one of these}
  536.  
  537.     DATA_BOOKMARKFIRST        :LongInt      = $80000000;
  538.     DATA_BOOKMARKPREV         :longint      =       -1;
  539.     DATA_BOOKMARKCURRENT  :Longint  =       0;
  540.     DATA_BOOKMARKNEXT         :LongINt      =       1;
  541.     DATA_BOOKMARKLAST         :LongInt      =$7FFFFFFF;
  542.  
  543. {//}
  544.     DA_fNull    =   $0001;
  545.     DA_fBOF     =   $0002;
  546.     DA_fEOF     =   $0004;
  547.  
  548.  
  549. {//---------------------------------------------------------------------------}
  550. {// DA structure used for conversations with the data control}
  551. {//---------------------------------------------------------------------------}
  552. type
  553.     LPDataAccess = ^TDataAccess;
  554.     TDataAccess = record
  555.         usVersion:      Word;   {// VB version of structure filled in when
  556.                             // structure is created}
  557.         sAction:        Integer;{ // on VBM_DATA_GET/SET specifies what to get/set
  558.                             // on VBM_DATA_AVAILABLE/REQUEST tells why }
  559.         hctlData:       HCtl;   {// the data control providing data        }
  560.         hctlBound:      HCtl;             {// the bound control receiving data}
  561.         hszDataField:   HSZ;      {// the name of the field to get value of }
  562.         sDataFieldIndex: Integer; {// the field index used when FieldName is null}
  563.         usDataType:     Word;             {// the property datatype to convert data to  }
  564.         hlstrBookMark: HLStr;     {// used when getting multirow data }
  565.         fs:                             Word;     {// Bitfield structure}
  566.         lData:                  LongInt;  {// the data           }
  567.         ulChunkOffset:  LongInt;  {  // the offset to start at for GetChunk}
  568.         ulChunkNumBytes:LongInt;  {  // the number of bytes for GetChunk/SetChunk }
  569.     end;
  570.  
  571.  
  572. const
  573.     GC_FIRSTSIBLING       =$0000;
  574.     GC_LASTSIBLING        =$0001;
  575.     GC_NEXTSIBLING        =$0002;
  576.     GC_PREVSIBLING        =$0003;
  577.     GC_CHILD              =$0005;
  578.     GC_CONTAINER          =$1000;
  579.     GC_FORM               =$1001;
  580.     GC_FIRSTCONTROL       =$1002;
  581.     GC_NEXTCONTROL        =$1003;
  582.     GC_FIRSTSELECTED      =$1004;
  583.     GC_NEXTSELECTED       =$1005;
  584.  
  585.     ZORDER_FRONT    =0;
  586.     ZORDER_BACK     =1;
  587.  
  588.     AB_INVALIDINDEX     =1;   {// hAD or index is bad}
  589. {#define LOBOUND(x)       ((SHORT)((x) & 0xFFFF))
  590. #define HIBOUND(x)        ((SHORT)((x) >> 16))}
  591.  
  592.     EVENTNOTFIRED   =       $7FFF;
  593.  
  594. {//---------------------------------------------------------------------------}
  595. {//---------------------------------------------------------------------------}
  596. {// Visual Basic messages}
  597. {//---------------------------------------------------------------------------}
  598. {//---------------------------------------------------------------------------}
  599.     VBM__BASE          =    WM_USER + $0C00; 
  600.  
  601. {// All properties have been loaded.  Must set MODEL_fLoadMsg to receive.}
  602.     VBM_CREATED        =    VBM__BASE + $00; 
  603.  
  604. {// Form load is complete or dynamic control is fully loaded.  Must set}
  605. {// MODEL_fLoadMsg to receive.}
  606.     VBM_LOADED         =    VBM__BASE + $01;
  607.  
  608. {// Pre-hwnd properties are not yet loaded (no hwnd exists for control yet).}
  609. {// Must set MODEL_fInitMsg to receive.}
  610.     VBM_INITIALIZE     =    VBM__BASE + $02; 
  611.  
  612. {// Get a property value.}
  613. {// [wp=iprop, lp=pdata], RetVal=ERR}
  614.     VBM_GETPROPERTY    =    VBM__BASE + $03;
  615.  
  616. {// Verify a property value.}
  617. {// [wp=iprop, lp=data], RetVal=ERR}
  618.     VBM_CHECKPROPERTY  =    VBM__BASE + $04; 
  619.  
  620. {// Set a property value.}
  621. {// [wp=iprop, lp=data], RetVal=ERR}
  622.     VBM_SETPROPERTY    =    VBM__BASE + $05; 
  623.  
  624. {// Write a property.}
  625. {// [wp=iprop, lp=pfileref], RetVal=ERR}
  626.     VBM_SAVEPROPERTY   =    VBM__BASE + $06;
  627.  
  628. {// Read a property.}
  629. {// [wp=iprop, lp=pfileref], RetVal=ERR}
  630.     VBM_LOADPROPERTY   =    VBM__BASE + $07;
  631.  
  632. {// Get the string representation of a property.}
  633. {// [wp=iprop, lp=HSZ FAR *], RetVal=ERR}
  634.     VBM_GETPROPERTYHSZ =    VBM__BASE + $08; 
  635.  
  636. {// Create popup window used to change a property.}
  637. {// [wp=iprop, lp=listbox hwnd], RetVal=popup hwnd}
  638.     VBM_INITPROPPOPUP  =    VBM__BASE + $09; 
  639.  
  640. {// Determine if Paste/PasteLink is allowed.}
  641. {// [wp=PASTETYPE], RetVal=BOOL}
  642.     VBM_QPASTEOK       =    VBM__BASE + $0A; 
  643.  
  644.     PT_PASTE        =0;
  645.     PT_PASTELINK    =1;
  646.  
  647. {// Paste control-specific data from the clipboard.}
  648. {// [wp=PASTETYPE], RetVal=ERR}
  649.     VBM_PASTE          =    VBM__BASE + $0B; 
  650.  
  651. {// Copy control specific data to the clipboard.}
  652.     VBM_COPY           =    VBM__BASE + $0C; 
  653.  
  654. {// Control activated upon receipt of a unique mnemonic key.}
  655.     VBM_MNEMONIC       =    VBM__BASE + $0D; 
  656.  
  657. {// Posted to fire a deferred event.}
  658. {// [wp=event]}
  659.     VBM_FIREEVENT      =    VBM__BASE + $0E; 
  660.  
  661. {// Another control in drag mode drug over the control.}
  662. {// [lp=pdraginfo]}
  663.     VBM_DRAGOVER       =    VBM__BASE + $0F; 
  664.  
  665. {// This message is sent to a control that has just had another control}
  666. {// in drag mode dropped on it.}
  667. {// [lp=pdraginfo]}
  668.     VBM_DRAGDROP       =    VBM__BASE + $10; 
  669.  
  670. {// This message is sent when certain methods are invoked on controls}
  671. {// [wp=METH_, lp=far *alParams], RetVal=ERR}
  672.     VBM_METHOD         =    VBM__BASE + $11; 
  673.  
  674.     METH_ADDITEM    =       $0001 ;{        // args are: cArgs, hszItem, [index]}
  675.     METH_REMOVEITEM =       $0002 ;{        // args are: cArgs, index}
  676.     METH_REFRESH    =       $0003 ;{        // no args (lp == NULL)}
  677.     METH_MOVE       =       $0004 ;{        // args are: cArgs, left, [top, [width, [height]]]}
  678.     METH_DRAG       =       $0005 ;{        // args are: cArgs, [cmd]}
  679.     METH_LINKSEND   =       $0006;{  // no args (lp == NULL)}
  680.     METH_ZORDER     =       $0007 ;{        // args are: cArgs, pos}
  681.     METH_CLEAR      =       $000A ;{        // no args (lp == NULL)}
  682.  
  683. {// Clear capture and internal state.}
  684.     VBM_CANCELMODE     =    VBM__BASE + $12; 
  685.  
  686. {// Paint notification for graphical controls.}
  687. {// [wp=hdc, lp=lprect]}
  688.     VBM_PAINT          =    VBM__BASE + $14; 
  689.  
  690. {// Hit test for graphical controls.}
  691. {// [lp=lphittest], RetVal = HT_}
  692.     VBM_HITTEST        =    VBM__BASE + $15; 
  693.  
  694.     HT_ON             =7;
  695.     HT_SOLID_NEAR     =6;
  696.     HT_PATTERN_NEAR   =5;
  697.     HT_HOLLOW_NEAR    =4;
  698.     HT_SOLID          =3;
  699.     HT_PATTERN        =2;
  700.     HT_HOLLOW         =1;
  701.     HT_MISS           =0;
  702.  
  703. type
  704.     LPHitTest = ^THitTest;
  705.     THitTest = record
  706.         pt:     TPoint;
  707.         rect:   TRect;
  708.     end;
  709.  
  710. const
  711. {// Paint the multi-select handles}
  712. {// [wp=hdc, lp=rect(in hdc coords)]}
  713.     VBM_PAINTMULTISEL  =    VBM__BASE + $16; 
  714.  
  715. {// Paint the "gray rect" or ctl outline while moving/sizing ctl.}
  716. {// [wp=hdc, lp=rect(in hdc coords)]}
  717.     VBM_PAINTOUTLINE   =    VBM__BASE + $17;
  718.  
  719. {// Palette change notification.}
  720. {// [wp=fPalBack(for SelectPalette)], RetVal = return from RealizePalette}
  721.     VBM_PALETTECHANGED =    VBM__BASE + $1B; 
  722.  
  723. {// Get control palette.}
  724. {// RetVal = HPALETTE.}
  725.     VBM_GETPALETTE     =    VBM__BASE + $1C; 
  726.  
  727. {// Enumerate available formats.}
  728. {// [wp=SUPPLIESDATAFORMAT | ACCEPTSDATAFORMAT]}
  729. {// [LOWORD(lp)=ennumeration(0-x)]}
  730.     VBM_LINKENUMFORMATS=    VBM__BASE + $1E; 
  731.  
  732. {// Ask a control for it's LINK item name.  Return item name as lpsz in lp.}
  733. {// [wp=LINKSRCASK | LINKSRCTELL]}
  734. {// [lp=lpszItemName]}
  735.     VBM_LINKGETITEMNAME=    VBM__BASE + $1F; 
  736.  
  737. {// For Server items and client pokes.}
  738. {// [wp=wFormat lp=LPLINKDATA]}
  739.     VBM_LINKGETDATA    =    VBM__BASE + $20; 
  740.  
  741. {// Used in client requests, advises, and server pokes.}
  742. {// [wp=wFormat lp=LPLINKDATA]}
  743.     VBM_LINKSETDATA    =    VBM__BASE + $21; 
  744.  
  745. {// Get help on property or event name.}
  746. {// [LOBYTE(wp)=VBHELP_, HIBYTE(wp)=iprop/ievent, lp=lpmodel]}
  747.     VBM_HELP           =    VBM__BASE + $22; 
  748.  
  749.     VBHELP_PROP             =       $0001;
  750.     VBHELP_EVT              =       $0002;
  751.     VBHELP_CTL              =       $0003;
  752.  
  753. {// Get default size of control}
  754. {// LOWORD(RetVal)=cx, HIWORD(RetVal)=cy}
  755.     VBM_GETDEFSIZE     =    VBM__BASE + $23; 
  756.  
  757. {// Just like VBM_SAVE(LOAD)PROPERTY, but saves (loads) as text.}
  758.     VBM_SAVETEXTPROPERTY   =        VBM__BASE + $24; 
  759.     VBM_LOADTEXTPROPERTY   =        VBM__BASE + $25;
  760.  
  761. {// Is char a mnemonic for this control?}
  762. {// [wp=char] RetVal=TRUE/FALSE}
  763.     VBM_ISMNEMONIC     =    VBM__BASE + $26; 
  764.  
  765. {// Does control want to see WM_KEYUP/WM_KEYDOWN for vk?  Sent only}
  766. {// for keys which are normally trapped by VB.  E.g. Tab, Enter, etc.}
  767. {// [wp=vk] RetVal=TRUE/FALSE}
  768.     VBM_WANTSPECIALKEY =    VBM__BASE + $27; 
  769.  
  770. {//Notifies a control that it has been selected in the property window.}
  771. {//[wp=multiselect ON (TRUE) or OFF (FALSE)]}
  772. {//[LOWORD(lp)=multiselect count (0 first, n last)]}
  773.     VBM_SELECTED       =    VBM__BASE + $28;
  774.  
  775. {// Bound control interface}
  776.     VBM_DATA_INITIATE =     VBM__BASE + $29;
  777.     VBM_DATA_TERMINATE=     VBM__BASE + $2A;
  778.  
  779.     VBM_DATA_AVAILABLE=     VBM__BASE + $2B;
  780.     VBM_DATA_GET      =     VBM__BASE + $2C;
  781.     VBM_DATA_REQUEST  =     VBM__BASE + $2D;
  782.     VBM_DATA_SET      =     VBM__BASE + $2E;
  783.     VBM_DATA_METHOD   =     VBM__BASE + $2F;
  784.  
  785.  
  786. {// Notifications reflected back to control from parent.}
  787.     VBN__BASE         =     VBM__BASE + $1000;
  788.  
  789.     VBN_COMMAND             =       VBN__BASE + WM_COMMAND;
  790.     VBN_CTLCOLOR            =       VBN__BASE + WM_CTLCOLOR;
  791.     VBN_DRAWITEM            =       VBN__BASE + WM_DRAWITEM;
  792.     VBN_MEASUREITEM         =       VBN__BASE + WM_MEASUREITEM;
  793.     VBN_DELETEITEM          =       VBN__BASE + WM_DELETEITEM;
  794.     VBN_VKEYTOITEM          =       VBN__BASE + WM_VKEYTOITEM;
  795.     VBN_CHARTOITEM          =       VBN__BASE + WM_CHARTOITEM;
  796.     VBN_COMPAREITEM         =       VBN__BASE + WM_COMPAREITEM;
  797.     VBN_HSCROLL             =       VBN__BASE + WM_HSCROLL;
  798.     VBN_VSCROLL             =       VBN__BASE + WM_VSCROLL;
  799.     VBN_PARENTNOTIFY        =       VBN__BASE + WM_PARENTNOTIFY;
  800.  
  801.  
  802. {--------------------------}
  803. { FUNCTIONS and PROCEDURES }
  804. {--------------------------}
  805. {------------------}
  806. { General routines }
  807. {------------------}
  808. function VBGetMode:Word;
  809. {--------------------------}
  810. { General control routines }
  811. {--------------------------}
  812. function VBDerefControl(Control:HCtl):LongInt;
  813. function VBDefControlProc(Control:HCtl;Wnd:HWnd;Msg:Word;wParam:Word;lParam:LongInt):LongInt;
  814. function VBRegisterModel(HMod:THandle;var Model:TModel):Boolean;
  815. function VBGetControlHWnd(Control:HCtl):HWnd;
  816. function VBGetHInstance:THandle;
  817. function VBGetControlModel(Control:HCtl):LPModel;
  818. function VBGetControlName(Control:HCtl;lpszName:LPStr):LPStr;
  819. function VBGetHwndControl(Wnd:HWnd):HCtl;
  820. function VBSendControlMsg(Control:HCtl;Msg,wParam:Word;lParam:LongInt):LongInt;
  821. function VBSuperControlProc(Control:HCtl;Msg,wParam:Word;lParam:LongInt):LongInt;
  822. function VBRecreateControlHwnd(Control:HCtl):Word;
  823. procedure VBDirtyForm(Control:HCtl);
  824. function VBSetErrorMessage(Error:Word;Str:LPStr):Word;
  825. procedure VBGetAppTitle(Str:LPStr;cbMax:Word);
  826. function VBDialogBoxParam(Instance:THandle;TemplateName:LPStr;DialogFunc:TFARPROC;lp:LongInt):Integer;
  827. {---------------------------------------------}
  828. { Management of dynamically allocated strings }
  829. {---------------------------------------------}
  830. function VBCreateHsz(Control:HCtl;Str:LPStr):HSZ;
  831. function VBDestroyHsz(HSZStr:HSZ):HSZ;
  832. function VBDerefHsz(HSZStr:HSZ):LPStr;
  833. function VBLockHsz(HSZStr:HSZ):LPStr;
  834. function VBUnlockHsz(HSZStr:HSZ):LPStr;
  835. {--------------------------------}
  836. { Management of language strings }
  837. {--------------------------------}
  838. function VBCreateHlstr(pb:Pointer;cbLen:Word):HLStr;
  839. procedure VBDestroyHlstr(HStr:HLStr);
  840. function VBDerefHlstr(HStr:HLStr):LPStr;
  841. function VBGetHlstrLen(HStr:HLStr):Word;
  842. function VBSetHlstr(PHStr:Pointer;pb:Pointer;cbLen:Word):Word;
  843. {-------------------------------}
  844. { Firing Basic event procedures }
  845. {-------------------------------}
  846. function VBFireEvent(Control:HCtl;IdEvent:Word;LPParams:Pointer):Word;
  847. {-------------------------}
  848. { Control property access }
  849. {-------------------------}
  850. function VBGetControlProperty(Control:HCtl;IdProp:Word;PData:Pointer):Word;
  851. function VBSetControlProperty(Control:HCtl;IdProp:Word;Data:LongInt):Err;
  852. {------------------------------}
  853. { Picture management functions }
  854. {------------------------------}
  855. function VBAllocPic(PntPic:PPIC):HPic;
  856. procedure VBFreePic(Pic:HPic);
  857. function VBGetPic(Pic:HPic;PntPic:PPic):HPic;
  858. function VBPicFromCF(PntHPic:Pointer;HData:THandle;WFormat:Word):Word;
  859. function VBRefPic(Pic:HPic):HPic;
  860. {-------------------}
  861. { File IO functions }
  862. {-------------------}
  863. function VBReadFormFile(FormFile:HFormFile;pb:Pointer;cb:Word):Word;
  864. function VBWriteFormFile(FormFile:HFormFile;pb:Pointer;cb:Word):Word;
  865. function VBSeekFormFile(FormFile:HFormFile;OffSet:LongInt):LongInt;
  866. function VBRelSeekFormFile(FormFile:HFormFile;OffSet:LongInt):LongInt;
  867. function VBReadBasicFile(UsFileNo:Word;pb:Pointer;cb:Word):Word;
  868. function VBWriteBasicFile(UsFileNo:Word;pb:Pointer;cb:Word):Word;
  869. {----------------------}
  870. { Conversion functions }
  871. {----------------------}
  872. function VBYPixelsToTwips(Pixels:Integer):LongInt;
  873. function VBXPixelsToTwips(Pixels:Integer):LongInt;
  874. function VBYTwipsToPixels(Twips:LongInt):Integer;
  875. function VBXTwipsToPixels(Twips:LongInt):Integer;
  876. {-------------------}
  877. { Ver 2.0 Functions }
  878. {-------------------}
  879. function VBGetVersion:Word;
  880. function VBSetControlFlags(Control:HCtl;Mask:LongInt;Value:LongInt):LongInt;
  881. function VBGetCapture:HCtl;
  882. procedure VBSetCapture(Control:HCtl);
  883. procedure VBReleaseCapture;
  884. procedure VBMoveControl(Control:HCtl;var Rect:TRect;fRepaint:Bool);
  885. procedure VBGetControlRect(Control:HCtl;var Rect:TRect);
  886. procedure VBGetRectInContainer(Control:HCtl;var Rect:TRect);
  887. procedure VBGetClientRect(Control:HCtl;var Rect:TRect);
  888. procedure VBClientToScreen(Control:HCtl;var Point:TPoint);
  889. procedure VBScreenToClient(Control:HCtl;var Point:TPoint);
  890. function VBIsControlVisible(Control:HCtl):Bool;
  891. function VBIsControlEnabled(Control:HCtl):Bool;
  892. procedure VBInvalidateRect(Control:HCtl;var Rect:TRect;fEraseBkGnd:Bool);
  893. procedure VBUpdateControl(Control:HCtl);
  894. function VBGetControl(Control:HCtl;GC:Word):HCtl;
  895. procedure VBZOrder(Control:HCtl;Zorder:Word);
  896. function VBCreateTempHlstr(pb:Pointer;cbLen:Word):HLStr;
  897. function VBDerefHlstrLen(HStr:HLStr;var pCbLen:Word):PChar;
  898. function VBDerefZeroTermHlstr(HStr:HLStr):PChar;
  899. function VBGetHlstr(HStr:HLStr;pb:Pointer;cbLen:Word):Word;
  900. function VBResizeHlstr(HStr:HLStr;newCbLen:Word):Word;
  901. {------------------------------------------}
  902. { Management of language Variant data type }
  903. {------------------------------------------}
  904. function VBCoerceVariant(Variant:PVariant;vtype:Integer;lpData:Pointer):Word;
  905. function VBGetVariantType(Variant:PVariant):Integer;
  906. function VBGetVariantValue(Variant:PVariant;Value:PValue):Integer;
  907. function VBSetVariantValue(Variant:PVariant;vtype:Integer;lpData:Pointer):Word;
  908. {-------------------------------}
  909. { Management of language arrays }
  910. {-------------------------------}
  911. function VBArrayElement(VBArray:HAD;cIndex:Integer;var lpi:Integer):Pointer;
  912. function VBArrayBounds(VBArray:HAD;index:Integer):LongInt;
  913. function VBArrayElemSize(VBArray:HAD):Word;
  914. function VBArrayFirstElem(VBArray:HAD):Pointer;
  915. function VBArrayIndexCount(VBArray:HAD):Integer;
  916. {-------------------}
  917. { VB Error routines }
  918. {-------------------}
  919. procedure VBRuntimeError(Err:Word);
  920. {---------------------------------------------}
  921. { Floating-point stack save/restore utilities }
  922. {---------------------------------------------}
  923. function VBCbSaveFPState(pb:Pointer;cb:Word):Word;
  924. procedure VBRestoreFPState(pb:Pointer);
  925. {-------------------}
  926. { Picture functions }
  927. {-------------------}
  928. function VBAllocPicEx(PntPic:PPIC;usVersion:Word):HPic;
  929. function VBGetPicEx(Pic:HPic;PntPic:PPIC;usVersion:Word):HPic;
  930. procedure VBPaletteChanged(Control:HCtl);
  931. function VBTranslateColor(Control:HCtl;Color:LongInt):LongInt;
  932. {--------------------------}
  933. { Link Interface functions }
  934. {--------------------------}
  935. function VBLinkPostAdvise(Control:HCtl):Word;
  936. function VBPasteLinkOk(var phTriplet:THANDLE;Control:HCtl):Bool;
  937. {----------------}
  938. { Misc functions }
  939. {----------------}
  940. function VBFormat(VType:Integer;lpData:Pointer;lpszFmt:PChar;pb:Pointer;cb:Word):Integer;
  941. {-------------------}
  942. { New 3.0 functions }
  943. {-------------------}
  944. procedure VBLinkMakeItemName(Control:HCTL;lpszBuf:PChar);
  945. function VBGetDataSourceControl(Control:HCTL;blsRegistered:Bool):HCtl;
  946. function VBSeekBasicFile(usFileNo:Word;offset:LongInt):LongInt;
  947. function VBRelSeekBasicFile(usFileNo:Word;offset:LongInt):LongInt;
  948. {-------------------}
  949. { VB Messege Record }
  950. {-------------------}
  951. type TVBMsg=record
  952.        Control:HCtl;
  953.        Wnd:HWnd;
  954.        Msg:Word;
  955.        wParam:Word;
  956.        lParam:LongInt;
  957.        Result:LongInt;
  958.      end;
  959. implementation
  960. function VBGetVersion:Word;
  961. begin
  962.   asm
  963.     CMP  WORD PTR SS:[$0020],$00BC
  964.     JE   @Ver100
  965.     JNE  @NVer100
  966.     @Ver100:
  967.     MOV  AX,$100
  968.     JMP @Out
  969.     @NVer100:
  970.     MOV  BX,$00BC
  971.     CALL DWORD PTR SS:[$0020]
  972.     @Out:
  973.     MOV  [BP-$04],AX
  974.   end;
  975. end;
  976. function VBDerefControl(Control:HCtl):LongInt;
  977. begin
  978.   asm
  979.     PUSH WORD Ptr [BP+$08]
  980.     PUSH WORD Ptr [BP+$06]
  981.     MOV  BX,$0004
  982.     CALL DWORD PTR SS:[$0020]
  983.     MOV  [BP-$06],AX
  984.     MOV  [BP-$04],DX
  985.   end;
  986. end;
  987. function VBDefControlProc(Control:HCtl;Wnd:HWnd;Msg:Word;wParam:Word;lParam:LongInt):LongInt;
  988. begin
  989.   asm
  990.     PUSH WORD Ptr [BP+$12]
  991.     PUSH WORD Ptr [BP+$10]
  992.     PUSH WORD Ptr [BP+$0E]
  993.     PUSH WORD Ptr [BP+$0C]
  994.     PUSH WORD Ptr [BP+$0A]
  995.     PUSH WORD Ptr [BP+$08]
  996.     PUSH WORD Ptr [BP+$06]
  997.     MOV  BX,$0008
  998.     CALL DWORD PTR SS:[$0020]
  999.     MOV  [BP-$06],AX
  1000.     MOV  [BP-$04],DX
  1001.   end;
  1002. end;
  1003. function VBRegisterModel(HMod:THandle;var Model:TModel):Boolean;
  1004. begin
  1005.   MessageBeep(0);
  1006.   MessageBox(0,'Unregistered Copy of VBX Wizard'+#13+#10+'click on ''OK'' button to continue','VBX Wizard'
  1007.               ,MB_ICONEXCLAMATION or MB_OK);
  1008.   asm
  1009.     PUSH WORD Ptr [BP+$0A]
  1010.     LES  DI,[BP+$06]
  1011.     PUSH ES
  1012.     PUSH DI
  1013.     MOV  BX,$0000
  1014.     CALL DWORD PTR SS:[$0020]
  1015.     MOV  [BP-$03],AL
  1016.   end;
  1017. end;
  1018. function VBGetControlHwnd(Control:HCtl):HWnd;
  1019. begin
  1020.   asm
  1021.     PUSH WORD Ptr [BP+$08]
  1022.     PUSH WORD Ptr [BP+$06]
  1023.     MOV  BX,$002C
  1024.     CALL DWORD PTR SS:[$0020]
  1025.     MOV  [BP-$04],AX
  1026.   end;
  1027. end;
  1028. function VBGetHInstance:THandle;
  1029. begin
  1030.   asm
  1031.     MOV  BX,$004C
  1032.     CALL DWORD PTR SS:[$0020]
  1033.     MOV  [BP-$04],AX
  1034.   end;
  1035. end;
  1036. function VBGetControlModel(Control:HCtl):LPModel;
  1037. begin
  1038.   asm
  1039.     PUSH WORD Ptr [BP+$08]
  1040.     PUSH WORD Ptr [BP+$06]
  1041.     MOV  BX,$0034
  1042.     CALL DWORD PTR SS:[$0020]
  1043.     MOV  [BP-$06],AX
  1044.     MOV  [BP-$04],DX
  1045.   end;
  1046. end;
  1047. function VBGetControlName(Control:HCtl;lpszName:LPStr):LPStr;
  1048. begin
  1049.   asm
  1050.     PUSH WORD Ptr [BP+$0C]
  1051.     PUSH WORD Ptr [BP+$0A]
  1052.     PUSH WORD Ptr [BP+$08]
  1053.     PUSH WORD Ptr [BP+$06]
  1054.     MOV  BX,$00A8
  1055.     CALL DWORD PTR SS:[$0020]
  1056.     MOV  [BP-$06],AX
  1057.     MOV  [BP-$04],DX
  1058.   end;
  1059. end;
  1060. function VBGetHwndControl(Wnd:HWnd):HCtl;
  1061. begin
  1062.   asm
  1063.     PUSH WORD Ptr [BP+$06]
  1064.     MOV  BX,$0064
  1065.     CALL DWORD PTR SS:[$0020]
  1066.     MOV  [BP-$06],AX
  1067.     MOV  [BP-$04],DX
  1068.   end;
  1069. end;
  1070. function VBSendControlMsg(Control:HCtl;Msg,wParam:Word;lParam:LongInt):LongInt;
  1071. begin
  1072.   asm
  1073.     PUSH WORD Ptr [BP+$10]
  1074.     PUSH WORD Ptr [BP+$0E]
  1075.     PUSH WORD Ptr [BP+$0C]
  1076.     PUSH WORD Ptr [BP+$0A]
  1077.     PUSH WORD Ptr [BP+$08]
  1078.     PUSH WORD Ptr [BP+$06]
  1079.     MOV  BX,$0038
  1080.     CALL DWORD PTR SS:[$0020]
  1081.     MOV  [BP-$06],AX
  1082.     MOV  [BP-$04],DX
  1083.   end;
  1084. end;
  1085. function VBSuperControlProc(Control:HCtl;Msg,wParam:Word;lParam:LongInt):LongInt;
  1086. begin
  1087.   asm
  1088.     PUSH WORD Ptr [BP+$10]
  1089.     PUSH WORD Ptr [BP+$0E]
  1090.     PUSH WORD Ptr [BP+$0C]
  1091.     PUSH WORD Ptr [BP+$0A]
  1092.     PUSH WORD Ptr [BP+$08]
  1093.     PUSH WORD Ptr [BP+$06]
  1094.     MOV  BX,$0044
  1095.     CALL DWORD PTR SS:[$0020]
  1096.     MOV  [BP-$06],AX
  1097.     MOV  [BP-$04],DX
  1098.   end;
  1099. end;
  1100. function VBRecreateControlHwnd(Control:HCtl):Word;
  1101. begin
  1102.   asm
  1103.     PUSH WORD Ptr [BP+$08]
  1104.     PUSH WORD Ptr [BP+$06]
  1105.     MOV  BX,$0030
  1106.     CALL DWORD PTR SS:[$0020]
  1107.     MOV  [BP-$04],AX
  1108.   end;
  1109. end;
  1110. procedure VBDirtyForm(Control:HCtl);
  1111. begin
  1112.   asm
  1113.     PUSH WORD Ptr [BP+$08]
  1114.     PUSH WORD Ptr [BP+$06]
  1115.     MOV  BX,$00C8
  1116.     CALL DWORD PTR SS:[$0020]
  1117.   end;
  1118. end;
  1119. function VBSetErrorMessage(Error:Word;Str:LPStr):Word;
  1120. begin
  1121.   asm
  1122.     PUSH WORD Ptr [BP+$0A]
  1123.     PUSH WORD Ptr [BP+$08]
  1124.     PUSH WORD Ptr [BP+$06]
  1125.     MOV  BX,$0094
  1126.     CALL DWORD PTR SS:[$0020]
  1127.     MOV  [BP-$04],AX
  1128.   end;
  1129. end;
  1130. procedure VBGetAppTitle(Str:LPStr;cbMax:Word);
  1131. begin
  1132.   asm
  1133.     PUSH WORD Ptr [BP+$0A]
  1134.     PUSH WORD Ptr [BP+$08]
  1135.     PUSH WORD Ptr [BP+$06]
  1136.     MOV  BX,$0098
  1137.     CALL DWORD PTR SS:[$0020]
  1138.   end;
  1139. end;
  1140. function VBDialogBoxParam(Instance:THandle;TemplateName:LPStr;DialogFunc:TFARPROC;lp:LongInt):Integer;
  1141. begin
  1142.   asm
  1143.     PUSH WORD Ptr [BP+$12]
  1144.     PUSH WORD Ptr [BP+$10]
  1145.     PUSH WORD Ptr [BP+$0E]
  1146.     PUSH WORD Ptr [BP+$0C]
  1147.     PUSH WORD Ptr [BP+$0A]
  1148.     PUSH WORD Ptr [BP+$08]
  1149.     PUSH WORD Ptr [BP+$06]
  1150.     MOV  BX,$009C
  1151.     CALL DWORD PTR SS:[$0020]
  1152.     MOV  [BP-$04],AX
  1153.   end;
  1154. end;
  1155. function VBSetControlFlags(Control:HCtl;Mask:LongInt;Value:LongInt):LongInt;
  1156. begin
  1157.   asm
  1158.     PUSH WORD Ptr [BP+$10]
  1159.     PUSH WORD Ptr [BP+$0E]
  1160.     PUSH WORD Ptr [BP+$0C]
  1161.     PUSH WORD Ptr [BP+$0A]
  1162.     PUSH WORD Ptr [BP+$08]
  1163.     PUSH WORD Ptr [BP+$06]
  1164.     MOV  BX,$00CC
  1165.     CALL DWORD PTR SS:[$0020]
  1166.     MOV  [BP-$06],AX
  1167.     MOV  [BP-$04],DX
  1168.   end;
  1169. end;
  1170. function VBGetCapture:HCtl;
  1171. begin
  1172.   asm
  1173.     MOV  BX,$00E0
  1174.     CALL DWORD PTR SS:[$0020]
  1175.     MOV  [BP-$06],AX
  1176.     MOV  [BP-$04],DX
  1177.   end;
  1178. end;
  1179. procedure VBSetCapture(Control:HCtl);
  1180. begin
  1181.   asm
  1182.     PUSH WORD Ptr [BP+$08]
  1183.     PUSH WORD Ptr [BP+$06]
  1184.     MOV  BX,$00E4
  1185.     CALL DWORD PTR SS:[$0020]
  1186.   end;
  1187. end;
  1188. procedure VBReleaseCapture;
  1189. begin
  1190.   asm
  1191.     MOV  BX,$00E8
  1192.     CALL DWORD PTR SS:[$0020]
  1193.   end;
  1194. end;
  1195. procedure VBMoveControl(Control:HCtl;var Rect:TRect;fRepaint:Bool);
  1196. begin
  1197.   asm
  1198.     PUSH WORD Ptr [BP+$0E]
  1199.     PUSH WORD Ptr [BP+$0C]
  1200.     LES  DI,[BP+$08]
  1201.     PUSH ES
  1202.     PUSH DI
  1203.     PUSH WORD Ptr [BP+$06]
  1204.     MOV  BX,$00F4
  1205.     CALL DWORD PTR SS:[$0020]
  1206.   end;
  1207. end;
  1208. procedure VBGetControlRect(Control:HCtl;var Rect:TRect);
  1209. begin
  1210.   asm
  1211.     PUSH WORD Ptr [BP+$0C]
  1212.     PUSH WORD Ptr [BP+$0A]
  1213.     LES  DI,[BP+$06]
  1214.     PUSH ES
  1215.     PUSH DI
  1216.     MOV  BX,$00F8
  1217.     CALL DWORD PTR SS:[$0020]
  1218.   end;
  1219. end;
  1220. procedure VBGetRectInContainer(Control:HCtl;var Rect:TRect);
  1221. begin
  1222.   asm
  1223.     PUSH WORD Ptr [BP+$0C]
  1224.     PUSH WORD Ptr [BP+$0A]
  1225.     LES  DI,[BP+$06]
  1226.     PUSH ES
  1227.     PUSH DI
  1228.     MOV  BX,$00FC
  1229.     CALL DWORD PTR SS:[$0020]
  1230.   end;
  1231. end;
  1232. procedure VBGetClientRect(Control:HCtl;var Rect:TRect);
  1233. begin
  1234.   asm
  1235.     PUSH WORD Ptr [BP+$0C]
  1236.     PUSH WORD Ptr [BP+$0A]
  1237.     LES  DI,[BP+$06]
  1238.     PUSH ES
  1239.     PUSH DI
  1240.     MOV  BX,$0100
  1241.     CALL DWORD PTR SS:[$0020]
  1242.   end;
  1243. end;
  1244. procedure VBClientToScreen(Control:HCtl;var Point:TPoint);
  1245. begin
  1246.   asm
  1247.     PUSH WORD Ptr [BP+$0C]
  1248.     PUSH WORD Ptr [BP+$0A]
  1249.     LES  DI,[BP+$06]
  1250.     PUSH ES
  1251.     PUSH DI
  1252.     MOV  BX,$0104
  1253.     CALL DWORD PTR SS:[$0020]
  1254.   end;
  1255. end;
  1256. procedure VBScreenToClient(Control:HCtl;var Point:TPoint);
  1257. begin
  1258.   asm
  1259.     PUSH WORD Ptr [BP+$0C]
  1260.     PUSH WORD Ptr [BP+$0A]
  1261.     LES  DI,[BP+$06]
  1262.     PUSH ES
  1263.     PUSH DI
  1264.     MOV  BX,$0108
  1265.     CALL DWORD PTR SS:[$0020]
  1266.   end;
  1267. end;
  1268. function VBIsControlVisible(Control:HCtl):Bool;
  1269. begin
  1270.   asm
  1271.     PUSH WORD Ptr [BP+$08]
  1272.     PUSH WORD Ptr [BP+$06]
  1273.     MOV  BX,$010C
  1274.     CALL DWORD PTR SS:[$0020]
  1275.     MOV  [BP-$04],AX
  1276.   end;
  1277. end;
  1278. function VBIsControlEnabled(Control:HCtl):Bool;
  1279. begin
  1280.   asm
  1281.     PUSH WORD Ptr [BP+$08]
  1282.     PUSH WORD Ptr [BP+$06]
  1283.     MOV  BX,$0110
  1284.     CALL DWORD PTR SS:[$0020]
  1285.     MOV  [BP-$04],AX
  1286.   end;
  1287. end;
  1288. procedure VBInvalidateRect(Control:HCtl;var Rect:TRect;fEraseBkGnd:Bool);
  1289. begin
  1290.   asm
  1291.     PUSH WORD Ptr [BP+$0E]
  1292.     PUSH WORD Ptr [BP+$0C]
  1293.     LES  DI,[BP+$08]
  1294.     PUSH ES
  1295.     PUSH DI
  1296.     PUSH WORD Ptr [BP+$06]
  1297.     MOV  BX,$0114
  1298.     CALL DWORD PTR SS:[$0020]
  1299.   end;
  1300. end;
  1301. procedure VBUpdateControl(Control:HCtl);
  1302. begin
  1303.   asm
  1304.     PUSH WORD Ptr [BP+$08]
  1305.     PUSH WORD Ptr [BP+$06]
  1306.     MOV  BX,$0118
  1307.     CALL DWORD PTR SS:[$0020]
  1308.   end;
  1309. end;
  1310. function VBGetControl(Control:HCtl;GC:Word):HCtl;
  1311. begin
  1312.   asm
  1313.     PUSH WORD Ptr [BP+$0A]
  1314.     PUSH WORD Ptr [BP+$08]
  1315.     PUSH WORD Ptr [BP+$06]
  1316.     MOV  BX,$00EC
  1317.     CALL DWORD PTR SS:[$0020]
  1318.     MOV  [BP-$06],AX
  1319.     MOV  [BP-$04],DX
  1320.   end;
  1321. end;
  1322. procedure VBZOrder(Control:HCtl;Zorder:Word);
  1323. begin
  1324.   asm
  1325.     PUSH WORD Ptr [BP+$0A]
  1326.     PUSH WORD Ptr [BP+$08]
  1327.     PUSH WORD Ptr [BP+$06]
  1328.     MOV  BX,$00F0
  1329.     CALL DWORD PTR SS:[$0020]
  1330.   end;
  1331. end;
  1332. function VBCreateHsz(Control:HCtl;Str:LPStr):HSZ;
  1333. begin
  1334.   asm
  1335.     PUSH WORD Ptr [BP+$0C]
  1336.     PUSH WORD Ptr [BP+$0A]
  1337.     PUSH WORD Ptr [BP+$08]
  1338.     PUSH WORD Ptr [BP+$06]
  1339.     MOV  BX,$0018
  1340.     CALL DWORD PTR SS:[$0020]
  1341.     MOV  [BP-$06],AX
  1342.     MOV  [BP-$04],DX
  1343.   end;
  1344. end;
  1345. function VBDestroyHsz(HSZStr:HSZ):HSZ;
  1346. begin
  1347.   asm
  1348.     PUSH WORD Ptr [BP+$08]
  1349.     PUSH WORD Ptr [BP+$06]
  1350.     MOV  BX,$001C
  1351.     CALL DWORD PTR SS:[$0020]
  1352.     MOV  [BP-$06],AX
  1353.     MOV  [BP-$04],DX
  1354.   end;
  1355. end;
  1356. function VBDerefHsz(HSZStr:HSZ):LPStr;
  1357. begin
  1358.   asm
  1359.     PUSH WORD Ptr [BP+$08]
  1360.     PUSH WORD Ptr [BP+$06]
  1361.     MOV  BX,$0020
  1362.     CALL DWORD PTR SS:[$0020]
  1363.     MOV  [BP-$06],AX
  1364.     MOV  [BP-$04],DX
  1365.   end;
  1366. end;
  1367. function VBLockHsz(HSZStr:HSZ):LPStr;
  1368. begin
  1369.   asm
  1370.     PUSH WORD Ptr [BP+$08]
  1371.     PUSH WORD Ptr [BP+$06]
  1372.     MOV  BX,$0024
  1373.     CALL DWORD PTR SS:[$0020]
  1374.     MOV  [BP-$06],AX
  1375.     MOV  [BP-$04],DX
  1376.   end;
  1377. end;
  1378. function VBUnlockHsz(HSZStr:HSZ):LPStr;
  1379. begin
  1380.   asm
  1381.     PUSH WORD Ptr [BP+$08]
  1382.     PUSH WORD Ptr [BP+$06]
  1383.     MOV  BX,$0028
  1384.     CALL DWORD PTR SS:[$0020]
  1385.     MOV  [BP-$06],AX
  1386.     MOV  [BP-$04],DX
  1387.   end;
  1388. end;
  1389. function VBCreateHlstr(pb:Pointer;cbLen:Word):HLStr;
  1390. begin
  1391.   asm
  1392.     PUSH WORD Ptr [BP+$0A]
  1393.     PUSH WORD Ptr [BP+$08]
  1394.     PUSH WORD Ptr [BP+$06]
  1395.     MOV  BX,$0050
  1396.     CALL DWORD PTR SS:[$0020]
  1397.     MOV  [BP-$06],AX
  1398.     MOV  [BP-$04],DX
  1399.   end;
  1400. end;
  1401. function VBCreateTempHlstr(pb:Pointer;cbLen:Word):HLStr;
  1402. begin
  1403.   asm
  1404.     PUSH WORD Ptr [BP+$0A]
  1405.     PUSH WORD Ptr [BP+$08]
  1406.     PUSH WORD Ptr [BP+$06]
  1407.     MOV  BX,$013C
  1408.     CALL DWORD PTR SS:[$0020]
  1409.     MOV  [BP-$06],AX
  1410.     MOV  [BP-$04],DX
  1411.   end;
  1412. end;
  1413. procedure VBDestroyHlstr(HStr:HLStr);
  1414. begin
  1415.   asm
  1416.     PUSH WORD Ptr [BP+$08]
  1417.     PUSH WORD Ptr [BP+$06]
  1418.     MOV  BX,$0058
  1419.     CALL DWORD PTR SS:[$0020]
  1420.   end;
  1421. end;
  1422. function VBDerefHlstr(HStr:HLStr):LPStr;
  1423. begin
  1424.   asm
  1425.     PUSH WORD Ptr [BP+$08]
  1426.     PUSH WORD Ptr [BP+$06]
  1427.     MOV  BX,$005C
  1428.     CALL DWORD PTR SS:[$0020]
  1429.     MOV  [BP-$06],AX
  1430.     MOV  [BP-$04],DX
  1431.   end;
  1432. end;
  1433. function VBDerefHlstrLen(HStr:HLStr;var pCbLen:Word):PChar;
  1434. begin
  1435.   asm
  1436.     PUSH WORD Ptr [BP+$0C]
  1437.     PUSH WORD Ptr [BP+$0A]
  1438.     LES  DI,[BP+$06]
  1439.     PUSH ES
  1440.     PUSH DI
  1441.     MOV  BX,$0134
  1442.     CALL DWORD PTR SS:[$0020]
  1443.     MOV  [BP-$04],AX
  1444.   end;
  1445. end;
  1446. function VBDerefZeroTermHlstr(HStr:HLStr):PChar;
  1447. begin
  1448.   asm
  1449.     PUSH WORD Ptr [BP+$08]
  1450.     PUSH WORD Ptr [BP+$06]
  1451.     MOV  BX,$0138
  1452.     CALL DWORD PTR SS:[$0020]
  1453.     MOV  [BP-$06],AX
  1454.     MOV  [BP-$04],DX
  1455.   end;
  1456. end;
  1457. function VBGetHlstr(HStr:HLStr;pb:Pointer;cbLen:Word):Word;
  1458. begin
  1459.   asm
  1460.     PUSH WORD Ptr [BP+$0E]
  1461.     PUSH WORD Ptr [BP+$0C]
  1462.     PUSH WORD Ptr [BP+$0A]
  1463.     PUSH WORD Ptr [BP+$08]
  1464.     PUSH WORD Ptr [BP+$06]
  1465.     MOV  BX,$012C
  1466.     CALL DWORD PTR SS:[$0020]
  1467.     MOV  [BP-$04],AX
  1468.   end;
  1469. end;
  1470. function VBGetHlstrLen(HStr:HLStr):Word;
  1471. begin
  1472.   asm
  1473.     PUSH WORD Ptr [BP+$08]
  1474.     PUSH WORD Ptr [BP+$06]
  1475.     MOV  BX,$0060
  1476.     CALL DWORD PTR SS:[$0020]
  1477.     MOV  [BP-$04],AX
  1478.   end;
  1479. end;
  1480. function VBSetHlstr(PHStr:Pointer;pb:Pointer;cbLen:Word):Word;
  1481. begin
  1482.   asm
  1483.     PUSH WORD Ptr [BP+$0E]
  1484.     PUSH WORD Ptr [BP+$0C]
  1485.     PUSH WORD Ptr [BP+$0A]
  1486.     PUSH WORD Ptr [BP+$08]
  1487.     PUSH WORD Ptr [BP+$06]
  1488.     MOV  BX,$0054
  1489.     CALL DWORD PTR SS:[$0020]
  1490.     MOV  [BP-$04],AX
  1491.   end;
  1492. end;
  1493. function VBResizeHlstr(HStr:HLStr;newCbLen:Word):Word;
  1494. begin
  1495.   asm
  1496.     PUSH WORD Ptr [BP+$0A]
  1497.     PUSH WORD Ptr [BP+$08]
  1498.     PUSH WORD Ptr [BP+$06]
  1499.     MOV  BX,$0130
  1500.     CALL DWORD PTR SS:[$0020]
  1501.     MOV  [BP-$04],AX
  1502.   end;
  1503. end;
  1504. function VBCoerceVariant(Variant:PVariant;vtype:Integer;lpData:Pointer):Word;
  1505. begin
  1506.   asm
  1507.     PUSH WORD Ptr [BP+$0E]
  1508.     PUSH WORD Ptr [BP+$0C]
  1509.     PUSH WORD Ptr [BP+$0A]
  1510.     PUSH WORD Ptr [BP+$08]
  1511.     PUSH WORD Ptr [BP+$06]
  1512.     MOV  BX,$011C
  1513.     CALL DWORD PTR SS:[$0020]
  1514.     MOV  [BP-$04],AX
  1515.   end;
  1516. end;
  1517. function VBGetVariantType(Variant:PVariant):Integer;
  1518. begin
  1519.   asm
  1520.     PUSH WORD Ptr [BP+$08]
  1521.     PUSH WORD Ptr [BP+$06]
  1522.     MOV  BX,$0120
  1523.     CALL DWORD PTR SS:[$0020]
  1524.     MOV  [BP-$04],AX
  1525.   end;
  1526. end;
  1527. function VBGetVariantValue(Variant:PVariant;Value:PValue):Integer;
  1528. begin
  1529.   asm
  1530.     PUSH WORD Ptr [BP+$0C]
  1531.     PUSH WORD Ptr [BP+$0A]
  1532.     PUSH WORD Ptr [BP+$08]
  1533.     PUSH WORD Ptr [BP+$06]
  1534.     MOV  BX,$0124
  1535.     CALL DWORD PTR SS:[$0020]
  1536.     MOV  [BP-$04],AX
  1537.   end;
  1538. end;
  1539. function VBSetVariantValue(Variant:PVariant;vtype:Integer;lpData:Pointer):Word;
  1540. begin
  1541.   asm
  1542.     PUSH WORD Ptr [BP+$0E]
  1543.     PUSH WORD Ptr [BP+$0C]
  1544.     PUSH WORD Ptr [BP+$0A]
  1545.     PUSH WORD Ptr [BP+$08]
  1546.     PUSH WORD Ptr [BP+$06]
  1547.     MOV  BX,$0128
  1548.     CALL DWORD PTR SS:[$0020]
  1549.     MOV  [BP-$04],AX
  1550.   end;
  1551. end;
  1552. function VBArrayElement(VBArray:HAD;cIndex:Integer;var lpi:Integer):Pointer;
  1553. begin
  1554.   asm
  1555.     PUSH WORD Ptr [BP+$0E]
  1556.     PUSH WORD Ptr [BP+$0C]
  1557.     PUSH WORD Ptr [BP+$0A]
  1558.     LES  DI,[BP+$06]
  1559.     PUSH ES
  1560.     PUSH DI
  1561.     MOV  BX,$0140
  1562.     CALL DWORD PTR SS:[$0020]
  1563.     MOV  [BP-$06],AX
  1564.     MOV  [BP-$04],DX
  1565.   end;
  1566. end;
  1567. function VBArrayBounds(VBArray:HAD;index:Integer):LongInt;
  1568. begin
  1569.   asm
  1570.     PUSH WORD Ptr [BP+$0A]
  1571.     PUSH WORD Ptr [BP+$08]
  1572.     PUSH WORD Ptr [BP+$06]
  1573.     MOV  BX,$0144
  1574.     CALL DWORD PTR SS:[$0020]
  1575.     MOV  [BP-$06],AX
  1576.     MOV  [BP-$04],DX
  1577.   end;
  1578. end;
  1579. function VBArrayElemSize(VBArray:HAD):Word;
  1580. begin
  1581.   asm
  1582.     PUSH WORD Ptr [BP+$08]
  1583.     PUSH WORD Ptr [BP+$06]
  1584.     MOV  BX,$0148
  1585.     CALL DWORD PTR SS:[$0020]
  1586.     MOV  [BP-$04],AX
  1587.   end;
  1588. end;
  1589. function VBArrayFirstElem(VBArray:HAD):Pointer;
  1590. begin
  1591.   asm
  1592.     PUSH WORD Ptr [BP+$08]
  1593.     PUSH WORD Ptr [BP+$06]
  1594.     MOV  BX,$014C
  1595.     CALL DWORD PTR SS:[$0020]
  1596.     MOV  [BP-$06],AX
  1597.     MOV  [BP-$04],DX
  1598.   end;
  1599. end;
  1600. function VBArrayIndexCount(VBArray:HAD):Integer;
  1601. begin
  1602.   asm
  1603.     PUSH WORD Ptr [BP+$08]
  1604.     PUSH WORD Ptr [BP+$06]
  1605.     MOV  BX,$0150
  1606.     CALL DWORD PTR SS:[$0020]
  1607.     MOV  [BP-$04],AX
  1608.   end;
  1609. end;
  1610. procedure VBRuntimeError(Err:Word);
  1611. begin
  1612.   asm
  1613.     PUSH WORD Ptr [BP+$06]
  1614.     MOV  BX,$0154
  1615.     CALL DWORD PTR SS:[$0020]
  1616.   end;
  1617. end;
  1618. function VBCbSaveFPState(pb:Pointer;cb:Word):Word;
  1619. begin
  1620.   asm
  1621.     PUSH WORD Ptr [BP+$0A]
  1622.     PUSH WORD Ptr [BP+$08]
  1623.     PUSH WORD Ptr [BP+$06]
  1624.     MOV  BX,$015C
  1625.     CALL DWORD PTR SS:[$0020]
  1626.     MOV  [BP-$04],AX
  1627.   end;
  1628. end;
  1629. procedure VBRestoreFPState(pb:Pointer);
  1630. begin
  1631.   asm
  1632.     PUSH WORD Ptr [BP+$08]
  1633.     PUSH WORD Ptr [BP+$06]
  1634.     MOV  BX,$0160
  1635.     CALL DWORD PTR SS:[$0020]
  1636.   end;
  1637. end;
  1638. function VBFireEvent(Control:HCtl;IdEvent:Word;LPParams:Pointer):Word;
  1639. begin
  1640.   asm
  1641.     PUSH WORD Ptr [BP+$0E]
  1642.     PUSH WORD Ptr [BP+$0C]
  1643.     PUSH WORD Ptr [BP+$0A]
  1644.     PUSH WORD Ptr [BP+$08]
  1645.     PUSH WORD Ptr [BP+$06]
  1646.     MOV  BX,$000C
  1647.     CALL DWORD PTR SS:[$0020]
  1648.     MOV  [BP-$04],AX
  1649.   end;
  1650. end;
  1651. function VBGetControlProperty(Control:HCtl;IdProp:Word;PData:Pointer):Word;
  1652. begin
  1653.   asm
  1654.     PUSH WORD Ptr [BP+$0E]
  1655.     PUSH WORD Ptr [BP+$0C]
  1656.     PUSH WORD Ptr [BP+$0A]
  1657.     PUSH WORD Ptr [BP+$08]
  1658.     PUSH WORD Ptr [BP+$06]
  1659.     MOV  BX,$0014
  1660.     CALL DWORD PTR SS:[$0020]
  1661.     MOV  [BP-$04],AX
  1662.   end;
  1663. end;
  1664. function VBSetControlProperty(Control:HCtl;IdProp:Word;Data:LongInt):Err;
  1665. begin
  1666.   asm
  1667.     PUSH WORD Ptr [BP+$0E]
  1668.     PUSH WORD Ptr [BP+$0C]
  1669.     PUSH WORD Ptr [BP+$0A]
  1670.     PUSH WORD Ptr [BP+$08]
  1671.     PUSH WORD Ptr [BP+$06]
  1672.     MOV  BX,$0010
  1673.     CALL DWORD PTR SS:[$0020]
  1674.     MOV  [BP-$04],AX
  1675.   end;
  1676. end;
  1677. function VBAllocPic(PntPic:PPIC):HPic;
  1678. begin
  1679.   asm
  1680.     PUSH WORD Ptr [BP+$08]
  1681.     PUSH WORD Ptr [BP+$06]
  1682.     MOV  BX,$0080
  1683.     CALL DWORD PTR SS:[$0020]
  1684.     MOV  [BP-$04],AX
  1685.   end;
  1686. end;
  1687. function VBAllocPicEx(PntPic:PPIC;usVersion:Word):HPic;
  1688. begin
  1689.   asm
  1690.     PUSH WORD Ptr [BP+$0A]
  1691.     PUSH WORD Ptr [BP+$08]
  1692.     PUSH WORD Ptr [BP+$06]
  1693.     MOV  BX,$00D4
  1694.     CALL DWORD PTR SS:[$0020]
  1695.     MOV  [BP-$04],AX
  1696.   end;
  1697. end;
  1698. procedure VBFreePic(Pic:HPic);
  1699. begin
  1700.   asm
  1701.     PUSH WORD Ptr [BP+$06]
  1702.     MOV  BX,$0084
  1703.     CALL DWORD PTR SS:[$0020]
  1704.   end;
  1705. end;
  1706. function VBGetPic(Pic:HPic;PntPic:PPic):HPic;
  1707. begin
  1708.   asm
  1709.     PUSH WORD Ptr [BP+$0A]
  1710.     PUSH WORD Ptr [BP+$08]
  1711.     PUSH WORD Ptr [BP+$06]
  1712.     MOV  BX,$0088
  1713.     CALL DWORD PTR SS:[$0020]
  1714.     MOV  [BP-$04],AX
  1715.   end;
  1716. end;
  1717. function VBGetPicEx(Pic:HPic;PntPic:PPIC;usVersion:Word):HPic;
  1718. begin
  1719.   asm
  1720.     PUSH WORD Ptr [BP+$0C]
  1721.     PUSH WORD Ptr [BP+$0A]
  1722.     PUSH WORD Ptr [BP+$08]
  1723.     PUSH WORD Ptr [BP+$06]
  1724.     MOV  BX,$00D8
  1725.     CALL DWORD PTR SS:[$0020]
  1726.     MOV  [BP-$04],AX
  1727.   end;
  1728. end;
  1729. function VBPicFromCF(PntHPic:Pointer;HData:THandle;WFormat:Word):Word;
  1730. begin
  1731.   asm
  1732.     PUSH WORD Ptr [BP+$0C]
  1733.     PUSH WORD Ptr [BP+$0A]
  1734.     PUSH WORD Ptr [BP+$08]
  1735.     PUSH WORD Ptr [BP+$06]
  1736.     MOV  BX,$0090
  1737.     CALL DWORD PTR SS:[$0020]
  1738.     MOV  [BP-$04],AX
  1739.   end;
  1740. end;
  1741. function VBRefPic(Pic:HPic):HPic;
  1742. begin
  1743.   asm
  1744.     PUSH WORD Ptr [BP+$06]
  1745.     MOV  BX,$008C
  1746.     CALL DWORD PTR SS:[$0020]
  1747.     MOV  [BP-$04],AX
  1748.   end;
  1749. end;
  1750. procedure VBPaletteChanged(Control:HCtl);
  1751. begin
  1752.   asm
  1753.     PUSH WORD Ptr [BP+$08]
  1754.     PUSH WORD Ptr [BP+$06]
  1755.     MOV  BX,$00D0
  1756.     CALL DWORD PTR SS:[$0020]
  1757.   end;
  1758. end;
  1759. function VBTranslateColor(Control:HCtl;Color:LongInt):LongInt;
  1760. begin
  1761.   asm
  1762.     PUSH WORD Ptr [BP+$0C]
  1763.     PUSH WORD Ptr [BP+$0A]
  1764.     PUSH WORD Ptr [BP+$08]
  1765.     PUSH WORD Ptr [BP+$06]
  1766.     MOV  BX,$00DC
  1767.     CALL DWORD PTR SS:[$0020]
  1768.     MOV  [BP-$06],AX
  1769.     MOV  [BP-$04],DX
  1770.   end;
  1771. end;
  1772. function VBReadFormFile(FormFile:HFormFile;pb:Pointer;cb:Word):Word;
  1773. begin
  1774.   asm
  1775.     PUSH WORD Ptr [BP+$0E]
  1776.     PUSH WORD Ptr [BP+$0C]
  1777.     PUSH WORD Ptr [BP+$0A]
  1778.     PUSH WORD Ptr [BP+$08]
  1779.     PUSH WORD Ptr [BP+$06]
  1780.     MOV  BX,$003C
  1781.     CALL DWORD PTR SS:[$0020]
  1782.     MOV  [BP-$04],AX
  1783.   end;
  1784. end;
  1785. function VBWriteFormFile(FormFile:HFormFile;pb:Pointer;cb:Word):Word;
  1786. begin
  1787.   asm
  1788.     PUSH WORD Ptr [BP+$0E]
  1789.     PUSH WORD Ptr [BP+$0C]
  1790.     PUSH WORD Ptr [BP+$0A]
  1791.     PUSH WORD Ptr [BP+$08]
  1792.     PUSH WORD Ptr [BP+$06]
  1793.     MOV  BX,$0040
  1794.     CALL DWORD PTR SS:[$0020]
  1795.     MOV  [BP-$04],AX
  1796.   end;
  1797. end;
  1798. function VBSeekFormFile(FormFile:HFormFile;OffSet:LongInt):LongInt;
  1799. begin
  1800.   asm
  1801.     PUSH WORD Ptr [BP+$0C]
  1802.     PUSH WORD Ptr [BP+$0A]
  1803.     PUSH WORD Ptr [BP+$08]
  1804.     PUSH WORD Ptr [BP+$06]
  1805.     MOV  BX,$00A0
  1806.     CALL DWORD PTR SS:[$0020]
  1807.     MOV  [BP-$06],AX
  1808.     MOV  [BP-$04],DX
  1809.   end;
  1810. end;
  1811. function VBRelSeekFormFile(FormFile:HFormFile;OffSet:LongInt):LongInt;
  1812. begin
  1813.   asm
  1814.     PUSH WORD Ptr [BP+$0C]
  1815.     PUSH WORD Ptr [BP+$0A]
  1816.     PUSH WORD Ptr [BP+$08]
  1817.     PUSH WORD Ptr [BP+$06]
  1818.     MOV  BX,$00A4
  1819.     CALL DWORD PTR SS:[$0020]
  1820.     MOV  [BP-$06],AX
  1821.     MOV  [BP-$04],DX
  1822.   end;
  1823. end;
  1824. function VBReadBasicFile(UsFileNo:Word;pb:Pointer;cb:Word):Word;
  1825. begin
  1826.   asm
  1827.     PUSH WORD Ptr [BP+$0C]
  1828.     PUSH WORD Ptr [BP+$0A]
  1829.     PUSH WORD Ptr [BP+$08]
  1830.     PUSH WORD Ptr [BP+$06]
  1831.     MOV  BX,$0078
  1832.     CALL DWORD PTR SS:[$0020]
  1833.     MOV  [BP-$04],AX
  1834.   end;
  1835. end;
  1836. function VBWriteBasicFile(UsFileNo:Word;pb:Pointer;cb:Word):Word;
  1837. begin
  1838.   asm
  1839.     PUSH WORD Ptr [BP+$0C]
  1840.     PUSH WORD Ptr [BP+$0A]
  1841.     PUSH WORD Ptr [BP+$08]
  1842.     PUSH WORD Ptr [BP+$06]
  1843.     MOV  BX,$007C
  1844.     CALL DWORD PTR SS:[$0020]
  1845.     MOV  [BP-$04],AX
  1846.   end;
  1847. end;
  1848. function VBSeekBasicFile(usFileNo:Word;offset:LongInt):LongInt;
  1849. begin
  1850.   asm
  1851.     PUSH WORD Ptr [BP+$0A]
  1852.     PUSH WORD Ptr [BP+$08]
  1853.     PUSH WORD Ptr [BP+$06]
  1854.     MOV  BX,$0168
  1855.     CALL DWORD PTR SS:[$0020]
  1856.     MOV  [BP-$06],AX
  1857.     MOV  [BP-$04],DX
  1858.   end;
  1859. end;
  1860. function VBRelSeekBasicFile(usFileNo:Word;offset:LongInt):LongInt;
  1861. begin
  1862.   asm
  1863.     PUSH WORD Ptr [BP+$0A]
  1864.     PUSH WORD Ptr [BP+$08]
  1865.     PUSH WORD Ptr [BP+$06]
  1866.     MOV  BX,$016C
  1867.     CALL DWORD PTR SS:[$0020]
  1868.     MOV  [BP-$06],AX
  1869.     MOV  [BP-$04],DX
  1870.   end;
  1871. end;
  1872. function VBYPixelsToTwips(Pixels:Integer):LongInt;
  1873. begin
  1874.   asm
  1875.     PUSH WORD Ptr [BP+$06]
  1876.     MOV  BX,$006C
  1877.     CALL DWORD PTR SS:[$0020]
  1878.     MOV  [BP-$06],AX
  1879.     MOV  [BP-$04],DX
  1880.   end;
  1881. end;
  1882. function VBXPixelsToTwips(Pixels:Integer):LongInt;
  1883. begin
  1884.   asm
  1885.     PUSH WORD Ptr [BP+$06]
  1886.     MOV  BX,$0068
  1887.     CALL DWORD PTR SS:[$0020]
  1888.     MOV  [BP-$06],AX
  1889.     MOV  [BP-$04],DX
  1890.   end;
  1891. end;
  1892. function VBYTwipsToPixels(Twips:LongInt):Integer;
  1893. begin
  1894.   asm
  1895.     PUSH WORD Ptr [BP+$08]
  1896.     PUSH WORD Ptr [BP+$06]
  1897.     MOV  BX,$0074
  1898.     CALL DWORD PTR SS:[$0020]
  1899.     MOV  [BP-$04],AX
  1900.   end;
  1901. end;
  1902. function VBXTwipsToPixels(Twips:LongInt):Integer;
  1903. begin
  1904.   asm
  1905.     PUSH WORD Ptr [BP+$08]
  1906.     PUSH WORD Ptr [BP+$06]
  1907.     MOV  BX,$0070
  1908.     CALL DWORD PTR SS:[$0020]
  1909.     MOV  [BP-$04],AX
  1910.   end;
  1911. end;
  1912. function VBLinkPostAdvise(Control:HCtl):Word;
  1913. begin
  1914.   asm
  1915.     PUSH WORD Ptr [BP+$08]
  1916.     PUSH WORD Ptr [BP+$06]
  1917.     MOV  BX,$00C0
  1918.     CALL DWORD PTR SS:[$0020]
  1919.     MOV  [BP-$04],AX
  1920.   end;
  1921. end;
  1922. function VBPasteLinkOk(var phTriplet:THANDLE;Control:HCtl):Bool;
  1923. begin
  1924.   asm
  1925.     LES  DI,[BP+$0A]
  1926.     PUSH ES
  1927.     PUSH DI
  1928.     PUSH WORD Ptr [BP+$08]
  1929.     PUSH WORD Ptr [BP+$06]
  1930.     MOV  BX,$00C4
  1931.     CALL DWORD PTR SS:[$0020]
  1932.     MOV  [BP-$04],AX
  1933.   end;
  1934. end;
  1935. procedure VBLinkMakeItemName(Control:HCTL;lpszBuf:PChar);
  1936. begin
  1937.   asm
  1938.     PUSH WORD Ptr [BP+$0C]
  1939.     PUSH WORD Ptr [BP+$0A]
  1940.     PUSH WORD Ptr [BP+$08]
  1941.     PUSH WORD Ptr [BP+$06]
  1942.     MOV  BX,$0164
  1943.     CALL DWORD PTR SS:[$0020]
  1944.   end;
  1945. end;
  1946. function VBGetDataSourceControl(Control:HCTL;blsRegistered:Bool):HCtl;
  1947. begin
  1948.   asm
  1949.     PUSH WORD Ptr [BP+$0A]
  1950.     PUSH WORD Ptr [BP+$08]
  1951.     PUSH WORD Ptr [BP+$06]
  1952.     MOV  BX,$0170
  1953.     CALL DWORD PTR SS:[$0020]
  1954.     MOV  [BP-$06],AX
  1955.     MOV  [BP-$04],DX
  1956.   end;
  1957. end;
  1958. function VBFormat(VType:Integer;lpData:Pointer;lpszFmt:PChar;pb:Pointer;cb:Word):Integer;
  1959. begin
  1960.   asm
  1961.     PUSH WORD Ptr [BP+$14]
  1962.     PUSH WORD Ptr [BP+$12]
  1963.     PUSH WORD Ptr [BP+$10]
  1964.     PUSH WORD Ptr [BP+$0E]
  1965.     PUSH WORD Ptr [BP+$0C]
  1966.     PUSH WORD Ptr [BP+$0A]
  1967.     PUSH WORD Ptr [BP+$08]
  1968.     PUSH WORD Ptr [BP+$06]
  1969.     MOV  BX,$0158
  1970.     CALL DWORD PTR SS:[$0020]
  1971.     MOV  [BP-$04],AX
  1972.   end;
  1973. end;
  1974. function VBGetMode:Word;
  1975. begin
  1976.   asm
  1977.     MOV  BX,$0048
  1978.     CALL DWORD PTR SS:[$0020]
  1979.     MOV  [BP-$04],AX
  1980.   end;
  1981. end;
  1982. end.
  1983.