博文

如何在VB中实现绘图区的大十字光标(2006-04-10 19:30:00)

摘要:有时,我们需要用VB快速开发一个试验数据绘图处理程序,将绘图控件内的鼠标光标改变成与AutoCAD软件中使用的大十字光标的形式,将可以比普通的箭头光标达到更好的效果。那么我们如何实现这样的大十字光标呢? ---- 首先,我们明确一下要达到的效果,假若我们在一个Picture控件中绘图,那么,鼠标移动到这个控件上时,鼠标光标立即改变为大十字形状,光标中的横线从控件的左边界到右边界,竖线从控件的上边界到下边界,即大十字光标将绘图控件分割为四个象限。当鼠标移动到控件外时,光标则又恢复成原来的形式。 ---- 要实现这样的光标,得我们自己通过画线的方式实现。如鼠标在绘图控件内,先在鼠标的当前位置画上光标的横线和竖线;当鼠标位置移动,先擦除原先的光标横线和竖线,然后再在新的位置画光标的横线和竖线,那么我们就要响应绘图控件的MouseMove事件。当然,绘图控件内无论有什么内容,我们擦除光标线和重画光标线时都不能破坏原先的内容,因此我们要将绘图控件的DrawMode设置为vbXorPen(异或方式),绘制光标的横线和竖线时,用异或的方式将横线和竖线的象素点颜色设为光标的颜色和原先的象素点色彩的异或值,再用异或的方式在同样的位置绘制一遍竖线和横线,横线和竖线上的象素点再一次和光标颜色进行异或操作,就擦除了光标的横线和竖线,且又恢复了绘图控件内原先的内容。 ---- 我们还得保证鼠标移动到绘图控件内时,普通的鼠标光标消失,只有绘制的大十字光标出现,因此还应该设置绘图控件的MousePointer属性为vbCuntom,即用户自定义。绘图控件的MousePointer属性设置为vbCustom后,其MouseIcon属性中应装入相应的用户自定义图形,因为我们希望绘图控件内只有我们绘制的光标,而没有其它的光标,故应该装入一个空的(透明的)光标图形。可以任找一个光标文件,通过任意一个资源编辑器对其进行编辑,用透明的方式填充整个光标图形,保存成我们所需的NoIcon.cur即可。 ---- 通过以上的关键设置和操作,我们就可以实现大十字光标了。利用异或方式进行绘图,我们还可以实现一般绘图软件中常有的“橡皮筋”效果,即用鼠标定义一个点后,动态拖动鼠标来定义另外一个点,动态拖动鼠标过程中,所要绘的图形也动态相应变化。 ---- 以下我们通过一个示例来完整实现绘图控件中的大十......

阅读全文(2149) | 评论:0

在VB下设计开发实时的数据采集曲线 (2006-04-09 22:05:00)

摘要: 在VB下设计开发实时的数据采集曲线 加入日期: 2005-6-6     关键字: 数据采集曲线
文章来源: 互联网     文章作者: 不详     责任编辑: 第七乐章
添加收藏夹    打印此页    关闭窗口
  收藏此页到  365Key网摘  天极网摘  博采文摘  和讯网摘  人人网摘
1. 引言

  在笔者参与过的开发的机组轴瓦控制系统中,要求能够实时采集轴瓦转动速度值V,并能根据实时采集到的数据绘制出V在10分钟内变化的短期趋势图和一日内变化的长期趋势图,以便观测轴瓦转动的趋势情况,查看控制效果。该系统在VB6.0环境下进行开发,开始时采用了VB包含的Activex控件技术绘制曲线,在效果不理想的情况下,笔者利用VB绘画函数,最终成功实现了实时数据采集曲线的绘制与显示。笔者将以轴瓦实时采集速度值V的短期趋势图为例,谈一下实时采集曲线的设计与实现过程。

2. 绘图控件的选择

  系统开发初期,采用VB内所含的Activex控件技术来解决实时采集曲线的绘制问题。VB控件中提供了外部Activex控件Mschart来给该应用程序添加图表功能,用它能创建包括条形、饼形、线形等不同类型的三维图表。利用该控件,可对表中的所有项目进行完全控制,例如标题、图表、脚注、轴、数据点系列等等,甚至还能旋转图表,为每一元素加上背景、设置光源,把它们放在想要的地方。

  本系统中需要实时测量轴瓦速度V的实际值,并根据实时更新的短期速度数据数组、长期速度数据数组分别绘制短期趋势曲线图与长期趋势曲线图,这两个趋势图均是速度值(Y轴)和时间(X轴)的关系曲线,并随着时间变动实时更新,以便观测。

  短期趋势图的绘制,由于测量10分钟内的数据,每一秒测量一次,因此每10分钟内都有600个数据,为绘制曲线,还要赋予一个初值,所以速......

