版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、自定义OptionButton控件设计一、 设计思路:设计时用一个PictureBox控件来装入这些状态的图形,8个图形连续用PictureBox控件数组0-7组成。再用一个Table标签控件作为控件名称,另外一个定时器组成整个控件的外观部分,便于设计的简洁。二、 外观设计:OptionButton控件由8个图形构成如图1所示,前四个表示没有选中状态,后四个表示选中状态。每四个为鼠标状态图形,第一个为常规状态,第二个为获得焦点状态,第三个为失去焦点状态,最后为失效状态。图1控件外观图形三、 设计向导:下面介绍设计过程:首先新建一个控件,在新建页面中选中“ActiveX控件”控件图标如图2所示,
2、双击进入设计界面。 图2控件设计图标然后画上所有的PictureBox控件和标签控件、定时器控件。根据表一同时定义这些控件名称属性,包括控件本身的各种属性设计值。表一、各个控件属性修改编号控件名称属性名称原名称设计后的名称说明1UserContro(名称)UserControl1OptionButtonAlignableFalseTrueAppearance1 3D0 FiatScaleMode1 Twip3 PixelToolboxBitmap(None)(Bitmap)2PictureBox(名称)Picture1PictBorderStyle1 - Fixed Single0 NoneS
3、caleMode1 Twip3 Pixel3Label(名称)Label1lblAppearance1 3D0 FiatAutoSizeFalseTrueBackStyle1 - Opaque0 TransparentCaptionLabel1OptionButton4PictureBox(名称)Picture1ImgAutoSizeFalseTrueBorderStyle1 - Fixed Single0 NonePicture(None)(Bitmap)根据表一的各种属性值,下面分别介绍一下设计需求:(一)、UserContro的各种属性:1、(名称)属性,当然改为我们需要的控件名称为Op
4、tionButton。2、Alignable属性,返回或设置一个数值,此数值决定控件是否能对齐以及是否能使用扩展Align属性。在控件创建时,Alignable属性可读可写,但在运行时,此属性不可用。我们选择打开这个属性,所以选择True。3、Appearance属性,返回或设置控件在Form上绘图风格,在运行过程中为只读属性。我们选择Fiat为平面,绘制控件和窗体没有可视化效果。4、ScaleMode属性,当使用图形方式或调整控件位置时,返回或设置一个值,该值指示对象坐标的度量单位,我们选择Pixel就是用屏幕像素方式来控制图形。5、ToolboxBitmap属性,返回或设置位图,作为工具箱
5、中的用图片表示。工具箱中位图的空间大小为 16x15 像素;在需要时,将把该属性指定的位图按这个尺寸缩放。我们放入一个图标来确定这个控件的外形样式。(二)、PictureBox图片框控件属性的设计值:1、(名称)属性,设计为Pict2、BorderStyle属性主要是返回或设置对象的边框样式,这里我们设计为0 None无边框或边框关联要素。3、ScaleMode属性值,我们设计为像素与UserContro相同。(三)、Label标签各种属性值设计:1、(名称)属性,设计为lbl。2、Appearance属性,设计为平面,绘制控件时没有可视化效果。3、AutoSize属性,设计为打开(True)
6、,能够根据所写字的大小自动缩放。4、BackStyle属性,该属性设置的目的是返回或设置指示控件背景类型的数值。我们设计为背景透明。5、Caption属性,附在控件之后的文本,我们确定为(OptionButton)(四)、显示控件外观的PictureBox属性设计:1、(名称)属性,设计为Img。2、AutoSize属性,设计为自动根据插入图片大小缩放,选择为True。3、BorderStyle属性,设计为背景同名模式。4、Picture属性,从0-7按照8个外观图片顺序插入外观。设计完成后如图3所示:图3设计好的控件界面部分然后选择菜单中的“工程”“添加用户控件”打开添加用户控件的设计窗口,
7、选择“VB ActiveX控件界面向导”如图4所示:图4添加用户控件页面选择完所需界面后,点击打开按钮,进入下一个选择界面如图5所示,一般都是直接下一步,跳过这个界面。图5 ActiveX 控件接口向导 介绍下一步进入“ActiveX 控件接口向导 选定接口成员”部分,按照表二选择我们设计需要的各种接口选项。选择完成如图6所示。表二、接口成员列表:编号选定名称类型说明1BackColorProperty文本图形的背景颜色属性2CaptionProperty显示名称3ClickEvent单击事件4DblClickEvent双击事件5EnabledProperty有效/失效属性6FontPrope
8、rty字体属性7ForeColorProperty字体背景属性8KeyDownEvent键盘按下事件9KeyPressEvent键盘按下和松开事件10KeyUpEvent键盘松开事件11MouseDownEvent鼠标按下事件12MouseMoveEvent鼠标移动事件13MouseUpEvent鼠标弹起事件图6 ActiveX 控件接口向导 选定接口成员下一步进入“ActiveX 控件接口向导 创建自定义接口成员”界面,这里我们需要创建三个自定义接口如表三所示:表三、自定义成员属性、类型编号自定义成员类型说明1GroupProperty该属性用于数组时使用。2ValueProperty该属性
9、用于判断是否使能即是否作用于该控件。3MouseOutEvent点击“新建”按钮,出现“添加自定义成员”窗体,如图7所示。依次输入表三中定义好的名称和类型点击确定按钮,依次完成这一过程。图7添加自定义成员以下是完成这一过程后的界面如图8所示:图8 ActiveX 控件接口向导 创建自定义接口成员然后进入下一步骤“ActiveX 控件接口向导 设置映射”一般这个步骤不一定需要设置,所以直接选择下一步进入下一个界面。进入“ActiveX 控件接口向导 设置属性”界面,根据表四要求设置各类属性类型和缺省值。表四、属性类型设置编号公有名称属性类型缺省值说明BackColorOLE_COLOR0返回/设
10、置对象中文本和图形的背景色。CaptionStringEnabledBoolean0FontFont返回一个 Font 对象。ForeColorOLE_COLOR0返回/设置对象中文本和图形的前景色。GroupBoolean0返回/设置ValueBoolean0返回/设置完成后的界面如图9所示。图9 ActiveX 控件接口向导 设置属性最后点击下一步完成整个向导设计部分,如图10所示。图10 ActiveX 控件接口向导 已完成完成向导以后的总结报告部分:下面是“To Do”列表项,用来完成测试、调试用户控件并使用户控件安全可靠。A) 创建用户控件测试程序有两种方法可以给用户控件建立测试程序
11、,依赖于是在标准 EXE 中插入的还是创建的 ActiveX 控件工程。如果是创建了 ActiveX 控件工程,按下列步骤将建立测试程序:1) 保存用户控件。2) 关闭用户控件设计器,并进入运行模式。3) 如果已经创建了测试工程,则从“文件”菜单选择“添加工程”添加一个标准 EXE 工程。4) 在工具箱中双击用户控件图标,在标准 EXE 工程的 Form1 上放置一个用户控件实例。您可以根据需要移动控件或调整控件大小。5) 保存工程组。在以后的开发和测试过程中,您可以通过打开工程组而同时打开两个工程。如果是在标准 EXE 工程中插入用户控件,则应遵循下列步骤:1) 保存用户控件。2) 关闭用户
12、控件设计器,并进入运行模式。3) 在工程窗口,双击标准 EXE 工程的 Form1,打开设计器。4) 在工具箱中双击用户控件图标,在标准 EXE 工程的 Form1 上放置一个用户控件实例。您可以根据需要移动控件或调整控件大小。B) 在设计时和运行时测试用户控件行为。1) 选中测试工程的 Form1 上放置的控件,按下 F4 打开属性窗口。确认可以看到并改变添加到控件中的属性。2) 关闭 Form1 并重新打开它,并确认用户控件的属性值已被正确地保存和获取。3) 双击放在 Form1 上的用户控件,并在代码窗口右边(过程)的下拉框中选择合适的事件。4) 为用户控件的事件处理过程添加代码。5)
13、添加其他控件,并分别在其事件过程中添加代码,测试控件的属性和方法在运行时的行为。6) 按下 F5 运行测试工程,测试运行时控件行为。C) 生成安全可靠、功能齐全的控件 (添加向导没有提供的详细代码)1) 如果窗体中包含构成控件,某些事件和属性需要被映射到多个构成控件。例如,BackColor 属性应该映射到用户控件的 BackColor 属性和任何 label 控件。MouseMove 事件需要映射到所有构成控件的 MouseMove 事件。2) 为所有事件 (如 MouseMove) 添加坐标翻译,指定 X 和 Y 坐标。3) 对于所有有枚举项的属性 (如 MousePointer 和 Bo
14、rderStyle),改变属性的数据类型为适合的枚举项名称 (如 MousePointerConstants 和 BorderStyleConstants),以至于枚举项元素将出现在属性窗口中。4) 给您自己的属性添加自定义的枚举项,并添加代码使之有效。5) 向 ReadProperties 事件添加错误捕获,以保护无效值或错误数据类型不会人为地编辑到 .frm 文件中。对于每个属性,当出现这样一个错误时,添加代码来切换到缺省设置。(请参见联机手册中“保存控件属性”和“创建仅设计时、仅运行时或运行时只读属性”。)6) 如果您有构成控件,当调整控件大小时,添加代码到 UserControl_Re
15、size 来调整其大小。7) 为生效的属性设置过程 ID,这样当生效或禁止时您的控件将与其他 ActiveX 控件一样工作。8) 向导用类似的名称映射控件的属性到构成控件 (或用户控件) 的属性。有些情况下,可能需要用不同的名称映射 (例如,ShapeLabel 映射其 BackColor 到构成 Shape 控件的 FillColor);这种再映射必须由人工完成。9) 任何影响控件大小的属性 (如字体大小,控件中的 AutoSize 属性) 应从 Property Let 调用调整大小代码。10) 对于用户画的控件,添加代码到用户控件的 Paint 事件来画控件的外观。(请参见联机手册中“用
16、户画控件”和“任何在控件中处理焦点”。)11) 如果有的控件为数据绑定,请参见联机手册中“为控件绑定数据源”。12) 为控件添加附加功能。联机手册中“Visual Basic ActiveX 控件功能”将会有所帮助。(请参见 CtlPlus.vbg 实例应用程序。)可以通过再次运行向导而修改控件,并选择用户控件。使用“属性页向导”为您的用户控件创建属性页。欲知有关创建和测试 ActiveX 控件的详细信息,请参见第4章“创建 ActiveX 控件”和第9章“联编 ActiveX 控件”。第6章“部件设计的常用规则”和第7章“调试、测试并配置 ActiveX 部件”也包含一些有用信息。四、 模块
17、设计:这章我们介绍设计模块部分,从菜单的“工程”“添加模块”中直接加入一个模块,默认的模块名称“Module1”。然后添加一些我们需要的API函数与类型。添加这些函数与类型可以采用菜单中的“外接程序”中添加,打开外接程序菜单点击“外接程序管理器”如图11所示。选择VB6 API Viewer在“加载行为”栏中把“在启动中加载”、“加载/卸载”前面的选择框中的勾打上,然后点击确定退出,这时候就可以从外接程序的菜单中看见“AIP浏览器”菜单项,点击这个菜单项即可进入API的添加。图11外接程序管理器打开API浏览器如图12所示,首先要加载文本文件,在浏览器的菜单中点击“文件”“加载文本文件”选择“
18、WIN32API”文件如图13所示。图12 API浏览器窗体图13加载文本文件窗体表五、API名称与类型名称列表序号名称分类说明1GetCursorPos函数声明该函数检取光标的位置,以屏幕坐标表示。2ScreenToClient函数声明判断屏幕上一个指定点的客户区坐标3DrawFocusRect函数声明画一个焦点矩形。4POINTAPI类型5RECT类型根据表五内容在声明栏下方键入名称,同时选择声明范围“公有”选择框,点击添加按钮,以此类推把三个API函数声明从可用项中都添加到选定项栏目中如图14所示。图14 API浏览器选定函数选择API类型的下拉框中的类型,再在下面输入框中输入类型,选择
19、声明范围为公有,再点击添加,如图15所示。图15 API浏览器中的类型选择以上项目都完成以后,点击插入按钮,这时候API浏览器就会自动把我们刚才选择好的这些函数与类型代码插入到模块中,如下所示:Option ExplicitPublic Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINT
20、API) As LongPublic Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As LongPublic Type POINTAPI x As Long y As LongEnd TypePublic Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd Type五、 代码设计:完成控件向导以后系统会自动生成部分代码,我们可以根据代码部分的修改来达到我们设计的目的。下面分步骤说
21、明我们的设计方案与方法:(一)、缺省属性值(即常量)设计方法:将常量中的内容进行修改,为如下方式:Const m_def_BackColor = vbButtonFace'设计值为绘在命令按钮正面的颜色Const m_def_ForeColor = 0'缺省属性值Const m_def_Enabled = True'设计为有效状态Const m_def_Caption = "OptionButton"'设计为第一次显示的文本名称Const m_def_Group = False'缺省属性值Const m_def_Value = Fal
22、se'缺省属性值以上的常量设计为我们所需的一些定义,直接写入常量的内容中。(二)、属性变量设计方式:在原属性变量中我们添加三个自定义的变量m_Frame、m_chVal、m_btnDown,用于临时存储标志的用处,其余不变。Dim m_Frame As StringDim m_chVal, m_btnDown As Integer以上为全局使用的变量,可以以Public的形式定义也可以用Dim直接定义。(三)、BackColor属性设计:源代码已经写好部分框架,可以根据我们的需求进行修改。下面的是修改源代码:Public Property Let BackColor(ByVal New
23、_BackColor As Long) m_BackColor = New_BackColor UserControl.BackColor = m_BackColor Pic.BackColor = m_BackColor PropertyChanged "BackColor" End Property修改的目的:在中间插入两行代码,其目的是将控件的背景色定义为“OLE_COLOR”数据类型后会在设计时“属性”窗口中会显示出一个颜色选取对话框,以便用户自定义颜色,也就是调用系统自带的颜色控制调整属性页。当然,这个设计部分还可以扩展到很多方面,例如可扩展自定义属性页等等。(四
24、)、ForeColor属性设计:源代码部分就省略了,就说说更改部分。这里我们需要添加一些自定义过程和函数,用于控件背景图案选择。设计过程如下:Private Function DisablePc() If m_Enabled = True Then If m_Value = True Then Pic.Picture = Img(4).Picture If m_Value = False Then Pic.Picture = Img(0).Picture Else EnablePc End IfEnd Function这个函数用于判断是否该控件使能,即是否有作用。先判断控件有效,然后判断控件是
25、否作用?然后调入相应的外观图形。Private Function EnablePc() If m_Value = True Then Pic.Picture = Img(7).Picture If m_Value = False Then Pic.Picture = Img(3).PictureEnd Function这个函数用于判断控件是否作用,然后调入相应的图形。Private Sub Check_Enabled() If m_Enabled = False Then EnablePc '判断控件是否失效? lbl.ForeColor = &H80000011 Timer1
26、.Enabled = False If m_Enabled = True Then DisablePc '判断控件是否有效? lbl.ForeColor = m_ForeColorEnd Sub这个过程用于判断控件是否失效和是否使能,同时控制标签的背景色。修改后的程序如下:Public Property Let ForeColor(ByVal New_ForeColor As OLE_COLOR) m_ForeColor = New_ForeColor Check_Enabled '插入一个判断是否失效?使能?的控制过程。 PropertyChanged "ForeC
27、olor"End Property(五)、Enabled属性的设计:这个属性因为控制整个控件,所以需要在Get和Let两个方面修改。Public Property Get Enabled() As Boolean Enabled = UserControl.Enabled '直接定义为整个控件失效与否。 m_Enabled = UserControl.Enabled '变量与此相同。End Property代码意义是直接定义整个控件。Public Property Let Enabled(ByVal New_Enabled As Boolean) UserContro
28、l.Enabled() = New_Enabled '设置为新的对象 m_Enabled = New_Enabled Check_Enabled '插入一个判断是否失效?使能?的控制过程。 PropertyChanged "Enabled"End Property代码设计为定义一个新的控件失效与否的对象,然后插入一个失效使能的控制过程。(六)、Font属性的设计:字体属性设计很简单,只要把控件和标签的字体设置为与设计时相同即可。Public Property Set Font(ByVal New_Font As Font) Set m_Font = New_
29、Font Set UserControl.Font = New_Font '设置控件字体与设计时相同 Set lbl.Font = m_Font '设置标签字体与设计时相同 Call UserControl_Resize '调用“UserControl_Resize”过程。 PropertyChanged "Font"End PropertyUserControl_Resize事件是当一个对象第一次显示或当一个对象的窗口状态改变时该事件发生。(七)、Caption属性的设计:属性获取的时候标题栏的文本指定为标签控件,设计代码如下:Public Pro
30、perty Get Caption() As String Caption = lbl.Caption 'End Property赋值的时候直接把标签控件的标题栏文本定义为控件的标题栏Public Property Let Caption(ByVal New_Caption As String) lbl.Caption = New_Caption Call UserControl_Resize '调用“UserControl_Resize”过程。 PropertyChanged "Caption"End Property(八)、Value属性的设计:使能属性
31、设计也是很简单,前面我们已经写过一个“DisablePc”函数,只要调用即可。Public Property Let Value(ByVal New_Value As Boolean) m_Value = New_Value DisablePc'调用判断失效、使能函数。 PropertyChanged "Value"End Property(九)Group属性设计:该属性不需要变动,保持原样即可。以上部分为通用代码部分的设计。下面我们介绍每个控件中的属性、事件、方法的设计过程。各个控件的事件过程设计思路如下:1、UserControl事件过程该控件由很多属性、事件、
32、方法组成,在经过向导以后自动生成了InitProperties、ReadProperties、WriteProperties三个事件,即初始化、加载、存储三个事件过程。我们还需要自己添加一些事件过程,有Resize(状态改变)、Click(单击)、Initialize(创建)、MouseDown(鼠标按下)、MouseMove(鼠标移动)、MouseUp(鼠标释放)等等如表五所示。表六、UserControl中事件过程编号事件过程名称说明1InitProperties初始化2ReadProperties加载3WriteProperties写入4Resize状态改变5Click单击6Initia
33、lize创建7MouseDown按下8MouseMove移动9MouseUp弹起创建这些事件、属性的方式可以根据图11来选择。在代码窗体的正上方有两个下拉工具框,左边是选择自定义控件中所对应的各个控件,右边这个是选择各个控件中对应的属性、事件。图16选择创建各个控件的事件、属性方式下面分别介绍事件过程的设计、修改:(一)、InitProperties事件过程的修改Private Sub UserControl_InitProperties() Caption = "OptionButton" Enabled = True Value = False BackColor =
34、m_def_BackColor ForeColor = m_def_ForeColorEnd Sub1、 标签栏中的文件定义为“OptionButton”。2、 失效属性定义为“True”开。3、 使能属性定义为“False”关。4、 设置字体属性为包含容器环境信息的字体属性。5、 背景色属性设置为常量值。6、 字体背景色属性设置为常量值。以上设置表示当控件刚刚创立的时候所需的各种属性值。(二)、ReadProperties事件过程修改Private Sub UserControl_ReadProperties(PropBag As PropertyBag) Enabled = PropBag
35、.ReadProperty("Enabled", True) Value = PropBag.ReadProperty("Value", m_def_Value) Group = PropBag.ReadProperty("Group", m_def_Group) Set Font = PropBag.ReadProperty("Font", UserControl.Ambient.Font) Caption = PropBag.ReadProperty("Caption", "Opt
36、ionButton1") BackColor = PropBag.ReadProperty("BackColor", m_def_BackColor) ForeColor = PropBag.ReadProperty("ForeColor", m_def_ForeColor)End Sub1、 将失效状态读入。2、 将使能状态读入。3、 将临时标签设置值读入。4、 读取字体类型。5、 标题栏中的文本状态读入。6、 背景色状态。7、 字体背景色状态。(三)、WriteProperties事件过程修改Private Sub UserControl_
37、WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("Enabled", UserControl.Enabled, True) Call PropBag.WriteProperty("Value", m_Value, m_def_Value) Call PropBag.WriteProperty("Group", m_Group, m_def_Group) Call PropBag.WriteProperty("Font", m_Fo
38、nt, UserControl.Ambient.Font) Call PropBag.WriteProperty("Caption", lbl.Caption, "OptionButton") Call PropBag.WriteProperty("BackColor", m_BackColor, m_def_BackColor) Call PropBag.WriteProperty("ForeColor", m_ForeColor, m_def_ForeColor)End Sub1、 将失效状态写入内存。2、 将
39、使能状态写入。3、 将临时设置写入。4、 字体状态写入。5、 标题栏内容文本写入。6、 背景色状态写入。7、 字体背景色状态写入。(四)、创建一个Click事件过程根据表五,选择右边的下拉工具框,找到Click事件过程的名称并单击,即可在代码窗体中自动建立这个事件过程。然后我们根据设计要求添加代码。Private Sub UserControl_Click() Dim OB As Object If m_Value = True Then Check_Enabled: Exit Sub For Each OB In Parent.Controls If TypeOf OB Is OptionB
40、utton Then If OB.Container Is Extender.Container Then If OB.Group = m_Group Then OB.Value = False End If End If End If Next Value = TrueEnd Sub设计详细说明如下:1、先定义一个Object数据类型变量,该变量存储为 32 位(4 个字节)的地址形式,其为对象的引用。利用Set语句,声明为Object的变量可以赋值为任何对象的引用。2、然后判断使能属性是否打开?如果打开则跳到失效、使能处理过程,然后退出这个单击程序。3、如果使能属性为“False”则进入一
41、个(Group)数组控件控制程序。扫描控件数组中的所有“Parent.Controls”属性,然后判断属性名称针对一个数组或集合中的每个元素,重复执行一组语句。4、退出循环后将使能属性打开。这个事件过程控制控件的使能属性开关,同时兼顾控件数组循环只能有一个是使能状态。(五)、Initialize创建事件过程设计:与上面那个事件过程一样,通过左边的事件下拉控件中选择“Initialize”单击进入设计代码。Private Sub UserControl_Initialize() UserControl_Resize DisablePc m_chVal = 1 m_Group = FalseEnd
42、 Sub设计详细说明如下:1、 运行Resize事件。2、 运行显示图形界面。3、 临时变量存入1。4、 控件数组变量设置为False这个事件过程程序主要用于第一次使用,即创建这个控件时所产生的。(六)、Resize事件程序设计加入这个事件过程,目的是为了绘制图形的外观和图形的大小,同时控制标签的位置。Private Sub UserControl_Resize() UserControl.ScaleMode = 1 Pic.Height = 195 Pic.Width = 195 Pic.Left = 0 Pic.Top = (UserControl.Height - Pic.Height)
43、 2 lbl.Top = (UserControl.Height - lbl.Height) 2 lbl.Left = 240End Sub详细说明如下:1、 设置控件在屏幕上的分辨率,采用像素的方式。2、 设置显示控件的图形高度。3、 设置显示控件的图形宽度。4、 定义图形左边位置。5、 定义图形顶部位置。使图形定位在(控件高度减去显示图片高度再除以2)位置。6、 设计标签显示位置。使标签定位在(控件高度减去标签高度再除以2)位置。7、 设计标签显示位置(左边位置)。这个事件过程就是定位控件中显示图片和标签位置的过程,一旦控件有所改变位置就必须重绘一次。(七)、MouseDown鼠标按键按下
44、动作的事件过程这个过程设计思路为:当鼠标左键按下时,先检查是否失效,然后判断使能是否打开采用相应的打开显示图形显示在外观上。如果使能功能没有打开?则使用相应的显示图形显示在外观上。最后做一个标志,表示这个控件刚刚被使用过。Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If m_Enabled = False Then Exit Sub If m_Value = True Then Pic.Picture = Img(6).Picture If m_
45、Value = False Then Pic.Picture = Img(2).Picture m_btnDown = 1 RaiseEvent MouseDown(Button, Shift, X, Y)End Sub设计详细说明如下:1、 判断是否可以使用这个控件?不能使用就退出这个事件过程。2、 判断使能是否可用?则调入相应的显示图形外观。3、 判断使能不可用?则调入相应的显示图形外观。4、 置按键标志为1(表示按键被按下过)。5、 输出这个事件过程。(八)、MouseMove鼠标移动事件过程事件过程设计思路是:判断能不能使用这个控件?图标是否对应于这个控件?按键是否刚刚被按过?等等判断
46、。如果都不是,启动定时器。然后判断使能开关以显示相应的图形外观图片。Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If m_Enabled = False Then Exit Sub If Pic.Picture = Img(m_chVal).Picture Then Exit Sub If m_btnDown = 1 Then Exit Sub Timer1.Enabled = True If m_Enabled = False Then If
47、m_Value = True Then Pic.Picture = Img(6).Picture: m_chVal = 6 If m_Value = False Then Pic.Picture = Img(2).Picture: m_chVal = 2 Else If m_Value = True Then Pic.Picture = Img(5).Picture: m_chVal = 5 If m_Value = False Then Pic.Picture = Img(1).Picture: m_chVal = 1 End If RaiseEvent MouseMove(Button,
48、Shift, X, Y)End Sub设计详细说明如下:1、 判断控件是否失效?失效就退出这个事件过程。2、 判断图片显示标志是否存在?不存在就退出事件过程。3、 判断使用标志是否开启?使用过即可退出。4、 以上都不对,开启定时器。5、 再次判断失效开关。6、 如果使能功能打开?则改变显示图片为第六张同时标志写入6。7、 如果使能功能没有打开?则显示图片为第二张同时标志写入2。8、 失效开关打开?则。9、 如果使能功能打开?则改变显示图片为第五张同时标志写入5。10、 如果使能功能没有打开?则显示图片为第一张同时标志写入1。11、 输出这个事件过程。(九)、MouseUp鼠标弹起事件过程:事件
49、过程设计思路:把按下事件过程标志清零即可。Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) m_btnDown = 0 RaiseEvent MouseUp(Button, Shift, X, Y)End Sub设计详细说明如下:1、 将按下的标志清零。2、 输出这个事件过程。2、lbl标签事件过程该控件主要有表七所示的事件过程组成。设计理念是与UserControl控件同步,表示标题栏所有变化都与UserControl控件事件同步。表七、lbl事件过程编
50、号事件名称说明1Change内容改变后启动这个事件过程。2Click单击事件过程3MouseDown鼠标按下4MouseMove鼠标移动5MouseUp鼠标弹起选择左边的下拉框选择lbl控件,然后按表七选择右边的事件过程。(一)、Change改变内容的事件过程事件过程的设计思路:只要全部模拟UserControl中的事件过程即可。Private Sub lbl_Change() UserControl_ResizeEnd Sub1、直接使用UserControl中的Resize事件过程即可。(二)、Click单击事件过程设计思路:直接模拟UserControl中的单击事件过程。Private
51、Sub lbl_Click() Call UserControl_ClickEnd Sub1、Call(将控制权转移)UserControl中的Click事件过程。(三)、MouseDown鼠标按下事件过程设计思路:直接模拟UserControl中的鼠标按下动作。Private Sub lbl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Call UserControl_MouseDown(Button, Shift, X, Y)End Sub1、将控制权交给UserControl的Mouse
52、Down事件即可,以便保证同步。(四)、MouseMove设计思路:直接模拟UserControl中的鼠标移动动作。Private Sub lbl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Call UserControl_MouseMove(Button, Shift, X, Y)End Sub1、将控制权交给UserControl的MouseMove事件即可,以便保证同步。(五)、MouseUp鼠标弹起或释放时事件过程设计思路:直接模拟UserControl中的鼠标弹起动作。Privat
53、e Sub lbl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Call UserControl_MouseUp(Button, Shift, X, Y)End Sub1、将控制权交给UserControl的MouseUp事件即可,以便保证同步。3、Pic控件设计事件过程该控件设计理念是个容器控件,主要作用就是当鼠标变化的时候,放入相应的显示外观的图片。表八、Pic事件过程列表编号事件过程说明1Click单击事件过程2GotFocus当焦点进入对象或子控件时,发生该事件。3KeyDown键盘具有焦
54、点时按下4KeyPress键盘按下和松开5KeyUp键盘具有焦点时松开6LostFocus当焦点离开对象或子控件时,发生该事件。7MouseDown鼠标按下8MouseMove鼠标移动9MouseUp鼠标弹起按照表八内容选择左边确定Pic,然后选择右边的事件过程单击即可。(一)、Click单击事件过程设计:设计理念是:直接模拟UserControl中的Click事件。目的是与控件同步。Private Sub Pic_Click() UserControl_ClickEnd Sub1、模拟UserControl_Click事件过程(二)、GotFocus焦点获取事件过程设计:设计理念:交给UserControl的MouseMove事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年东营辅警招聘考试题库及参考答案详解
- 2023年舟山辅警协警招聘考试备考题库附答案详解(满分必刷)
- 2023年金昌辅警招聘考试题库附答案详解(精练)
- 2026届河南省上蔡一高化学高二上期末预测试题含解析
- 2024年宝鸡辅警协警招聘考试备考题库附答案详解(培优)
- 2023年石嘴山辅警招聘考试真题含答案详解(预热题)
- 云南省楚雄市古城二中2025年高二上数学期末综合测试模拟试题含解析
- 甘肃省庆阳长庆中学陇东中学分校2023年高二上物理期末综合测试试题含解析
- 2026届江苏省南师附中高二上生物期末质量跟踪监视试题含解析
- 2026届吉林省通化市梅河口市博文学校高二生物第一学期期末监测模拟试题含解析
- 大雾天安全行车培训
- tac涂层工艺过程
- JT∕T 934-2014 城市公共汽电车驾驶员操作规范
- 车辆抵押全权委托书格式
- 《工程建设标准强制性条文电力工程部分2023年版》
- 国开一体化平台01588《西方行政学说》章节自测(1-23)试题及答案
- 《重复构成》课件
- 管道阀门更换施工方案
- 2022北京民政局事业单位考试真题
- 初中化学实验手册(人教版)
- 化工大学生职业生涯规划书
评论
0/150
提交评论