精华内容
下载资源
问答
  • VB怎样动态加载ActiveX控件A ...VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句中用 New 关键字、C

    VB怎样动态加载ActiveX控件A

     
            熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变量。如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用:

    Dim xlApp1 As Excel.Application
    Set xlApp1 = New Excel.Application

    Dim xlApp As Object            '定义存放引用对象的变量。
    Set xlApp = CreateObject("excel.application")
    xlApp.Visible = True

            这些语法很容易造成误导,以为动态加载ActiveX控件也是此方法,可能有朋友也象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种考虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如何实现动态ActiveX控件找出了一条切实可行的方法,下面以一个具体的实例来详细说明。
    一、ActiveX控件 

            ActiveX 控件是 Visual Basic 工具箱的扩充部分。使用 ActiveX 控件的方法与使用其它标准内装的控件,如 CheckBox 控件,完全一样。在程序中加入 ActiveX 控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。 

            ActiveX 部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交互作用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。例如,假设应用程序使用 ActiveX 控件来提供一个标准的雇员窗体,供公司的多种应用程序使用。提供雇员窗体的 ActiveX 控件就是服务器,使用这个控件的应用程序就是服务器的客户端。

    二、加载方法 

            VB6.0 中对Controls 集合进行了扩展,以前版本中Controls 集合在窗体上列举出已加载的控件,这在迭代过程中是很有用的。Controls 集合标识一个叫做 Controls 的内在窗体级变量。如果忽略可选的 object 所在处的整数,则关键字 Controls 必须包括在内。我们通常在窗口中使用如下代码:

    Text1.Text="Hello, world"
    其实也可以使用如下代码达到同一目的:
    Controls(1).Text="Hello, world"

            在VB6.0中除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0中只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处),增加了Add方法,该方法就是用于动态加载控件的:
    Controls.Add(progid as String, Name as String);
    progid: ActiveX部件的ProgID,如:"VB.CheckBox";    Name:ActiveX部件加载后的名称,如: "MyCheckBox";

    若要在窗体上添加一个名为MyButton的按钮,可以使用:
    dim oControl as Object '窗体级变量           注意:这里声明为Object对象类型
    Private Sub LoadControl()
         Set oControl = Controls.Add("VB.CommandButton", "MyButton")
         oControl.Left = 10
         oControl.Top = 10
         oControl.Visible = True '使控件可见
    End Sub

            这是VB6.0的标准语法,它在例程中也是如此演示的,不过该方法虽然现实了控件的动态加载,按钮显示在窗体上,可以象普通按钮一样按下去,但加载的控件不能预先设计响应事件代码,如:事件Sub MyButton_Click()将是非法的,当然,可以将要响应的事件封装在控件内部。就编程的观点来看该方法没什么大的用处,开发ActiveX控件的目的是为了资源共享,为了被其他开发人员利用,所以要提供必要的事件接口,显然利用该方法不行,通过分析 VBControls等相关对象,找出VBControlExtender对象与EventInfo相结合能提供事件陷井捕捉, VBControlExtender对象对动态添加控件特别有用,它提供了一套通用的属性、方法、事件给开发人员,它的一个突出特点是能编程设计控件的事件,熟习类编程的朋友对带事件的对象声明一定不会陌生: 
            Dim WithEvents objElemt as CElemtVBControlExtender 也不例外,声明的语法一样,只不过它有个特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到对象使用 RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数和参数的值。VBControlExtender和   EventInfo相结合,采用Select Case 就可以预先将不同类对象的事件放置一起,各自独立运作。将上面的代码改写一下就能提供 Click事件了: 

            Dim WithEvents oControl As VBControlExtender '带事件声明声明之后您就可以在代码窗口的左上角的对象下拉框中发现该对象出现了,也就是说,该对象有了事件或方法了,它的事件有DragDrop,DragOver , LostFocus ,GotFocus ,ObjectEvent和Validate,其中ObjectEvent是通用的事件捕捉。

    Private Sub LoadControl()
        Set oControl = Controls.Add("VB. CommandButton", "MyButton")
        oControl.Visible = True
    End Sub

    Private Sub oControl_ObjectEvent(Info As EventInfo)
        Select Case Info.Name
        Case "Click"         'Click事件        '您可以添加处理Click事件代码
            MsgBox "您按了MyButton!"
        Case Else ' 其他事件
            ' Handle unknown events here.
        End Select
    End Sub

            当然对微软提供的标准控件能采用该方法添加,大家都不会怀疑,但自己开发的控件也能吗?答案是肯定的,我们可以用一个实际的例子进行说明。

    三、实例描述 

            假设一个本地网络的监控系统,需要在原理图与实物示意图间切换,原理图包括组网结构、传输资源、监控主机等,而实物示意图包括路由器、设备、采集器等,当然两种图的事件要一致,如双击某个设备图形将显示给设备的实时数据等,为了简化维护,将原理图与实物示意图封装成ActiveX控件,由于每种图需要加载许多图形控件,消耗资源较大,不能同时加载,需要将其分解为两个控件,在切换时首先卸载一个控件,然后加载另一个控件,所以要实现动态加载ActiveX控件。

    原理图控件为--Theory.ocx ,对应工程为CTheory;
    实物图控件为---Fact.ocx ,对应工程为CFact;
    注意:为了简化,在设计控件时不设置许可证关键字。 

            实物图控件上的图形对象可以被拖动,拖动后的位置信息通过事件ChangePosition来通知拥有该控件的窗体,以便下次加载能显示在最后位置,实物图和原理图控件都有双击事件完成的工作相同,其他事件此处忽略。

    四、具体示例

    1、准备工作
    对控件Theory.ocx 、Fact.ocx 进行注册(利用Regsvr32.exe注册);
    建立窗体frmTest.frm ,在窗体上放置按钮cmdLoadOcx—“原理图”

    2、声明窗体级变量与加载函数LoadControl
    Dim WithEvents oControl As VBControlExtender            '地图仿真控件对象
    Dim mblnTheory As Boolean            '是否显示原理图
    Private Function LoadControl(intType As Integer)
            If   Not oControl Is Nothing Then                 '首先判断对象是否存在,若存在则卸载
                    Controls.Remove("MapView")                 '卸载控件,此操作非常重要
            End If
            If intType = 0 Then
                    Set oControl = Controls.Add("CTheory. Theory", "MapView")
            Else
                    Set oControl = Controls.Add("CFact.Fact", "MapView")
            End If

            oControl.Height = 3500
            oControl.Width = 6500
            oControl.Top = 100
            oControl.Visible = True
    End Function

    Private Sub Form_Load()
            mblnTheory = True
    End Sub

    3、为按钮cmdLoadOcx编写代码
    Private Sub cmdLoadOCX_Click()
            If mblnTheory Then
                 Call LoadControl(0)
                 mblnTheory = False
                 cmdLoadOCX.Caption = "实物图"
            Else
                 Call LoadControl(1)
                 mblnTheory = True
                 cmdLoadOCX.Caption = "原理图"
            End If
    End Sub

    4、为事件ChangePosition编写代码
    Private Sub oControl_ObjectEvent(Info As EventInfo)
        Select Case Info.Name
        Case "ChangePosition"
               MsgBox CStr(Info.EventParamters.Item(1).Value) + ":" + _   
              CStr(Info.EventParamters.Item(2).Value)
        Case "DbClick"                '双击处理代码
        Case Else '
        End Select
    End Sub

            注意: EventInfo的参数EventParamters集合中是以1开始的,一般来说,微软新的集合一般是以1开始的,而旧的是以0开始的,如RdoErrors.Item(0)。

    5、关闭窗口前卸载控件

    Private Sub Form_Unload(Cancel As Integer)
            Controls.Remove("MapView")
            Set oControl = Nothing
    End Sub

    6、特别注意 
            通过Controls.Add方法添加的ActiveX控件一定不能在该工程中有该控件的任何引用,否则系统将出错。

    五、小结 

            通过使用动态加载ActiveX控件使用庞大的应用程序变得很小,将不同的ActiveX控件进行各种组合,使应用程序更加灵活多变,如您的应用系统要处理三十种门禁,而某个具体的用户可能只有一种或两种门禁,根本没必要首先将所有门禁包含到应用中,可将各个门禁独立封装,只安装注册需要的组件,就象 Windows的自定义安装一样。微软的未来技术基础是分布式的组件技术(DCOM),将会把代码的重用发挥得淋漓尽致。您不妨试一试动态加载,也许会产生令您惊喜的效果!
    展开全文
  • 消息是一个问题或者是一个命令但不能两者都是。 对象之间分为联系和聚合。联系如:公交车上的人,人下了车他还是车,只...2:完整的文档说明明确的名字,8总结该类的话及第个公共接口的注释。怎样使用它。以及分别

    消息是一个问题或者是一个命令但不能两者都是。 

    对象之间分为联系和聚合。联系如:公交车上的人,人下了车他还是车,只不过是一时有联系罢了。

    而聚为电脑里面的主板没有它电脑就不能完成其功能 了。所以他们之间是聚合.聚合为层次结构。

    编写类重用法则。

    1:要遵循样式规则。如java公司制定的标准便于交流。

    2:完整的文档说明,明确的名字,8总结该类的话及第个公共接口的注释。怎样使用它。以及分别与代码的文档。

    3:相将类设计完整。如数据库操作类。当前只是access那么也许要考虑以后用sql server的情况。

    4:使用模式和柜架。这意味着大家在理解你的代码时可以借助他们以前的知识。

    5:采用客房提供者模式。

    6.编写高内聚的对象。每个对象只有一个目标。如维护员工的个人信息及雇佣历。

    7:把接口和业务行为分开。可重用的对像应该在任何条件下都可用。

    8为问题和命令设计对象。

    展开全文
  • 接口文档书写 1. 前置描述 产品文档,简单说明背景,接口用来干嘛的 ...类型定义明确,整形,长整型,浮点,对象,指针 是否需要枚举 required Enuma a 是否必填 optional int a //非必填 必要备注,说

    接口文档书写

    1. 前置描述

    • 产品文档,简单说明背景,接口用来干嘛的
    • 技术文档,说一说各方的具体实现,复杂的可以说下具体的设计思路,n个方案对比,贴上sql,ddl,dml设计,具体代码等具体能看的东西

    2. 方法概览

    • 方法路径,命名统一
    • 方法名称,命名统一
    • 方法类型 get/post…

    3. 参数定义

    • 参数命名统一,下划线,驼峰…
    • 类型定义明确,整形,长整型,浮点,对象,指针
    • 是否需要枚举 required Enuma a
    • 是否必填 optional int a //非必填
    • 必要备注,说明这个字段是干啥的 required int a //不能叫a
    • 是否需要默认值 required int a =0
    • 如果是比较难懂的字段,贴上相关说明链接 required int a //字段说明http:heheda.com
    • 如果是部分有特殊意义的string或者数组,举例子说明含义,比如 yyyy-mm-dd类型的string
    • 需要提供idl文件的或者webservice,注意格式化
    • http请求可以给到示范的请求返回
    • 如果是接口变更,用特殊标记表示,比如字体加红
    展开全文
  • 首先明确unit test和功能测试不一样,参与的人也不一样。 2. 设计完了再入TDD阶段,写UT的过程其实也是校验测试的过程,如果测试不好写,就需要review设计。这里插播一下,既然考虑采用DDD,应该先...
  • 软件需求分析阶段研究的对象是软件项目的用户要求,如何准确表达用户的要求,怎 样与用户共同明确将要开发的是一个什么样的系统,是需求分析要解决的主要问题。也就 是说需求阶段的任务并不是确定系统怎样完成工作,...

           软件需求分析阶段研究的对象是软件项目的用户要求,如何准确表达用户的要求,怎 样与用户共同明确将要开发的是一个什么样的系统,是需求分析要解决的主要问题。也就 是说需求阶段的任务并不是确定系统怎样完成工作,而仅仅是确定系统必须完成哪些工作, 即对目标系统提出完整、准确、清晰、具体的要求。需求分析阶段所要完成的任务是以软 件计划阶段确定的软件工作范围为指南,通过分析综合建立分析模型,编制出软件需求规 格说明书。

     软件需求分析在软件工程生存期的阶段:

           

    软件需求分析的具体内容、步骤如下:

    生成的文档主要有软件需求规格说明书,内容如下:

     

         个人理解(如有不足还望指正):需求分析阶段中的分析建模主要是---将用户的需求抽象为概念模式。而这种概念模式有多种表达方式,可以通过E-R图表现,也可以通过DFD数据流图表现,还可以通过STD状态-变迁图表现,以上三种图都是以DD数据字典为基础进行的。

         软件工程第一步的【软件计划】阶段确定了方案是否可行,第二个【需求分析】阶段,则是考虑软件运行的功能、性能以及对环境要求的一个宏观把控、宏观梳理。

    展开全文
  • php高级开发教程说明

    2008-11-27 11:39:22
    类似地,当面向对象程序设计( o o p)程序员编写一个应用程序的时候,他会尽力使程序满 足项目要求,处理同一个任务,不同的程序员会运用不同的方式。哪种方式更好?每一个程序 员会说他(她)的方法最好,但只有...
  • 对java多态作用的理解

    2020-08-10 11:15:19
    看Java核心技术这本书时,多态的内容讲解的很少,只是举个例子告诉我们怎样使用多态,而没有明确说明为什么使用多态的问题。 谈到面向对象的编程语言时不可避免的就会介绍继承,子类可以继承父类除private外的成员...
  • 什么是多态?为什么使用多态?

    万次阅读 2017-09-15 15:36:29
    看Java核心技术这本书时,多态的内容讲解的很少,只是举个例子告诉我们怎样使用多态,而没有明确说明为什么使用多态的问题。 谈到面向对象的编程语言时不可避免的就会介绍继承,子类可以继承父类除private外的成员...
  • 系统分析与设计作业4

    2019-05-26 23:26:37
    每个用例会提供一个或者多个场景,用场景说明系统怎样和用户或其他系统交互,从而获得一个明确的业务目标。用例与面向对象无关,是经典面向对象分析与设计的一个关键需求输入,是表现系统功能的功能性或行为性需求。...
  • ● 需求分析与规格说明(明确系统的规格和要求); ● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    用来建模对象是如何改变其状态以响应事件,展示对象从创建到删除的生命周期 状态图 状态标记符 状态图 实例:打电话 状态图 状态和转移 事件 状态图 如果你太喜欢 状态图 详细状态 状态图 子状态 状态图...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    为什么K&R1却明确说明不能这样做? 2.9 为什么不能用内建的==和!=操作符比较结构? 2.10结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 ...
  • o 3.5 在 C 中是否有模拟继承等面向对象程序设计特性的好方法? o 3.6 我遇到这样声明结构的代码: struct name { int namelen; char namestr[1];}; 然后又使用一些内存分配技巧使 namestr 数组用起来好像有多个...
  • 为什么K&R1却明确说明不能这样做? 25 2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回是如何实现的? 26 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值?...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    为什么K&R1却明确说明不能这样做? 25 2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回是如何实现的? 26 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值?...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7 i 目录ii 2.6 我遇到这样声明结构的代码: struct name f int namelen; char namestr[1];g; 然后又使用一些内存分配技巧使namestr 数组用起 来...
  • 软件工程简答题

    2012-01-03 21:26:00
    多态性的概念,怎样实现多态性? 答:多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。 静多态可以通过模板和函数...
  • 怎样创建一个对象;对基本数据类型和数组的一个介绍;作用域以及垃圾收集器清除对象的方式;如何将Java中的所有东西都归为一种新数据类型(类),以及如何创建自己的类;函数、自变量以及返回值;名字的可见度以及...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet...
  • C#微软培训资料

    2014-01-22 14:10:17
    第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 ...
  • Thinking.In.Java

    2012-03-21 22:35:53
    怎样创建一个对象;对基本数据类型和数组的一个介绍;作用域以及垃圾收集器清除对象的方式;如何将Java中的所有东西都归为一种新数据类型(类),以及如何创建自己的类;函数、自变量以及返回值;名字的可见度以及...
  • 为什么K&R1却明确说明不能这样做?  2.9 为什么不能用内建的==和!=操作符比较结构?  2.10 结构传递和返回是如何实现的?  2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值?  2.12 ...
  • 1.1.1 明确自己对技术的态度 1.1.2 规划职场发展之路 1.1.3 了解同行薪酬 1.1.4 知晓小公司和大公司的区别 1.2 准备面试材料:求职信、简历 1.2.1 求职信的写法、原则及技巧 1.2.2 个人简历的写法及应注意的问题 ...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

怎样明确说明对象