教你如何用VB做控件*.ocx

2023-11-09

教你如何用VB做控件*.ocx
一个控件有很多事件如:Click、MouseDown、MouseUp、MouseMove等。要触发这些事件都需要你加入代码。在控件的声明处加入Public Event Click()就表明该控件有一“Click”事件。自己编写的控件有什么事件就在声明处加几条事件


如今OCX控件在编程中已占领了很重要的地位,我们可以利用OCX控件完成一些相当复杂的编程操作.同时OCX 控件还有利于主程序的简单化、功能的重用、隐常程序实现细节、便于升级、传播方便等优点。现在我们可以利用VB 5.0方便的制作出自己的OCX控件供我们在编程中使用同时还可以把它送给你周围喜欢编程的朋友!

下面列出制作OCX控件的步骤:
一:新建OCX   打开VB 5.0选择新建工程在对话框中选择ActiveX 控件(如图一(map1.gif))打开后会见一空的文档这就是 OCX控件的初始界面。想看一看空OCX控件的效果吗?选择“添加工程”选中标准EXE,这时你就可以像调用其它控件一样在左边的工具栏里选择刚才新建的OCX控件图标放在标准的EXE文档中看一看有什么效果!(什么也没有!) 自然因为刚才的OCX文档是空的嘛(废话太多,数个痰盂向我飞来)!
二:创建界面
  一般我们用VB创建OCX控件都是在我们的控件里添加其它的控件来组合成一个完整的控件(也可以让它只完成某种算法)比如:你可以在上面添加一按钮、编辑框这时你再用第一部的方法看一看效果,是不是控件上多了一个按钮和一个编辑框。
三:OCX属性
  一个OCX控件有许多的属性,比如控件背景是否透明(BackStyle),控件是否可以获得焦点 (CanGetFocus)等。这些属性都可以在控件的“属性框”中找到。
四:添加事件
  一个控件有很多事件如:Click、MouseDown、MouseUp、MouseMove等。要触发这些事件都需要你加入代码。在控件的声明处加入Public Event Click()就表明该控件有一“Click”事件。自己编写的控件有什么事件就在声明处加几条事件。关于触发事件是使用“RaiseEvent”语句来完成的如:RaiseEvent 事件名(参数)。
五:用户属性
  一个控件应有许多属性供用户设置如:控件的背景色、控件要显示的图形等。它们通常用Property Get和 Property Let两条语句来完成。前者表示给用户显示一个属性的值,后者表示用户设置一个属性的值。
六:保存属性和读取属性
  当属性被用户更改后需要将该属性值保存,以便控件运行时读取更改后的属性值。它们分别用 ReadProperty和WriteProperty两种方法来完成。前者表示读取一个属性值,后者表示写入一个属性值。

  好了一个简单的OCX控件制作方法大概就需要以上几步就可完成。下面本人将编写一个简单的OCX控件供大家参考。此控件的功能是在控件中显示一个圆,当鼠标移到控件上的时候控件上的圆便会在鼠标不离开控件的前提下跟随鼠标移动。

  新建一OCX控件,将控件的BorderStyle属性改为1,再加入一SHAPE控件将其形状改为Circle(如图二(map2.gif)) 添加以下代码:

 

 

