如何在VB6用户控件中实现高级自定义属性?

2024-02-13

抱歉,除了“高级自定义属性”之外,我不知道如何命名它。如果我知道,我会先搜索一下。

我正在使用第三方控件处理遗留代码。

在VB6中,当您将该控件拖到窗体上时,您可以在“属性”窗口中看到该控件支持的所有属性。比如MarginLeft、MarginRight等等。

那没问题。

在“属性”窗口中,最上面的属性一般是“(名称)”字段,它是控件的名称。

但是我正在使用的第三方控件在“(名称)”上方还有另外两个“假属性”,即“(关于)”和“(自定义)”。

当您点击“(关于)”时,将会出现一个显示公司信息的对话框。当您单击“(自定义)”时,将出现另一个对话框,显示更多属性。这些对话框在 VB6 中显示。

在“(自定义)”对话框中,可以修改普通属性(与直接在属性窗口中修改相同)。你可以做更多。还有更多属性不是普通属性(至少您在“属性”窗口中找不到任何内容)。

当您保存此表单时,对于普通属性,所有内容都将保存到 .FRM 文件中。例如。,

  Control1.MarginLeft = 5
  Control1.Text = "I am a control"

但是,对于在(自定义)对话框中编辑的“高级属性”,它们不会保存在.FRM 中,而是以二进制格式保存在.FRX 中。

例如,在(自定义)对话框中,您可以编辑一个名为“标题”的属性,其中包括该标题的文本、字体、粗细、显示样式以及许多与标题类似的属性。在 .FRM 中,它类似于,

   Control1.Caption = "frmForm1.frx":013F

标题的所有文本和相关属性都以二进制格式保存在 .FRX 文件中。

需要注意的是,普通的“属性”窗口中没有“Caption”属性,只能在“(自定义)”对话框中进行编辑。

我的问题如下,

  1. 如何实现这样一个可以在VB6中显示的(自定义)对话框?

  2. 如何让VB6的属性窗口显示(关于)和(自定义)?

  3. 如何告诉VB6 Caption属性不应显示在属性窗口中,但可以直接在代码中使用Control1.Caption = xxxx.frx:offset?

  4. 如何告诉VB6这个Caption属性应该保存在.FRX中,以及如何告诉VB6数据的大小,以便VB6可以自动管理偏移量?

  5. 如何通过VB6自动加载数据,以便在(自定义)对话框中显示正确的值?

  6. 据我所知,.frx 格式是秘密,有很多人在研究各种 .frx 用于标准控件,如二进制(图像)、列表和文本。我很好奇第 3 方控件如何利用 .frx,第 3 方控件是否应该定义自己的 .frx 格式?包括例如Length前面有多少字节(或者根本没有长度字段,它是固定长度),style1有多少字节,style2有多少字节等。

多谢。如果您知道这个“高级属性”的正确名称是什么,请告诉我名称,我可以自己搜索。

我尝试搜索高级属性,但没有真正得到我想知道的任何信息。


frx 文件适用于二进制或其他非基本数据类型。 frm 将存储简单的属性。您需要做的是挂钩 UserControl 事件 WriteProperties 和 ReadProperties。您不需要知道后备存储在哪里(frm 与 frx),您只需要访问 PropBag 即可读取和写入数据。

Google 是您查找文档的朋友:

https://msdn.microsoft.com/en-us/library/aa242140(v=vs.60).aspx https://msdn.microsoft.com/en-us/library/aa242140(v=vs.60).aspx

