
VB6
lyserver
蜀国曾闻子规啼,宣城还见杜鹃花,一叫一回肠一断,三春三月忆三巴。
展开
-
用数组方式快速导出MSFlexGrid表格数据到Excel表格中
本来从MSFlexGrid或MSHFlexGrid导出数据到Excel中,是一个非常简单的问题,但论坛里还是经常有人问如何导出,有的虽然知道用单元格赋值方式循环导出,但速度太慢,因此写了一个通用的数据导出函数,由于以数组方式一次性赋值,运度速度得到了极大提升,需要的朋友可以参照以下代码,稍作修改,就可以写出用于其它表格控件向Excel导出数据的功能了。原创 2010-06-24 14:05:00 · 4580 阅读 · 1 评论 -
由DoEvents引发代码重入造成的计算错误
这是一个很常见却也很经典的DoEvents引起的计算错误。我们用VB写程序时,有时为了能够在进行计算的过程中,同时让界面输出及鼠标和键盘的输入动作不致失去响应,往往会在循环过程中使用DoEvents释放CPU资源,以加快系统对无效区的绘制和对鼠标及键盘的处理,以达到良好的人机交流效果。但是,如果不当使用DoEvents,往往会给我们带来一些麻烦。先看一个代码:Private Decla原创 2009-05-16 17:41:00 · 1826 阅读 · 1 评论 -
用VB编写的一个可在屏幕上移动的十字架
前几天一位朋友问如何绘制一个可在屏幕上移动的十字架,俺编写了一个,后来又有朋友问到这个问题,故把代码贴了出来,供大家指正:* ****************************************** ** 程序说明:一个可在屏幕上拖动的十字架 ** 作者:lyserver ** ****原创 2009-04-22 17:10:00 · 2881 阅读 · 0 评论 -
VB如何快带比较两幅位图
虽然VB可以使用Point函数或API函数GetPiexl获得像素颜色,但速度较慢,同时,优快云论坛里有几个朋友提出了图像比较的问题,为此,写了以下代码,希望能给有此需要的朋友一些启发:Option Explicit* ************************************************************** ** 程序名称:for原创 2009-04-16 11:08:00 · 3958 阅读 · 0 评论 -
在VB中如何使IE窗口最大化
众所周知,IE窗口打开时是否最大化是由几个方面的因素造成的,比如最后一个IE窗口的最大化状态,或者注册表中的设置项。但有的时候,由于用户的IE窗口打开时并没有处于最大化状态,而程序设计人员又想使其处于最大化状态,一般大家都会想到一个办法,那就是Shell命令,因为该命令有一个参数值为vbMaximizedFocus,可以让被Shell命令运行的程序的窗口处于最大化状态,可惜的是,这个办法原创 2009-10-06 12:06:00 · 7842 阅读 · 0 评论 -
设置和获得VB进程返回值
有时,我们需要设置和获得某个进程结束时的返回值,然后VB并没有C语言中Exit之类的函数,因此我们需要借助API来实现,思路如下:原创 2010-12-22 10:07:00 · 4021 阅读 · 10 评论 -
再谈用VB无窗口透明Usercontrol编写透明浮动按钮
去年曾写过一篇博文,名称叫《用VB无窗口透明Usercontrol编写透明浮动按钮》,该文有一个观点是错误的,即透明无窗口Usercontrol不支持设计时点选。其实,通过在UserControl_HitTest过程里加入HitResult = vbHitResultHit语句,就可以实现设计时的点选了,为此,修改代码如下:* ****************************原创 2009-09-19 20:55:00 · 3408 阅读 · 5 评论 -
在VB中如何直接使用CLSID生成接口实例
在VB中生成接口实例的方法很简单,对于没有UI的接口,直接声明或调用CreateObject函数就可以了。但有的时侯由于种种原因,知道接口的CLSID而不知接口的ProgID,甚至某些系统接口根本就没有ProgID,这时就要用到CoCreateInstance来生成接口实例了,具体代码如下:* ********************************************原创 2009-07-14 00:50:00 · 3512 阅读 · 2 评论 -
如何直接显示内存中的二进制图像数据
有时在进行网络程序设计时,我们希望客户端接收到服务器传来的图像文件的二进制数组的,能够直接显示,而不是通过保存到临时文件后显示,其实通过COM的IPicture接口,在VB里非常容易做到,比如以下代码:Option Explicit* ******************************************************* ** 模块名称:frm原创 2009-06-14 13:51:00 · 3440 阅读 · 3 评论 -
也谈根据IE窗口句柄hWnd获得IWebBrowser接口
这几天不知乍搞的,晚上总睡不着。反正闲着没事,加之几天没更新博客了,所以写了这段代码。 关于如何根据IE窗口句柄hWnd获得IWebBrowser接口,网络上代码很多,大多是使用了MSAA里的一个函数GetObjectFromLResult进行获取,一方面,许多朋友尤其是VB爱好者对MSAA技术并不了解,另一方面,用此方法非常繁琐。我的偶象之一超级绿豆甚至在2005年的时侯使用汇原创 2009-05-14 01:05:00 · 3006 阅读 · 10 评论 -
VB多用户Winsock控件通讯实例
有一位优快云的朋友不明白如何利用Winsock控件进行多用户之间的网络通讯,于是俺写了一个,希望对有此方面需要的朋友有所帮助! 本代码可以同时支持多个客户端的连接、识别和通讯,主要思路是在连接成功后,由客户主动发送一个用户名,服务器端以此用户名对客户进行区分,为防止同名客户,服务器端在用户名后加了一个后缀。由于写得匆忙,难免有失误,恳请指正! 服务器代码如下:Op原创 2009-04-22 12:43:00 · 8318 阅读 · 5 评论 -
关于VB命名的一些经验总结
关于VB程序设计中的命名,对于初学者来说,是一件比较头疼的事,就算一些VB老手,也偶尔会为如何命名而烦恼,目前流行的命名法多种多样,如匈牙利命名法、骆驼命名法、Pascal命名法以及GNU C常用的下划线命名法等,各种命名法都各有利弊,如何更好地扬长避短,将各种命名法的优点纳入己用,进而形成一个团队的命名风格,对于项目协作开发来说,无疑会起到一些事半功倍的效果。为此,我将数年VB编程中原创 2008-10-13 19:12:00 · 2599 阅读 · 3 评论 -
使用ADO实现数组排序
使用ADO实现数组排序原创 2011-03-25 13:57:00 · 1651 阅读 · 2 评论 -
利用ADO STREAM实现BASE64编码和解码
利用ADO STREAM实现BASE64编码和解码原创 2011-01-07 11:06:00 · 3779 阅读 · 2 评论 -
在VB中将类对象序列化为字符串
有时候,我们需要把一个类对象序列化成字符串保存起来,或者通过网络传输给另一台机器,然后再异步或异地克隆出原来的类对象,比如ACCESS没有服务器端,而我们加它加了一个服务器代理程序,代理程序负责把查询出来的记录集传输给客户端,这时,我们可以遍历记录集内容,生成一个字符串传输给客户端,然后在客户端再加载记录集内容。其实,利用VB内置的类对象PropertyBag,我们还可以直接序列化记录集对象,传输给客户端后,客户端直接复制出该对象就可行,比遍历记录集的效率提高了N倍。原创 2010-08-03 10:41:00 · 4375 阅读 · 6 评论 -
谨慎使用IsMissing函数
在VB6中提供了一个很好用的函数叫IsMissing,可以用来判断用户是否对缺省参数赋值,比如有以下一个函数体: Public Property Get Item(Optional ByRef Index As Integer, Optional ByRef Name As String) As TDMAttachment Dim i As Long Dim原创 2009-11-15 15:25:00 · 4454 阅读 · 1 评论 -
获得VB类成员函数指针
好久没有更新博客了,先放上一个获得类成员函数指针的代码,具体解释我会在《深入了解VB变量与指针》系列文章加以说明。可能以后不会再往VB上使劲了,但我会花一段时间总结经验与大家共享。 Option Explicit* **************************************************** ** 函数名称:GetClassProcAdd原创 2009-05-29 20:30:00 · 3554 阅读 · 2 评论 -
枚举进程
写了一个进程枚举代码,未实现ring0级的进程枚举。Option ExplicitPrivate Declare Function EnumProcesses Lib "psapi.dll" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As LongPrivate Declare Function GetM原创 2009-06-30 12:32:00 · 1039 阅读 · 1 评论 -
用VB实现带图片的XP风格的按钮控件
虽然在VB里实现XP风格很简单,但是要使用XP风格同时又让按钮显示图片,则实现起来要麻烦一些,为此,我写了一个控件来实现前述功能,同时让读者可以从中了解XP主题界面的绘制过程。 使用办法很简单,在VB里新建一个工程,然后添加一个控件模块,粘贴以下代码,再将控件放置到窗口即可,当然,可别忘设置图片和文字属性,具体代码如下:* *************************原创 2009-12-31 19:27:00 · 5426 阅读 · 6 评论 -
用VB实现Photoshop浮动工具栏
一般来说,用子窗口实现浮动工具栏是一个不错的选择,但Photoshop真的很变态,它的工具栏窗口居然可以移出容器窗口的客户区,那么它是如何实现的呢?总结起来,Photoshop浮动工具栏具有以下两个特点: 一、像一般的子窗口一样,点击工具栏时不改变容器窗口的活动状态,且工具栏窗口终始位于容器窗口的上层。 二、但与一般的子窗口不同的是,工具栏窗口不受容器窗口客户区的限制,原创 2009-07-14 15:41:00 · 3219 阅读 · 7 评论 -
用VB使用花式画笔实现流动的选取框
创建一个选取框并不难,可以用DrawFocusRect、FrameRgn等API来实现,但要实现一个类似于PS的流动的选取框,相对来说不是一件简单的事。有的朋友干脆使用了若干位图来模拟,但这样做有一个缺点,即二次选择时,由于FrameRgn对NotXor绘图模式无效,从而导致无法轻易地擦除选取框。当然,可以事先将窗口画面保存在内存中,在需要擦除选取框时,再恢复内存中的画面。有没有比这更方便原创 2009-05-02 17:41:00 · 1794 阅读 · 0 评论 -
转贴:利用VB远线程注入技术实现键盘拦截的例子(无DLL)
这是一个从网上搜集到的VB代码,用EXE方式实现了远程注入,不过在反病毒软件的保护下,有可能导致注入失败。转贴这个代码,仅供大家学习和参考。 一、窗口代码:Option ExplicitPrivate Sub cmdLock_Click() If LockKeyboard(True) Then cmdLock.Enabled = False转载 2009-05-01 08:47:00 · 1726 阅读 · 2 评论 -
VB直接保存和显示ACCESS数据库中的图像数据
我见过许多代码,在从ACCESS数据库读取图像数据后,往往需要借助一个临时文件进行转换才能显示,其实借助API,完全可以直接显示,而不需要临时文件,此外,大家还可以使用OleCreatePictureIndirect函数转图像数据转换成标准的IPicture接口,以实现VB图像显示的自动性和持续性,具体代码如下: * ***************************原创 2008-12-28 02:36:00 · 7895 阅读 · 2 评论 -
使用API进行FTP文件上传和下载
又有几天没发新贴了,刚才有点闲瑕,便随手写了一个使用FTP上传和下载文件的类。 类代码如下:Option Explicit* ******************************************************* ** 模块名称:FTP.cls* 模块功能:使用wininet API进行FTP操作* 作者:原创 2009-06-12 00:31:00 · 4909 阅读 · 12 评论 -
深入了解VB中的变量和指针(一)
前言:我们都知道,在VB中,可以使用VarPtr、StrPtr和ObjPtr来获得变量的地址,它们之间有什么区别和联系呢?许多资深的VB人员告诉我们,最好将API函数声明中ByVal lpstr As String改为ByVal lpStr As Long,这又是为什么呢?如何正确地利用这些函数向API传递指针呢? 首先,我们来了解一下VB中的变量及其定义。 也许你会说我多此一原创 2009-05-14 19:56:00 · 3438 阅读 · 2 评论 -
VB快速查找大型文件中包含的字符串
关于查找大型文件中包含的字符串,一般都把文件内容读入到内存,然后在内存里进行比较,却不知这种办法有一个致命的弱点,那就是由于大量的内存申请和释放导致的内存颠簸,会使系统性能下降,严重影响了查找的速度。特别是在递归中对多个文件进行查找时,这个问题会更加突出,有时甚至会导致VB程序挂掉。为避免这种情况,同时加快大型文件中字符串的查找速度,俺基于内存影射文件和VB模拟指针技术,编写了一个通用字符原创 2009-04-24 11:23:00 · 11153 阅读 · 12 评论 -
用VB无窗口透明Usercontrol编写透明浮动按钮
使用无窗口透明控件,好处是控件不是从窗口类继承而来的,可以节省一些内存资源,难点是鼠标控制和坐标计算,缺点是无法直接响应键盘事件。而且,需要注意的是,在Paint事件里,坐标是从(0,0)开始的,而在其它地方,坐标是相对于容器的。缺点是设计时,无法用鼠标点选控件(只能用键盘移动),微软公司也在MSDN里说了这是一个BUG,但至今未解决。 好了,废话俺不说了,打开VB6,新建原创 2008-10-24 22:50:00 · 3413 阅读 · 0 评论 -
GetTickCount函数计时置0的解决办法
使用API函数GetTickCount来计时非常方便,可惜它有一个致命的缺点,就是在计算机运行49.71天后,会自动置0,从而导致计时错误,因某些服务器应用程序需要长时间不开机运行,GetTickCount函数显然满足不了要求。原创 2010-07-07 15:23:00 · 4203 阅读 · 1 评论 -
由ActiveX DLL中的全局变量想到的...
在使用VB6编写类或控件时,有一个不如意的地方,那就是无法在属性或函数中返回结构体。一般情况下,我们可以使用一个新的类来模拟结构体,比如有一个表格类,类名为clsGrid,它包含一个行属性Rows,而Rows又包含Height等成员属性,此时,我们需要定义一个类clsRows,代码大致如下: 类clsGrid: Dim m_objRows As clsRows Pri原创 2009-12-15 18:24:00 · 1968 阅读 · 2 评论 -
一个通用的VB磁盘文件搜索引擎类
磁盘文件搜索是一件比较简单的事情,但很多代码写得非常繁琐,而且不支持多重路径和文件通配符,为此,我用VB写了一个通用的磁盘文件搜索引擎类,类代码如下:Option Explicit* ************************************************** ** 程序名称:FileFindEngine.bas* 程序功能:磁盘文原创 2009-07-31 13:38:00 · 5875 阅读 · 22 评论 -
用VB如何编写无窗口系统热键程序
用VB如何编写系统热键程序,网上有很多现成代码,但大都使用了窗口,即使这个窗口根本没有用。其实,如果只是要在某个热键中处理某件事件,根本不需要创建窗口,也无需借助窗口子类化。本文以获得当前IE页面中Body里的HTML文档为例,具体演示了如何编写一个无窗口的系统热键程序,需要说明的是,由于MsgBox函数中字符串的长度限制,可能会显示HTML文档不完整。具体代码如下:Option Ex原创 2009-07-11 23:02:00 · 4761 阅读 · 3 评论 -
如何真正实现无提示保存Excel文档
要想取消Excel文档的保存提示,从而实现文档的自动保存,应该从两个方面加以考虑,一是设置ThisWorkBook.Saved属性,当此属性为True时,Excel会认为该文档已被保存过,因此不会弹出保存对话框,二另存时,如果目标文件已存在,则应先删除掉目标文件,这样Excel就不会弹出提示文件已存在的对话框,具体代码如下:Private Sub Workbook_BeforeClos原创 2009-07-06 18:40:00 · 2688 阅读 · 0 评论 -
在VB中如何让线程或进程在指定的CPU上运行
Option ExplicitPrivate Declare Function WTSEnumerateProcesses Lib "wtsapi32.dll" Alias "WTSEnumerateProcessesA" (ByVal hServer As Long, ByVal Reserved As Long, ByVal Version As Long, ByRef ppProce转载 2009-07-05 12:00:00 · 2088 阅读 · 2 评论 -
用WINSOCK API实现同步阻塞方式的网络通讯
在VB中进行网络通讯时,一般都爱使用Winsock控件,但此控件有两点缺点,一是需要一个窗口(当然也可以修改vbp文件,实现无窗口加载Winsock控件),二是通讯方式为异步非阻塞的,对于某些基于应答式的协议来说,比如HTTP、POP3、SMPT等,使用阻塞方式往往要方便得多,而且代码流程也清晰得多,增强了可读性,更不用说灵活性了(比如超时设置、缓冲区设置等)。虽然网络上有一些使用API原创 2009-11-15 15:05:00 · 3971 阅读 · 4 评论 -
如何用VB实现Excel文件的自动合并
闲来无事,编写了一个简单而实用的合并Excel文件的函数,能够将多个XLS文件中指定数量的工作表自动合并到一个XLS文件里。当然,如果只是数据合并,则使用ADO就可以实现,但如果要保留表格格式,则恐怕只能使用俺的方法了。 一、函数代码:Option Explicit* ***************************************************原创 2009-05-14 02:18:00 · 8456 阅读 · 5 评论 -
一个用VB实现的对任意字符串进行排列并排序的函数
说实在的,原本没想到自己要写这个函数,是在看优快云论坛里的一个贴子时,发现很多回复所给出的代码都非常繁杂。由于我水平有限,不习惯看过于复杂的代码,于是便想能不能有一个简短的。用GOOGLE搜索了一下,结果更头痛,最好的算法也是就了递归,却不知递归的缺点,当需要排列的字符串超过5个时,容易造成栈溢出,自然实现不了对任意字符串进行排列并排序的目的,无奈之下,便硬着头皮写了一个通用函数,代码如原创 2008-10-01 08:17:00 · 7787 阅读 · 0 评论 -
Forms对象一个隐含的方法
今天发现了Forms的一个隐含的方法Add,实现了像动态加载控件一样根据窗口名称来动态加载窗口。原创 2010-06-22 16:22:00 · 2130 阅读 · 1 评论 -
用VB实现两幅图片半透明叠加
代码很简单,就不解释了,演示VB如何实现两幅图片半透明叠加的效果。Option ExplicitPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function DeleteDC Lib "gdi32" (ByVal hdc原创 2009-07-25 17:04:00 · 5125 阅读 · 0 评论 -
一个可以改变箭头方向的气泡提示
用VB实现一个气泡提示并不难,即使是实现在任意地方显示的气泡提示。难的是,如果是采用TTF_TRACK方式允许在任意地方显示时,气泡的箭头总是向上,而且还不能自动消失。为此,我写了一个增强的气泡提示类,希望对有此需要的朋友一些参考。一、新建一个类,类名为clsTip,类代码如下:Option Explicit* ****************************原创 2009-05-31 01:40:00 · 2651 阅读 · 3 评论 -
VB判断指定的WORD文档是否已被打开
判断指定的WORD文档是否被打开的函数代码如下: Function WordDocIsOpen(ByVal strDocName As String) As Boolean Dim objWordApp As Object Dim objWordDoc As Object On Error Resume Next 此句不能少原创 2009-04-24 11:49:00 · 5307 阅读 · 1 评论