走近VB.Net(九) AxAgent动画窗体的实现

走近VB.Net(九) AxAgent动画窗体的实现

前几天看到一些网友讨论msagent的贴子,其实在VB.Net中实现也很容易却总是没有人肯动手一试。现在我就介绍一下这个很简单的方法,希望激励更多的同道加入我们的队伍,以能相互间促进(这次最好比“洋人”早一步)。
首先添加控件(不知道谁说VB.Net不使用控件,真是越传越玄)

第二步将控件在窗体上画出来(这也是运行时不可见的,不过他会出现在窗体上,而不是象timer控件出现在下面。
源代码如下:

Imports System.ComponentModel

Imports System.Drawing

Imports System.WinForms

Public Class Form1

Inherits System.WinForms.Form

'指定要使用的动画数据,这里的merlin.acs是一个圣诞老人的造型

Dim Genie As AgentObjects.IAgentCtlCharacterEx

Const DATAPATH As String = "MERLIN.ACS"

'与VB6不同的是你不需要下载每一个都有2M多的动画数据,在控件中已内置了所有的动画文件

Public Sub New()

MyBase.New() '调用父类的new过程

Form1 = Me

'This call is required by the Win Form Designer.

InitializeComponent()

'设置窗体没有标题栏

Me.BorderStyle = FormBorderStyle.None

'设置窗体的色彩

Me.BackColor = Color.Beige

'TODO: Add any initialization after the InitializeComponent() call

Me.Height = 100 : button2.Top = 20 : button1.Top = 20 : button2.Text = "退出程序" : button1.Text = "少儿不宜"

'装载动画

axAgent1.Characters.Load("MERLIN", DATAPATH)

Genie = axAgent1.Characters("MERLIN")

Genie.LanguageID = &H409S

End Sub

'Form overrides dispose to clean up the component list.

Public Overrides Sub Dispose()

MyBase.Dispose() '调用父类的dispose过程

genie = Nothing '释放资源

components.Dispose()

End Sub

#Region " Windows Form Designer generated code "

'Required by the Windows Form Designer

Private components As System.ComponentModel.Container

Private WithEvents Button2 As System.WinForms.Button

Private WithEvents Button1 As System.WinForms.Button

Private WithEvents AxAgent1 As AxAgentObjects.AxAgent

Dim WithEvents Form1 As System.WinForms.Form

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Private Sub InitializeComponent()

Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))

Me.components = New System.ComponentModel.Container()

Me.Button1 = New System.WinForms.Button()

Me.Button2 = New System.WinForms.Button()

Me.AxAgent1 = New AxAgentObjects.AxAgent()

AxAgent1.BeginInit()

'@design Me.TrayHeight = 0

'@design Me.TrayLargeIcon = False

'@design Me.TrayAutoArrange = True

Button1.Location = New System.Drawing.Point(32, 8)

Button1.Size = New System.Drawing.Size(80, 32)

Button1.TabIndex = 1

Button1.Text = "Button1"

Button2.Location = New System.Drawing.Point(120, 8)

Button2.Size = New System.Drawing.Size(80, 32)

Button2.TabIndex = 2

Button2.Text = "Button2"

AxAgent1.Size = New System.Drawing.Size(56, 40)

AxAgent1.OcxState = CType(resources.GetObject("AxAgent1.OcxState"), System.WinForms.AxHost.State)

AxAgent1.TabIndex = 0

AxAgent1.Location = New System.Drawing.Point(216, 32)

Me.Text = "Form1"

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.Controls.Add(Button2)

Me.Controls.Add(Button1)

Me.Controls.Add(AxAgent1)

AxAgent1.EndInit()

End Sub

#End Region

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)

Me.Dispose()

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

genie.Left = 500 '设定agent的位置

Genie.Show() '使用show方法显示agent

genie.MoveTo(12, 180) 'moveto方法是移动agent到一个位置,如果加上定时器,你可以很容易地让他在屏幕上乱跑

messagebox.Show("如果你是MM,请按Ctrl+Alt+Del关闭 " & chr(10) & chr(13) & "您真的要继续吗, 等到我不 动再说!")

Genie.Speak("ni hao") '发出声音

messagebox.Show("你好") '对话框,更多的参数请看以前的相关文章

Genie.Speak("WO SHI HAO KAN DI") '发出声音

messagebox.Show("我是好看的") '对话框,更多的参数请看以前的相关文章

Genie.Speak("NI SHI NAN KAN DI") '发出声音

messagebox.Show("你是难看的") '对话框,更多的参数请看以前的相关文章

Genie.Speak("ZIA JIE MIMI ") '发出声音

messagebox.Show("再见 MM") '对话框,更多的参数请看以前的相关文章

genie.Play("Wave") '挥手致意

'众MM请勿生气

'上面是开一个小玩笑,如果要真正的读中文,就用下面的

'Genie.Speak("CNstring ",CNstring.wav) '这里的CNstring就是中文的语音文件

genie.Hide() '使用hide方法隐藏agent

End Sub

Private Sub Form1_MouseDown(ByVal eventSender As Object, ByVal e As System.WinForms.MouseEventArgs)

'mousedown的事件中窗体中的下拉列表是找不到的,自己写一个吧,加上(ByVal eventSender As Object, ByVal e As System.WinForms.MouseEventArgs)即可

'下面的代码使窗体可以拖动

Me.Capture() = False '释放鼠标捕获,等同于API的ReleaseCapture()

Me.SendMessage(&HA1S, 2, 0) '唔,这个就是哪个sendmessage的API了,只是第一个句柄参数不再用了。

End Sub

Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

End Class