VB code
  
  
Public Event Click() 注释:定义该控件要产生的事件 Dim CircleX As Integer , CircleY As Integer Private Sub UserControl_Click()   RaiseEvent Click 注释:触发Click事件 End Sub Private Sub UserControl_Initialize()   CircleX = Shape1.Width / 2   CircleY = Shape1.Height / 2 End Sub Private Sub UserControl_MouseDown(Button As Integer , Shift As Integer , X As Single , Y As Single )   Shape1.BackColor = RGB ( 0 , 0 , 255 ) End Sub Private Sub UserControl_MouseMove(Button As Integer , Shift As Integer , X As Single , Y As Single ) Dim MoveX As Integer , MoveY As Integer   MoveX = X - Shape1.Width / 2   MoveY = Y - Shape1.Height / 2    If (MoveX < 0 ) Or (MoveX + Shape1.Width > UserControl.ScaleWidth) Or _     (MoveY < 0 ) Or (MoveY + Shape1.Height > UserControl.ScaleHeight) Then Exit Sub   Shape1.Move MoveX, MoveY End Sub Private Sub UserControl_MouseUp(Button As Integer , Shift As Integer , X As Single , Y As Single )   Shape1.BackColor = RGB ( 255 , 0 , 0 ) End Sub Property Get PosX() As Integer 注释:取得CircleX的值显示给用户   PosX = CircleX End Property Property Let PosX(ByVal New_X As Integer ) 注释:把用户写入的值设置到OCX控件内部    If (New_X < Shape1.Width / 2 ) Or _     (New_X > UserControl.ScaleWidth - Shape1.Width / 2 ) Then     MsgBox ( " 圆的X值超出界限了 " )    Else     CircleX = New_X      Call UserControl_Resize    End If End Property Property Get PosY() As Integer   PosY = CircleY End Property Property Let PosY(ByVal New_Y As Integer )    If (New_Y < Shape1.Height / 2 ) Or _     (New_Y > UserControl.ScaleHeight - Shape1.Height / 2 ) Then     MsgBox ( " 圆的Y值超出界限了 " )    Else     CircleY = New_Y      Call UserControl_Resize    End If End Property Private Sub UserControl_ReadProperties(PropBag As PropertyBag)   CircleX = PropBag.ReadProperty( " CircleX " , Shape1.Width / 2 ) 注释:将用户设置的值读出来   CircleY = PropBag.ReadProperty( " CircleY " , Shape1.Height / 2 ) 注释:同上    Call UserControl_Resize End Sub Private Sub UserControl_Resize()   Shape1.Move CircleX, CircleY End Sub Private Sub UserControl_WriteProperties(PropBag As PropertyBag)    Call PropBag.WriteProperty( " CircleX " , CircleX, Shape1.Width / 2 ) 注释:将用户设置的值保存    Call PropBag.WriteProperty( " CircleY " , CircleY, Shape1.Height / 2 ) 注释:同上 End Sub

 

麻雀虽小,五脏俱全。这个OCX控件完成的任务虽然简单,但是OCX控件的基本操作全都有喔! 有兴趣的朋友不妨一试

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