或有关该主题的其他信息:

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在VB6用户控件中实现高级自定义属性? 的相关文章

  • 将 ActiveX Com 组件与 Node.js 一起使用。是否可以

    有没有办法将任何ActiveX com组件与nodejs一起使用 实际上 我永远不需要这个 但我在 Windows 上运行 nodejs 并尝试发送 ping 请求而不分叉新进程 Windows 不存在这样的模块 由于存在一些 Active
  • VBA COM 库中的这些 _B_var_Xxxxx 和 _B_str_Xxxxx 成员到底是什么?

    想象一下以下函数调用 foo UCase bar 我正在解析这段代码 并确定UCase是一个函数调用 现在我想将该函数调用解析为定义它的 COM 库中函数的声明 这个想法是实现一个代码检查来确定何时Variant当使用内置函数时String
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • 无法访问 VBA 中的 COM 公开方法

    我正在尝试在 VBA 中访问 COM 公开的方法 Problem 我看到所有默认方法 例如GetHashCode GetType and ToString 在 VBA 中但是not那些是 COM 接口的一部分并且专门编写为 COM 可见的
  • 服务器端生成的 Excel 中出现 System.Runtime.InteropServices.COMException 错误

    我们有一个 Web 应用程序 可以生成 Excel 电子表格并在服务器端运行宏 然后它通过电子邮件将它们发送给不同的人 它是传统报告风格的一部分 我们正在对其进行转换 但仍然支持我们作为 IIS 中的网站提供的新应用程序 我知道进行 Off
  • VT_DATE 类型的微秒支持

    VT DATE 变体类型是否支持微秒分辨率 请告诉我如何在VB中显示相同的内容 http msdn microsoft com en us library ms221646 aspx http msdn microsoft com en u
  • 免注册 COM - COM dll 相对于客户端 exe 的位置

    我想使用免注册 com 这样我就不必注册我的旧 com 组件 但是 我希望能够将 com dll 放在不在客户端 exe 目录中或之下的位置 例如 lib 我无法在服务器清单文件中执行此操作 因为它不允许相对或绝对路径 有谁知道是否有办法解
  • Excel 2013 COM API 在服务帐户下挂起 ExportAsFixedFormat

    我有一个 NET Windows 服务 它调用 Excel 2013 COM API 以在 PDF 上导出 Excel 文档 我已尝试使用在两个不同域帐户下运行的 Windows 服务来执行此代码 这两个帐户都是运行代码的计算机上的本地管理
  • C# - 挂钩现有 COM 对象

    假设我们有一个现有进程 或应用程序 它从 ocx 文件 例如 MyCOMLibrary ocx 调用 COM 对象 有没有办法编写一个 C 库来精确复制 ocx 文件 这样原始应用程序就可以调用您的 C 代码而不是原始 COM 对象 当然
  • .NET WebBrowser 控件可以使用 IE9 吗?

    我意识到这是一个早期版本并且不稳定 我不会梦想在任何其他项目中将默认的 Web 浏览器控件替换为 IE9 但在这种情况下 我特别需要 IE9 与其他版本进行比较 我想让 NET WebBrowser 控件使用 IE9 而不是机器上默认版本的
  • 我刚刚在 Visual Basic 中运行的 COM 对象的 CLSID 是什么

    我需要知道我刚刚运行的 COM 对象的 CLSIDCreateObject xxx xxx 我怎么才能得到它 蒂亚 拉法尔 我认为您无法直接从 VB 本身获取该信息 例如 作为调用的副作用或次要结果 CreateObject 但你可以阅读注
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • 在 gridview 控件中使用单选按钮

    我有一个 gridview 控件 其中使用存储过程显示数据 该网格有三列 第一列包含单选按钮 总体思路是用户应该能够从 在我的例子中 5 个单选按钮中仅选择一个单选按钮 当前功能的问题是我可以同时选择所有单选按钮 我尝试使用 groupna
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • vb6 中双精度计算的值不正确

    当在 vb6 中添加 2 个值时 我得到一些奇怪的行为 当在立即窗口中针对不同情况打印变量 sum 双精度型 时 如下所示 我得到的结果为 sum 0 sum 0 sum 0 sum 74 46 0 41 sum 74 87 sum 97
  • 以编程方式确定是否安装了 COM 库 (.DLL)

    C 中是否有一种编程方式来确定是否已安装特定的 COM DLL 或者这是扫描注册表中的 classId 的问题 我通常所做的 如果我再次需要的话也会这样做 是尝试创建一个您知道位于 COM 库中的类的对象实例 通过 ProgID 或 GUI
  • INTEGER 到 DATETIME 的转换与 VB6 不同

    我正在查看一些遗留的 VB6 代码 比我的时代早很多年 它对 SQL 2005 数据库运行查询 它提供了日期限制WHERE子句 其中日期作为整数值给出CLng VB6 中的日期 e g WHERE SomeDateField gt 4006
  • COM+ 应用程序死锁故障排除

    我正在尝试对间歇性死锁的 COM 应用程序进行故障排除 上次锁定时 我能够获取 dllhost 进程的用户模式转储并使用 WinDbg 对其进行分析 检查完所有线程和锁后 一切都归结为该线程拥有的关键部分 ChildEBP RetAddr
  • iOS 11.x 系统颜色

    我读过很多关于如何自定义视图颜色的文章 但没有任何关于检索标准控件 如 iOS 11 x 或以前版本中的导航栏 状态栏和选项卡栏 的系统颜色的文章 UIColor 类有 3 种系统颜色 但它们几乎没有用 例如 调用 UINavigation
  • 在 VB6 中如何处理错误处理程序中的错误?

    我在 VB6 应用程序中经常遇到这种情况 Private Sub DoSomething On Error Goto err1 Call ProcessLargeBatch1 Call ProcessLargeBatch2 more Exi

随机推荐