阅读全文(3506) | 评论:0

十进制,八进制,十六进制,二进制相互转换大全(2006-04-03 19:29:00)

摘要:' 用途:将十进制转化为二进制
' 输入:Dec(十进制数)
' 输入数据类型:Long
' 输出:DEC_to_BIN(二进制数)
' 输出数据类型:String
' 输入的最大数为2147483647,输出最大数为1111111111111111111111111111111(31个1)
Public Function DEC_to_BIN(Dec As Long) As String
    DEC_to_BIN = ""
    Do While Dec > 0
        DEC_to_BIN = Dec Mod 2 & DEC_to_BIN
        Dec = Dec \ 2
    Loop
End Function

' 用途:将二进制转化为十进制
' 输入:Bin(二进制数)
' 输入数据类型:String
' 输出:BIN_to_DEC(十进制数)
' 输出数据类型:Long
' 输入的最大数为1111111111111111111111111111111(31个1),输出最大数为2147483647
Public Function BIN_to_DEC(ByVal Bin As String) As Long
    Dim i As Long
    For i = 1 To Len(Bin)
        BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
    Next i
End Function

' 用途:将十六进制转化为二进......

阅读全文(22961) | 评论:7

非access数据库在vb中的编程及应用(2006-04-02 14:20:00)

摘要:visual basic有着强大的数据库存取能力,不仅能够直接支持ms access数据库,而且通过其内部安装的isam驱动程序使它能间接支持foxpro、dbase等外来数据库。本文不仅从vb数据库体系结构的角度探讨了vb对这些外来数据库的支持,还结合了一些实例具体阐述了使用数据库存取对象变量的方法实现这些外来数据库的新建、库结构修改、显示及其运行环境设置。

存取对象变量库结构

  在vb中,将非access数据库称为外来数据库。对于foxpro、dbase、paradox等外来数据库。虽然借助vb的datamanager能够对这些数据库进行new、open、design、delete等操作,但在应用程序的运行状态中并不能从底层真正实现这些功能。本文从使用数据库存取对象变量的方法出发,实现了非access格式数据库(以foxpro数据库为例)的建新库、拷贝数据库结构、动态调入等操作,阐述了从编程技巧上弥补vb对这些外来数据库支持不足的可行性。

一、vb数据库的体系结构具体的vb的数据库结构。

  vb数据库的核心结构是所谓的microsoft jet数据库引擎,jet引擎的作用就像是一块“面板”,在其上可以插入多种isam(indexed sequential access method,即索引顺序存取方法)数据驱动程序。jet引擎为access格式数据库提供了直接的内部(build-in)支持,这就是vb对access数据库具有丰富支持的真正原因。vb专业版中提供了foxpro、dbase(或xbase)、paradox、btrieve等数据库的isam驱动程序,这就使得vb能支持这些数据库格式。

二、使用非access数据库时的参数设置及配置文件的参数读取

  如果在vb的程序中使用了数据库的操作,将应用程序生成exe文件或打包生成安装程序后,则必须提供一个配置(.ini)文件,在ini文件中可以对不同类型的数据库进行设置。如果找不到这个ini文件,将会导致不能访问数据库。通常情况下,ini文件的文件名和应用程序的名称相同,所以如果没有指明,vb的程序会在windows子目录中去找和应用程序同名的ini文件。可以使用vb中的setdataaccessoptions语句来......

阅读全文(2351) | 评论:0

自己动手做一个数学函数作图器(2006-04-02 14:16:00)

摘要:自己动手做一个数学函数作图器

  学习中我们经常会遇到一些要求作图的题目,数学就是一个很好的例子,君不见,哪一个学生不是整天拿着一根尺子几只笔在画啊画的?要是能有一个作图的软件该有多好啊!虽然拿来主义是我们一向的作风,可是只顾拿来而从不动一下脑筋又有点儿说不过去,所以,今天的课题就是——用VB做一个数学函数作图器!

  我们先来了解一下VB的坐标系统,VB的坐标系统可分为“窗体的坐标系统”和“对象的坐标系统”两种,但是这两种坐标系统均是以屏幕的左上角为原点(0,0),这和我们平时所选取的以中心为原点显然很不相符,而且使用起来也很不方便。所以,我们要用VB提供的Scale来自定义坐标系,格式如: Picture1.Scale(-10,10)-(10,-10),意思就是把整个Picture1控件定义为一个20×20的区域用于绘图,以Picture1的中心为原点(0,0)。