教你如何用VB做控件*.ocx 的相关文章

  • 如何在单击按钮时在按钮上制作圆形波纹?

    背景 在 Android 的拨号器应用程序上 当您开始搜索某些内容时 单击 EditText 左侧的箭头按钮 您会在其上看到圆形波纹效果 问题 我也尝试过 但我得到的是一个矩形的
  • 使用 BUTTON 标签关闭表单提交上的 Fancybox iframe - 不起作用

    根据 Fancybox API 我在 iframe 中使用以下代码
  • 整数转换(缩小、扩大)、未定义的行为

    对我来说 以我可以轻松理解的方式找到有关该主题的信息非常困难 因此我要求对我所找到的内容进行审查 这都是关于转换和转换的 在示例中我将提到 signed unsigned int bigger signed unsigned char sm
  • 使用字节将字母数字代码解码为键值对象

    我有一个来自 CS GO 游戏的 十字准线代码 CSGO O4Jsi V36wY rTMGK 9w7qF jQ8WB 我可以使用此函数解码一些值 import BigNumber from bignumber js Intentionall
  • 长文本对话框按钮不换行/挤出 - Android 5.0 棒棒糖上的材质主题

    在优化棒棒糖材质主题应用程序时 我遇到了这个恼人的问题 每当对话框按钮上有长文本时 如果文本不适合按钮栏的总宽度 则这些按钮的文本不会像以前的主题那样换行为多行 相反 以下按钮被挤出对话框 无法访问 见下图 Screenshot 到目前为止
  • Android:如何使用单个按钮执行多个任务

    我有 1 个按钮处于活动状态 我想使用这个 1 按钮来执行多项任务 那么我该怎么办呢 如果我第一次按此按钮 则更改 2 次按钮 如果我按第二次 它就会更新我的数据 但这只是第一次工作第二次就不起作用了 查看我的代码我尝试了什么 Intent
  • Pygame 中按钮内的进度条

    期望的行为是 当用户将鼠标放在按钮上时 会出现深灰色进度条并开始以恒定的速度递增 我希望能够确定它完全充满需要多长时间 比如 2 秒 如果在进度条达到 100 之前鼠标移出按钮 进度条应直接变为 0 如果条达到 100 程序应在终端中打印一
  • 无法从双精度转换为浮点

    在我的数据库中 我有几个 真实 字段 结构如下 database execSQL create table TABLE LOGS COLUMN ID integer primary key autoincrement COLUMN ID D
  • 用于浮点和整数验证的 JavaScript

    我尝试创建一个 javascript 函数validate integer values从文本框 验证它的最佳方法是什么 以便仅integer and float值可以接受吗 数字验证所需的 javascript 函数 remove whi
  • android 中软键盘上方需要上一个、下一个按钮

    我想在键盘上方显示带有 上一个 下一个 按钮的虚拟键盘 当用户单击 上一个 按钮时 光标应移动到上一个编辑文本输入字段 单击 下一个 按钮应转到视图中的下一个编辑文本字段 如果我们在Android浏览器中打开任何要求输入的页面 我们就可以看
  • Zurb Foundation:如何在调整大小到较小的屏幕时使按钮变小?

    在 Zurb Foundation 4 中 是否有一种方法可以在浏览器尺寸调整得较小或在较小的屏幕上时自动切换到较小的按钮样式 例如 当屏幕是标准桌面屏幕时 请执行以下操作 a href class primary button Butto
  • 当 python 添加小整数时,幕后会发生什么? [复制]

    这个问题在这里已经有答案了 我正在摆弄id最近意识到 c Python 做了一些非常明智的事情 它确保小整数始终具有相同的值id gt gt gt a b c d e 1 2 3 4 5 gt gt gt f g h i j 1 2 3 4
  • 如何设置按钮的大小?

    我将按钮放在带有 GridLayout 的 JPane 中 然后我用 BoxLayout Y AXIS 将 JPanel 放入另一个 JPanel 中 我希望 GridLayout 中的按钮是方形的 我使用 tmp setSize 30 3
  • 标题中的全日历自定义按钮

    我需要在同一页面上的两个 或更多 完整日历之间切换 并且希望将此功能添加到日历标题内的自定义按钮中 我在自定义按钮上发现了一些有趣的代码 但它有点过时 因为它引用的是 Fullcalendar v 1 6 1 而我正在使用 2 3 1 这是
  • 如何更改 Bootstrap 按钮的形状

    如何将引导程序中默认的圆角按钮更改为正常的矩形按钮 现在我只能更改按钮的大小颜色或字体 btn lg padding 10px 16px font size 18px line height 1 33 border radius 6px b
  • SpriteKit 中的攻击按钮

    我对 Xcode 有点陌生 一直在为我的班级制作 2d 游戏 我已经有一段时间遇到按钮问题了 我刚刚找到了为什么我的跳跃按钮不起作用的解决方案 但我还有一个攻击按钮 我设置了代码 使按钮显示在屏幕上并在按下时更改其图像 但是 我不知道要放入
  • 如何生成满足某些限制的整数?

    任何人都可以帮我提供生成满足某些限制的整数的技术吗 例如 假设我需要生成整数 x 和 y 使得 100 gt x and y lt x 5 我指的并不是这个特定的示例 而是一些生成满足某些条件的整数的通用技术 嗯 这并不难 选择一个整数 可
  • 使用“onclick”和 JavaScript 获取按钮上的 X/Y 坐标

    我是一名 JavaScript 初学者 正在寻找一种方法来获取单击按钮时的 x 和 y 坐标 这适用于 Opera IE9 和 Chrome 但我无法让它在 Firefox 中工作 到目前为止 这是我的代码 JavaScript 中的函数
  • 分组为连续整数范围

    我检查了其他帖子 包括使用 Linq 按可变整数范围进行分组 https stackoverflow com questions 1375997 group by variable integer range using linq 但我没有
  • Tkinter 按钮鼠标右键和左键单击有不同的命令

    我正在用 Python 制作扫雷游戏 并使用 tkinter 库来创建 gui 有没有 绑定到 tkinter 按钮两个命令的方法 一个是右键单击按钮时的命令 另一个是单击左键时的命令 通常 按钮仅设计用于单击 但 tkinter 允许您为