这个程序如果要在别的系统上运行,一定要制作安装程序(当然先要升级系统组件并安装SDK),请参考前面的几篇文章,因为需要支持数据,VB.Net与VB6不同的是安装的支持组件一般会在当前目录,而不是在系统目录。

时间: 2025-01-29 18:07:25

走近VB.Net(九) AxAgent动画窗体的实现的相关文章

走近VB.Net(十一) 随心所欲窗体外观(skin精彩源码)

走近VB.Net(十一) 随心所欲窗体外观(skin精彩源码) 前几天因为应付约稿,答应的这个源码推迟了几天,今天熬夜把他写出来,请见谅.另外我想说一些题外话,前时我曾在文章中说过,说VB.Net的面向对象抄袭java,delphi没有实际根据(你总不能把面象对象理解成linux核心一样的源码技术,他主要还是一种指导思想),这句话本身就有了逻辑性的错误,请问java与delphi是谁抄谁呢?答案只能是SmallTalk的面向对象更早(见王国荣的文章). VC的面向对象大家闭口不提,然而我个人认为

走近VB.Net(一),VB中的族,类,对象(摘录部分MSDN)

对象 走近VB.Net(一),VB中的族,类,对象 VB.Net是面向对象(object-oriented)的,又称为物件(object)导向(oriented).在VB.Net中所有的变量类型都是基于object,而不是VariantDim x As Variant 会被升级为 Dim as object.如果你不理解对象,暂时你可以把他理解为一段数据,他是实际存在于内存的,所以对象以称为实例(instance)而类(class)就是类别,他定义一群对象,是一个对象的群体,并定义方法成员.所以

走近VB.Net(七)在窗体上画图

走近VB.Net(七)在窗体上画图 如果看过一些文章一定知道在窗体上画图要使用system.drawing类,在VB.Net中没有line与label控件,需要自已写一些代码, 首先写一个事件过程onpaint.在显示窗体的同时显示图形 Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 'TODO: 请在此处添加绘图代码 End Sub ByVal e As PaintEventArgs是一个参数类,这个有些象在VB6在使用的自

走近VB.Net(十三) VB.Net问答全集

走近VB.Net(十三) VB.Net问答全集 VB.Net中文站 http://vbnetcn.126.com hejianzhong 最近老是有人问一些重复的问题,我就想到把他们汇总起来,现在用VB.Net太少,资料更少.问的人也不多,这 些都是从全国的讨论组收集的,有一部份来自-[VB.Net中文站讨论组]http://my.6to23.com/vbnetcn/bbs/BBS2index.htm. 一些是我回答的,有一些是一些较早研究VB.Net的网友回答的,因为是探讨的阶段,可能会有一些

走近VB.Net(六) 菜单与托盘图标

菜单 走近VB.Net(六) 菜单与托盘图标 在VB.Net中菜单使用控件而不是菜单编辑器,主菜单使用MainMenu控件,弹出菜单使用ContextMenu,这里说一说弹出菜单,至于主菜单用法也没有什么大的区别,在VB6中只要使用菜单就一定会出现那个看得让人有点厌烦的标题栏,可是又没有什么好的办法,只好增加一个隐藏的窗体放置菜单,这就增加了不必要的内存开销,而现在的菜单控件不再有这些问题,可以设置没有标题栏却仍然使用菜单,更加灵活,更加易于使用,当然功能也更强大.托盘图标也使用控件,真的非常容

走近VB.Net(四) 关于数据类型与示例

示例|数据|数据类型 走近VB.Net(四) 关于数据类型与示例 在前面几章谈得最多的是Variant(vb6)到Object(vb.net)的转换,Object被称为通用的数据类型.另外是32位的long(vb6)被integer(vb.net)所取代,在vb.net中long储存64位的带符号整数.而short存储16位的数字取代vb6的integer的位置.而我们在下面要谈的是Decimal数据类型. 在初学vb6的时候,可能所有的人都做过同一个入门程序"计算器",你可能看到在计

走近VB.Net(八) 常用语法

语法 走近VB.Net(八) 常用语法一:Try---Catch---finally---end try 捕获错误 把一个可能出错的语句放在try后面,如果出错,执行catch语句, catch可以有多个,第一个catch不能捕获的错误,将被下一个catch语句所捕获.在所有的处理结束后,执行finally语句. 在一个try---end try 过程中可以使用catch与finally两个中的一个,或者两个一起用, 二:Protected, private, Public 封装控制 这三个关键

走近VB.Net(三) 源码详解—运用颜色的初步探讨

详解 走近VB.Net(三) 源码详解-运用颜色的初步探讨 新建一个工程,加入以下控件1. label控件:label1,label2,labred ,labblue,labgreen2. picturebox控件:picturebox13. button控件:Button1设置form1的opacity属性为80%,设置透明的窗体在office中抓取一幅取色图片存为bmp格式,并设为picturebox1的backgroundimage,即背景图片Option Strict Off '关闭 s

走近VB.Net(五) VB.Net核心概念

概念 走近VB.Net(五) VB.Net核心概念 VB.Net中文教程在行文上有些重复太多甚至有些啰嗦,以至让人读得索然无味,但是,这个VB.Net中文教程确实是很难得甚至可以说是经典的VB.Net文章.说老实一点,除了读得累一些外,实在是比我写的好多少倍.第二个问题就是很多人谈到很惨,说一切要从头学起,其实所要你学的不过是一些简单的语法变化,最重要的是观念的改变,也就是思维方式的转向,也就是说在经过了最初的摸索以后,你在VB6(我是不懂VB6的,我只懂一些D(不是你想的那个D),没有面向对象