有了上面的基础,我们就可以用Pset(画点)、Line(画线)等,轻轻松松地来画函数的图像了。

  启动VB,建立一标准EXE工程,再在窗口上如图所示地布置5个Command Button控件和1个PictureBox控件,输入以下的代码就OK了。


Const Pi = 3.1415926535 '定义圆周率
Dim a, wor
'定义用于在Picture1上的一个位置打印字符函数
Private Function PrintWord(X, Y, Word As String)
With Picture1
.CurrentX = X
.CurrentY = Y
.ForeColor = RGB(0, 0, 255)
End With
Picture1.Print Word
End Function
'定义画点函数
Private Function DrawDot(Px, Py, Color)
Picture1.PSet (Px, Py), Color
End Function
Sub XY() '建立直角坐标系
Picture1.DrawWidth = 1 '设置线条宽度
Picture1.Cls
'设定用户坐标系,坐标原点......

阅读全文(2782) | 评论:0

VB基础:认识VB的文件系统对象FSO(2006-04-02 13:40:00)

摘要: VB基础:认识VB的文件系统对象FSO
出处:CSDN
责任编辑:ljx [04-3-16 15:14] 作者:zhangking     在 VB 编程中经常需要和文件系统打交道,比如获取硬盘的剩余空间、判断文件夹或文件是否存在等。在VB 推出文件系统对象(File System Object)以前,完成这些功能需要调用 Windows API 函数或者使用一些比较复杂的过程来实现,使编程复杂、可靠性差又容易出错。使用 Windows 提供的的文件系统对象,一切变得简单多了。以下笔者举出一些编程中比较常用的例子,以函数或过程的形式提供给大家,读者可在编程中直接使用,也可以改进后实现更为强大的功能。

  要应用 FSO 对象,须要引用一个名为 Scripting 的类型库,方法是,执行 VB6.0 的菜单项“工程/引用”,添加引用列表框中的“Microsoft Scripting Runtime”一项。然后我们在“对象浏览器”中就可以看到 Scripting 类型库下的众多对象及其方法、属性。

  1、判断光驱的盘符:
  Function GetCDROM() ' 返回光驱的盘符(字母)
  Dim Fso As New FileSystemObject '创建 FSO 对象的一个实例
  Dim FsoDrive As Drive, FsoDrives As Drives '定义驱动器、驱动器集合对象
  Set FsoDrives = Fso.Drives
  For Each FsoDrive In FsoDrives '遍历所有可用的驱动器
  If FsoDrive.DriveType = CDRom Then '如果驱动器的类型为 CDrom
  GetCDROM = FsoDrive.DriveLetter '输出其盘符
  Else
  GetCDROM = ""
  End If
  Next
  Set Fso = Not......

阅读全文(2866) | 评论:0

一个利用随机数加密字串的算法(2006-04-02 13:29:00)

摘要:首先这个算法没什么特殊之处,只是怕以后找不到,所以放到了这上面.   每个字节加密后有6种结果(占两个字节,如果需要大于6种的话,就要多用1个字节,即占3 个字节),也就是说如果字串占n个字节的话,可能产生的结果为6的n次方个,这个算法破解的强度不大,大家可以完善一下:   '窗体上一个按钮,两个listbox
  Option Explicit   Private Sub Command1_Click()
    Dim i As Long
    Dim s As String
    For i = 1 To 100
        s = encode("这是一个测试 hello world")
        List1.AddItem s
        s = decode(s)
        List2.AddItem s
    Next
  End Sub
  Private Function encode(ByVal s As String) As String '加密
    If Len(s) = 0 Then Exit Function
    Dim buff() As Byte
    buff = StrConv(s, vbFromUnicode)
    Dim i As Long
    Dim j As Byte
    Dim k As Byte, m As Byte
    Dim mstr As String......

阅读全文(2132) | 评论:0

另类快速导出数据库为EXCEL文档(2006-04-02 13:28:00)