随机推荐

  • Unity动画状态机Animator使用解析

    Unity可以用两种方式控制动画 1 Animations 这种方式简单 直接 Play Idle 或者 CorssFade Idle 就可以播放动画 2 Animator 5 x之后推荐使用这种方式 因为里面可以加上混合动画 让动画切换更
  • mysql 添加用户、修改权限,修改登陆权限ip

    MySQL 赋予用户权限命令的简单格式可归纳为 数据库 grant 权限 on 数据库对象 to 用户 1 grant 普通数据用户 查询 插入 更新 删除 数据库中全部表数据的权利 apache grant select on testd
  • SpringBoot(审计) 统计接口调用次数及成功率

    介绍 很多时候会需要提供一些统计记录的 比如某个服务一个月的被调用量 接口的调用次数 成功调用次数等等 优点 使用AOP Hendler对业务逻辑代码无侵入 完全解耦 通过spring boot自带的健康检查接口 health 方便 安全
  • 吐血整理!内部包含3980大数据、机器学习、推荐系统实战课程,仅分享一次

    在最近几年 大数据 Dig Data 机器学习 Machine Learning 逐渐流行开来 容易让人误以为机器学习并不难 机器学习的流行原因很简单 在一个消费者 以及广告主 需要更多个性化 而计算机系统正被四面八方飞速增长的数据包围的年
  • B树及其变种

    B 树 B 树 B树
  • L6050U compile erro

    L6050U The code size of this image exceeds the maximum allowed for this version of the linker 原因 是 用的 是 EVb版本 需要 正版 才没有
  • (二一)SQL优化

    insert优化 批量插入 insert into tb name values col 1 col n 手动提交事务 start transaction insert into tb name values commit 主键顺序插入 主
  • 一个含有抄底提示的副图指标程序

    下面是一个示例的通达信软件副图指标 其中包含一个简单的抄底信号提示 include stdio h include stdlib h 定义副图指标的数据结构 typedef struct int data int length Indica
  • 第四章:方法操作实例变量-对象的行为

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 第四章 方法操作实例变量 对象的行为 状态影响行为 行为影响状态 对象有状态和行为两种属性 对应实例变量和方法 类的每个实例可以维持自己的实例变量 面向对象的重点之一
  • python list[::2]两个分号代表什么意思

    困扰 是因为智慧不够 深思熟虑才能运筹帷幄 疑惑 python list 2 两个分号代表什么意思 解惑
  • 保定市空气质量分析系统

    保定市空气质量分析系统 此系统有详细的录屏 下面只是部分截图 需要看完整录屏联系博主 系统开发语言python 框架为django 数据库mysql 分为爬虫和可视化分析
  • pytorch Variable与Tensor合并后 requires_grad()默认与修改

    pytorch更新完后合并了Variable与Tensor torch Tensor 能像Variable一样进行反向传播的更新 返回值为Tensor Variable自动创建tensor 且返回值为Tensor 所以以后不需要再用Vari
  • 费曼学习法读后感

    目录 一 概述 二 全书主要内容 2 1 学习的本质 2 2 确立一个学习对象 2 3 理解我们要学习的知识 2 3 1 归类和对比知识的来源 2 3 1 1 将知识有逻辑的系统化 2 3 1 2 筛选和留下最可靠的知识 2 3 1 3 分
  • UOS启用wayland

    目录 系统wayland情况分析 后记 系统wayland情况分析 UOS默认启用的是x11 但是华为L410 L420这种麒麟芯片的机器 默认启用的是wayland 原因后面再推测 所以也想看看非麒麟平台如何能切换到wayland试试效果
  • [转]什么是边缘计算?

    转自 https blog csdn net gui951753 article details 80952907 注 本篇翻译自施巍松教授的论文 Edge Computing Vision and Challenges 目录 文章目录 摘
  • 工程代码_【OPPO手机进入工程模式】代码指令汇总

    来源 故乡往忆 首先要说的是 因为安卓系统版本不同 有的是安卓7 1有的是安卓8 1 因此即便都是vivo手机 可能在具体的代码指令上面 也会稍有不同 但是也都是大同小异 具体请自测 其次 工程模式是工程师测试使用的 若更改了工程模式下的设
  • BART原理简介与代码实战

    写在前面 最近huggingface的transformer库 增加了BART模型 Bart是该库中最早的Seq2Seq模型之一 在文本生成任务 例如摘要抽取方面达到了SOTA的结果 本次放出了三组不同的预训练权重 bart large 基
  • 通过STM32单片机控制直流电机实现位置速度电流PID三闭环,让电机精准控制!

    今天我们将会为大家带来一个非常实用的主题 那就是如何通过STM32单片机控制直流电机实现位置速度电流PID三闭环 让电机精准控制 首先 我们需要准备一台直流电机和一块STM32单片机开发板 接下来 我们将会通过C语言代码来实现PID三闭环控
  • HTTP 413错误解决方法

    环境 Ubuntu 16 04 nginx 1 5 6 通过post上传文件过大时 会出现413错误码 前端打开开发者模式 在输出台的位置会出现 Failed to load resource the server responded wi
  • 教你如何用VB做控件*.ocx

    教你如何用VB做控件 ocx 一个控件有很多事件如 Click MouseDown MouseUp MouseMove等 要触发这些事件都需要你加入代码 在控件的声明处加入Public Event Click 就表明该控件有一 Click