找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 326|回复: 7

【不止 VB】用 VB 编写一个简单的 HTML 应用程序(非 IDocHostUIHandler)

[复制链接]
发表于 2024-7-25 22:10:49 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
现在很多程序都在使用 Electron 一类的框架设计,将本地应用程序变为 HTML 应用程序,这是历史的必然趋势。
其实,善用 Windows 自带的 WebBrowser 控件,可以实现更加轻量化的 HTML 应用程序。(VB 也有自己的 Electron!)
在本帖中,我将给出一个简易的 HTML 应用程序制作方法,该方法不使用 IDocHostUIHandler,不额外注册 tlb,不需要 Implements,不会影响正常和 alert() 等访问,自由度极高。

步骤一:新建工程,添加指定的控件和引用
必须使用的控件:Microsoft Internet Controls
建议添加的引用:Microsoft HTML Object Library(可以自动提示,减少出错,也可以直接通过 getElementById() 方法获得元素,处理事件)
屏幕截图 2024-07-25 194408.png 屏幕截图 2024-07-25 194450.png

步骤二:编写 JavaScript 可以调用的 WebBrowser 代码
1. 编写类模块
2. 处理 DocumentComplete 事件,注册准备好的类模块
这一步很重要,而且只能在 DocumentComplete 中处理,否则您可能收获这样的错误:
屏幕截图 2024-07-25 211419.png
因为您的程序可能很复杂,所以不建议您使用 ReadyState 或直接使用 DocumentComplete 判断页面是否加载完成,而应该使用这样的代码:
  1. If (pDisp Is brwWebBrowser.Object) Then  
  2.     ' 您的代码
  3. End If
复制代码

然后注册您已经编写好的类模块:
如:
  1. docDocument.body.setAttribute "form", clsFormCtrl
  2. docDocument.body.setAttribute "api", clsWINAPI
复制代码

(也可以直接填 Me,用于访问窗体的 Public 方法)

步骤三:编写 HTML
这一步没有什么可以说的,访问 Visual Basic 代码的方法如下:
  1. document.body.您注册的类名.方法(参数);
复制代码

注意:访问 Visual Basic 代码的 JavaScript 代码必须在 <body> 中,或被 <body> 中的代码调用,否则将会无效!

步骤四:编写 Visual Basic 处理 HTML 和 JavaScript 的代码
这也没有什么可以说的,方法如下:
  1. docDocument.parentWindow.execScript 您要执行的代码
复制代码


步骤五:新建资源文件,将所使用的所有资源打包进资源文件
注意无论是什么拓展名,都必须划到 HTML 类(23),也不要含特殊符号和中文,这一步 VB 本身无法完成,应当退出 VB,用 Resource Hacker 编辑资源文件
屏幕截图 2024-07-25 211132.png

步骤六:编译、运行
恭喜!您已经成功制作了一个简单的 HTML 应用程序!

附件:
HTML APP1.zip (30.15 KB, 下载次数: 10)

效果图:
屏幕截图 2024-07-25 221019.png

参考资料
https://www.cnblogs.com/KeenLeung/p/3837853.html
https://www.cnblogs.com/zhwl/p/3154623.html
https://www.cnblogs.com/wgscd/p/11008269.html
https://www.0xaa55.com/thread-27449-1-1.html

本帖被以下淘专辑推荐:

回复

使用道具 举报

 楼主| 发表于 2024-7-26 13:44:21 | 显示全部楼层
戈登走過去 发表于 2024-7-26 13:09
哇)
让我想起了我之前用 vb .net 调用 WebView2 (
话说你的高 DPI 的情况下,编写的 VB6 软件放别人不同D ...

TwipsPerPixelX(Y) 写死成 15 好像在 Win 10 下就没问题了
回复 赞! 1 靠! 0

使用道具 举报

发表于 2024-7-26 13:09:09 | 显示全部楼层
哇)
让我想起了我之前用 vb .net 调用 WebView2 (
话说你的高 DPI 的情况下,编写的 VB6 软件放别人不同DPI的环境里运行会有问题吗?
我从来没有想过这个问题

(因为新版本的 visual studio .net winforms 编辑器都会提示,高DPI生成的UI会有BUG)
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2024-7-26 13:39:27 | 显示全部楼层
本帖最后由 QZhi 于 2024-7-26 15:55 编辑
戈登走過去 发表于 2024-7-26 13:09
哇)
让我想起了我之前用 vb .net 调用 WebView2 (
话说你的高 DPI 的情况下,编写的 VB6 软件放别人不同D ...


高 DPI 确实比较头疼。

对于 VB 窗体内部的控件,如果其单位是缇(Twip),一般不会有太大问题;
对于其中的 HTML,字体大小一般也不会出问题,图片尺寸建议使用百分比;

唯一的问题是,VB 窗体的尺寸……
回复 赞! 靠!

使用道具 举报

发表于 2024-7-29 09:05:06 | 显示全部楼层
QZhi 发表于 2024-7-26 13:39
高 DPI 确实比较头疼。

对于 VB 窗体内部的控件,如果其单位是缇(Twip),一般不会有太大问题;

你用了那么多VB6没有发现Form的大小用的单位也是缇吗?所以不存在的,VB6最大的问题是在AutoSize的控件上,比如PictureBox和Image控件使用适配图片大小就会导致不跟随DPI缩放。

点评

内容深度: 5.0 视角独特性: 5.0
客观性: 5.0
内容深度: 5 视角独特性: 5 客观性: 5
  发表于 2024-7-29 12:08
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2024-7-29 12:04:04 | 显示全部楼层
本帖最后由 QZhi 于 2024-7-29 12:05 编辑
YY菌 发表于 2024-7-29 09:05
你用了那么多VB6没有发现Form的大小用的单位也是缇吗?所以不存在的,VB6最大的问题是在AutoSize的控件上 ...


Form 的大小确实是缇,但是您没发现我给 JS 的方法用的是像素吗?
做网页经常用像素而不是缇。

不过 AutoSize 的控件确实会缩放错误,所以我几乎不用 AutoSize。

不过非常感谢您的指教!
回复 赞! 靠!

使用道具 举报

发表于 2024-7-30 09:09:38 | 显示全部楼层
QZhi 发表于 2024-7-29 12:04
Form 的大小确实是缇,但是您没发现我给 JS 的方法用的是像素吗?
做网页经常用像素而不是缇。

是的,IE控件用像素也是会有这个问题,所以给IE控件使用的html和css中最好是用pt、em单位,而不是px。
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-9-8 09:13 , Processed in 0.041083 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表