摘要:在网上的导出为 EXCEL文档的方法大概是这样的
  
  Dim i As Integer, j As Integer
  Dim myexcel As New Excel.Application
  Dim mybook As New Excel.Workbook
  Dim mysheet As New Excel.Worksheet
  Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK
  Set mysheet = mybook.Worksheets.Add '添加一个新的SHEET
  ' For i = 1 To myres.RecordCount
  ' For j = 1 To myres.Fields.Count
  ' mysheet.Cells(i, j) = myres.Fields.Item(j - 1).Value
  ' If (i * j) Mod 500 = 0 Then
  ' DoEvents
  ' End If
  ' Next j
  ' myres.MoveNext
  
  ' Next i
   myexcel.Visible = True
   mybook.SaveAs (m_ExcelName) '保存文件
  
  

  这中方法没什么错误,但是如果数据量很大的话,麻烦就来了,出现程序长时间不响应
  
  关键是循环,下给出我的代码
  
  假设定义的记录名为myres
  
  Dim myexcel As New Excel.Application
  Dim mybook As New Excel.Workbook
  Dim mysheet As New Excel.Worksheet
  Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK
  Set mysheet = mybook.Worksheets.Add '添加一个新的SHEET
   myexcel.visible=true
  

阅读全文(1888) | 评论:0

vb精彩教程:数据异步加载(2006-04-02 13:26:00)

摘要:异步加载是ADO的一种数据加载方式,主要由记录集的options参数来控制!
  
  ADO210.CHM中的格式:
  recordset.Open Source, ActiveConnection, CursorType, LockType, Options
  
  Options
  可选。Long 值,指示提供者计算 Source 参数的方式(如果该参数表示除 Command 对象之外的某些内容),或者指示 Recordset 应该从以前保存过的文件中恢复。可以是一个或多个 CommandTypeEnum 或 ExecuteOptionEnum 值,这些值可以用位 AND 操作符组合。
  
  ExecuteOptionEnum
  指定提供者执行命令的方式。
  
  常量 值 说明
  adAsyncExecute 0x10 指示命令将异步执行。
  该值不能与 CommandTypeEnum 的值 adCmdTableDirect 组合。
  
  adAsyncFetch 0x20 指示在 CacheSize 属性中指定的初始数量以后的剩余行将被异步检索。
  adAsyncFetchNonBlocking 0x40 指示检索时主线程从不会阻塞。如果未检索到所请求的行,当前行将自行移动到文件结尾。
  如果从包含持久存储 Recordset 的 Stream 中打开 Recordset,那么 adAsyncFetchNonBlocking 将不起作用;该操作将同步进行并发生阻塞。
  
  当 adCmdTableDirect 选项被用于打开 Recordset 时,adAsynchFetchNonBlocking 不起作用。

  adExecuteNoRecords 0x80 指示命令文本是不返回行的命令或存储过程(例如,仅插入数据的命令)。如果检索到任何行,它们将被放弃且不返回。
    adExecuteNoRecords 只能作为可选参数传递给 Command 或 Connection 的 Execute 方法。
  
  adExecuteStream 0x400 指示命令执......

阅读全文(1819) | 评论:0

用VB制作一个简单的MP3播放器(2006-04-02 13:24:00)

摘要: 用VB制作一个简单的MP3播放器
出处:CSDN
责任编辑:ljx [04-6-18 10:06] 作者:yzy912[收藏]   marqueesHeight=18; stopscroll=false; icefable1.scrollTop=0; with(icefable1){ style.width=0; style.height=marqueesHeight; style.overflowX="visible"; style.overflowY="hidden"; noWrap=true; onmouseover=new Function("stopscroll=true"); onmouseout=new Function("stopscroll=false"); } preTop=0; currentTop=0; stoptime=0; function init_srolltext(){ icefable2.innerHTML=""; icefable2.innerHTML+=icefable1.innerHTML; icefable1.innerHTML=icefable2.innerHTML+icefable2.innerHTML; setInterval("scrollUp()",50); } function scrollUp(){ if(stopscroll==true) return; currentTop+=1; if(currentTop==19) { stoptime+=1; currentTop-=1; if(stoptime==50) { currentTop=0; stoptime=0; } } else { preTop=icefable1.scrollTop; icefable1.scrollTop+=1; if(preTop==icefable1.scrollTop){ icefable1.scroll......

阅读全文(2416) | 评论:0