//免注册调用 COM 控件 import fonts.fontAwesome; import win.ui; /*DSG{{*/ var winform = win.form(text="免注册嵌入 VB 控件";right=700;bottom=266) winform.add( edit={cls="edit";left=356;top=20;right=665;bottom=243;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=2}; static={cls="static";text="Static";left=21;top=20;right=330;bottom=243;dl=1;dt=1;transparent=1;z=1} ) /*}}*/ import com.lite; /* 支持内存加载的 COM 控件可以写为 com.lite($"ocx 或 dll 文件路径") , 发布后就不需要原 OCX 了。 不支持内存加载的 COM 控件, 也可在发布完成界面点击『转换为独立 EXE』按钮。 可以免注册调用 VB6 写的 OCX,但 VB 控件不支持内存加载。 不支持免注册的控件也可以用 com.activeX.regsvr32 静默注册,不需要管理权限。 或者 com.activeX.appData() 释放到 appData 目录并且自动注册(发布后不需要原 OCX)。 */ var dll = com.lite.appData("aardio\vb6\Vb6Control.ocx" //dll 后缀名也可以 ,$"~/example/Languages/VB/.vb6/Vb6Control.ocx") //不需要注册直接创建控件,不是内存 DLL可省略参数@2里指定的类名 var vbCtrl = dll.createEmbedEx(winform.static); //响应 COM 事件 vbCtrl.OnImageClick = function(value){ winform.edit.print("VB控件里点击了图像,事件参数:"+value) return 100; //VB里这个事件的参数声明为 ByRef,所以添加返回值可以修改参数 } //修改 VB 控件的属性 vbCtrl.Picture = com.picture.loadObject( "~/example/Graphics/.gdip.jpg" ) winform.show(); //调用 VB 函数,aardio 对象可以直接作为参数传给 VB vbCtrl.CallAnything({ Name = "aardio"; Log = function(str){ //VB 中访问 obj.Log 也会自动调自 obj.Log() if(str === null ) return; //winform.msgbox(str,"在 VB 中可以直接调用 aardio 对象") } }) winform.edit.print("请点击图像试试"); win.loopMessage();