登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

miaozk2006

点滴积累与收藏:关于技术,关于生活

 
 
 

日志

 
 

Visual Basic编程常见问题及解答(3)  

2010-12-18 22:44:10|  分类: 编程-VB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

让您的文字框有 Undo / Redo 的功能
  很多软件都有提供 Undo / Redo 的功能,Microsoft 的产品都可以提供多次 Undo 反悔,功能更强大!
  在 VB 的程序中,我们也可以提供这样的功能!不过只能 Undo / Redo 一次

’在声明区中加入以下声明: ’32位元
’Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
’Const EM_UNDO = &HC7
’16位元
Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
Const WM_USER = &H400
Const EM_UNDO = WM_USER + 23
’在程序中使用的方式如下: ( Undo Text1 中的输入 )
Private Sub Command1_Click()
 Dim UndoResult As Long
 UndoResult = SendMessage(Text1.hwnd, EM_UNDO, 0, 0)
 ’传回值 UndoResult = -1 表示 Undo 不成功
End Sub
’使用以上的方法,第一次是 Undo ,第二次就等于是 Redo

  如何得到某年每个月的第一天是星期几
Private Sub Command1_Click()
Dim i As Integer, A As Integer, B As Integer, C As String
A = InputBox("请输入年份", "某年每个月的第一天是星期几")
Form1.Cls
For i = 1 To 12
C = A & "-" & i & "-1"
B = Weekday(C)
Select Case B
Case vbSunday
Print A & "年" & i & "月1日是 星期日"
Case vbMonday
Print A & "年" & i & "月1日是 星期一"
Case vbTuesday
Print A & "年" & i & "月1日是 星期二"
Case vbWednesday
Print A & "年" & i & "月1日是 星期三"
Case vbThursday
Print A & "年" & i & "月1日是 星期四"
Case vbFriday
Print A & "年" & i & "月1日是 星期五"
Case vbSaturday
Print A & "年" & i & "月1日是 星期六"
End Select
Next i
End Sub

  如何隐藏及显示任务栏?
  有时候,我们希望在我们的程序执行中,将任务栏隐藏,让桌面变得比较清爽,等到我们的程序执行完毕之后,再将任务栏显示出来,这时就要用到 SetWindowPos 这个 API 了!
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Const SWP_HIDEWINDOW = &H80 ’隐藏视窗
Const SWP_SHOWWINDOW = &H40 ’显示视窗
’在程序中若要隐藏任务栏
Private Sub Command1_Click()
 Dim Thwnd As Long
 Thwnd = FindWindow("Shell_traywnd", "")
 Call SetWindowPos(Thwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
End Sub
’在程序中若要再显示任务栏
Private Sub Command2_Click()
 Dim Thwnd As Long
 Thwnd = FindWindow("Shell_traywnd", "")
 Call SetWindowPos(Thwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)
End Sub


  模拟 Windows 的资源回收站!
  您现在将屏幕上所有的视窗全部缩小,找到资源回收站,按鼠标右键,选择【属性】,便会出现【资源回收站】的属性问话框。
  其中有几个选项如下:
  1、不要将文件移到资源回收站,删除时立即移除文件。
  2、显示删除确认对话框?
  根据以上之状况,文件之删除有三种情形:
  1、删除文件,出现确认对话框,文件移到资源回收站。
  2、删除文件,出现确认对话框,文件不移到资源回收站。
  3、删除文件,不出现确认对话框,文件也不移到资源回收站。
  模拟程序如下:

’在模组的声明区中加入以下声明:
Public Type SHFILEOPSTRUCT
 hwnd As Long
 wFunc As Long
 pFrom As String
 pTo As String
 fFlags As Integer
 fAnyOperationsAborted As Long
 hNameMappings As Long
 lpszProgressTitle As Long
End Type
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Public Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40 ’可以还原
Public Const FOF_NOCONFIRMATION = &H10 ’不出现确认对话框
Public Const FOF_SILENT = &H4
’在程序中之使用方法如下:
’以下之例子会出现确认对话框,文件也会移到资源回收站。
Private Sub Command1_Click()
 Dim SHop As SHFILEOPSTRUCT
 Dim strFile As String ’要删除的文件(含全路径)
 strFile = "c:\test.txt"
 With SHop
  .wFunc = FO_DELETE
  .pFrom = strFile
  .fFlags = FOF_ALLOWUNDO
 End With
 SHFileOperation SHop
End Sub
’若要调整,只要更改 fFlags 之值即可,如下:
.fFlags = FOF_SILENT ’删除文件,出现确认对话框,文件不移到资源回收站。
.fFlags = FOF_NOCONFIRMATION ’删除文件,不出现确认对话框,文件也不移到资源回收站。

  如何得到文件路径的文件名
Dim sFilePath As String
sFilePath = "C:\Windows\System\sytem.dll"
Dim lGetLen As Long, lNum As Long
Dim sGetFile As String, sTemp As String
lGetLen = Len(sFilePath) ’得到文件路径长度
sTemp = lGetLen
For lNum = 1 To lGetLen
 If Left(sGetFile, 1) = "\" Then Exit For
 sGetFile = Mid(sFilePath, sTemp, lNum)
 sTemp = sTemp - 1
Next lNum
sGetFile = Mid(sGetFile, 2) ’得到文件名
MsgBox sGetFile
如何防止使用者按下 CTRL + ALT + DEL
  有些时候,我们的应用程序执行时,不希望使用者按下 CTRL + ALT + DEL 来异常结束程序或关机,这时候我们可以在启动程序时,将 CTRL + ALT + DEL 功能键之功能取消,然后在结束程序之前,再从新恢复 CTRL + ALT + DEL 之功能。
  在模组声明区中加入以下声明及模组:
Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Public Const SPI_SCREENSAVERRUNNING = 97
Public Sub Disable_Ctrl_Alt_Del()
 ’让 CTRL+ALT+DEL 失效
 Dim AyW As Integer
 Dim TurFls As Boolean
 AwY = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, TurFls, 0)
End Sub
Public Sub Enable_Ctrl_Alt_Del()
 ’让 CTRL+ALT+DEL 恢复功能
 Dim AwY As Integer
 Dim TurFls As Boolean
 AwY = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, TurFls, 0)
End Sub
’实际使用时,在 Form 中加入以下程序码:
Private Sub Form_Load()
 Disable_Ctrl_Alt_Del
End Sub
Private Sub Form_Unload(Cancel As Integer)
 Enable_Ctrl_Alt_Del
End Sub

  如何取得文件大小?
  VB6 提供了一个新的物件模型,叫做 FSO (File System Object) 物件模型,运用它,我们可以很方便的处理磁盘、资料夹和文件的一些动作。
  FSO 物件模型含有好几个物件,其中有一个 File 物件是用来求得文件的相关资讯,在目前这个主题,我们就可以使用 File 物件!它有一个属性是 Size,对文件来说就是指文件的大小 (单位为位元组)。 (注一)
  虽然使用 File 物件的 Size 属性就可以求得文件的大小,但是它有以下二个缺点:
  1、只能用于 VB6 以后的版本。
  2、它不是 VB6 内定的功能,必须另外引用 Scrrun.dll (Microsoft Scripting Runtime) 才可以!
  以下的二个方法就可以使用在所有的 VB 版本中 (含 VB6),而且是 VB 内定的功能:
  1、FileLen 函数:返回一个 Long,代表一个文件的长度,单位是位元组。
  语法:FileLen(pathname) ’ pathname 是全路径之文件名称
  适用:取得一个尚未开启的文件的长度大小 (注二)
  2、LOF 函数:返回一个 Long ,单位为位元组,用来代表由 Open 陈述式所开启的文件之大小。
  语法:LOF(filenumber) ’ filenumber 是一个文件代码
  适用:取得一个已开启的文件的长度大小
  注一:File 物件的 Size 属性除了可以求得一个文件的大小,也可以用来取得整个目录的所有文件大小!
  注二:使用 FileLen 函数时,如果所指定的文件正在开启中,则所返回的值是这个文件在开启前的大小。
  如何移除或更改桌面背景的底色图案 (Wallpaper)?
  SystemParametersInfo 这个 API 可以设定许多 Windows 系统的功能参数,而其中一个参数就是桌面底图!通常一般的使用者会透过控制面板中的【显示器】来设定桌面底图。
  在底下的范例中,我们使用 SPI_SETDESKWALLPAPER 这个参数及图片文件名称来设定新的桌面底图,同时使用 SPIF_SENDWININICHANGE 来通知各个视窗这个改变。
’在表单的声明区中加入以下声明及常数:
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As String, ByVal fuWinIni As Long) As Long
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2
’在表单上加入一个 CommandButton (Command1) 来移除桌面底图,程序码如下:
Private Sub Command1_Click()
 Dim X As Long
 X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, "(None)", SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
 MsgBox "桌面底图 (Wallpaper) 已经被移除"
End Sub
’在表单上加入另一个 CommandButton (Command2) 来更改桌面底图,程序码如下:
Private Sub Command2_Click()
 Dim FileName As String
 Dim X As Long
 FileName = "c:\windows\test.bmp"
 X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
 MsgBox "桌面底图 (Wallpaper) 已经被更改"
End Sub

  一个快速注册 DLL 及 OCX 的方法
  有时候我们在 VB 中要引用某一个 DLL 或 OCX 时,会出现文件未注册的讯息,这时,我们可以使用人工注册的方法,也就是直接在命令列中使用 regsvr32.exe 来做,做法如下:
  文件注册:C:\Windows\System\Regsvr32.exe C:\Windows\System\Test.ocx
  取消注册:C:\Windows\System\Regsvr32.exe /u C:\Windows\System\Test.ocx
  这些动作我们也可以直接写到程序中,使用 Shell 来执行,但是我现在要说的,都不是上面提到的方法!
  注意看罗!方法如下:
  1、在资源管理器中找到 C:\Windows\System\Regsvr32.exe 并【复制】 ( 按鼠标右键选复制 )
  2、将目录移到 C:\Windows\SendTo 后,执行【贴上快捷方式】 ( 按鼠标右键选贴上快捷方式 )
  3、将快捷方式名称改成【REGISTER】
  4、OK
  现在,如果您想替某一个文件做注册动作,例如:C:\Windows\System\Test.ocx,您只要打开资源管理器,找到 C:\Windows\System\Test.ocx,按鼠标右键选【传送到】【REGISTER】即可完成注册动作了!
  注:有一个地方要注意的是,Regsvr32.exe 只能注册 32 位的文件!如果要用它来注册 16 位的文件,会有错误讯息产生。
  如何用TextBox打开和保存文件
  作为轻量级的控件,TextBox控件使用率很高,但相关的资料极少谈及如何用TextBox控件打开和保存文件,大都采用回避的态度,对VB初学者带来很多不便。笔者近日为友人做一个英文朗读软件,按友人的要求,软件要能象MS的记事本那样能打开和保存文档。其实实现方法并不复杂,现将心得写出来,希望对大家有帮助。如果您有更好的方法,请来信:handanfang@163.net。
’新建标准EXE,加入一个TextBox控件,一个公共对话框,两个菜单。
’打开
Private Sub mnuOpen_Click()
 CommonDialog1.Filter = "文档文件(*.txt)|*.txt|所有文件(*.*)|*.*"
 CommonDialog1.ShowOpen
 Open CommonDialog1.FileName For Input As #1
 Text1.Text = StrConv(InputB$(LOF(1), 1), vbUnicode)
 Close #1
End Sub
’保存
Private Sub mnuSave_Click()
 On Error Resume Next
 CommonDialog1.Filter ="文档文件(*.txt)|*.txt|所有文件(*.*)|*.*"
 CommonDialog1.ShowSave
 Open CommonDialog1.FileName For Output As #1
 Print #1, Text1.Text
 Close 1
End Sub

  TextBox只支持打开64K以下的文件,建议最好设置出错处理。以上程序在PWin98、VB6.0下调试通过。
  如何判断目前文件资源管理器中,文件名称之扩展文件名是显示或隐藏?
  由于我在集团性的资讯处工作,所负责的公司系统有的是属于外点,例如润泰建设有个单位是行销业务处,他们的工作是卖公司盖的房子,所以他们的业务人员平常都是待在各工地的接待中心,我替他们开发的销售系统在工地的部份是属于单机作业的,使用 Access 资料库,每一个星期资料回传总公司一次。
  业务人员由于流动性大,不太了解系统,有时候,系统出了问题,业务人员又搞不清楚状况,于是我会要求他们将资料库 sale.mdb 回传公司,结果,常闹笑话,原来他们回传公司的,常常不是 sale.ldb 就是 sale.exe,为什么呢? 原因很简单,因为他们的文件资源管理器中,设定了将扩展文件名隐藏起来,结果只看到三个不同图示的 sale 文件 (分别是 Sale.mdb、Sale.ldb、Sale.exe),不太会操作的业务人员根本分不清楚那一个图示的 sale 文件才是资料库文件案!
  我们在 VB 的程序中要如何判断,目前文件资源管理器中的设定是否显示扩展文件名呢?
Private Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer
Private Function HasExtension(sFileName As String) As Long
 Dim sTemp As String
 Dim lTemp As Long
 sTemp = String(1, 0)
 lTemp = GetFileTitle(sFileName, sTemp, Len(sTemp))
 If lTemp < 0 Then HasExtension = -1: Exit Function
 sTemp = String(lTemp, 0)
 Call GetFileTitle(sFileName, sTemp, Len(sTemp))
 If (Left$(Right$(Left$(sTemp, lTemp - 1), 4), 1)) = "." Then
  HasExtension = 1
 Else
  HasExtension = 0
 End If
End Function

  若有显示扩展文件名,返回值是 1,否则返回0。

摘自:网络整理


相关参考


VB查找替代字符串的函数

VB换行气泡提示类

VB/VBA通用路径选择对话框

ASCII码表0-255完整版 附详细注释

VBKeyAscii

VB取得TextBoxRichTextBox光标所在的行和列(支持汉字)

VB取得TextBoxRichTextBox光标所在的行和列(支持汉字)

VB如何实现Undo(撤消)功能

VB计算文本文件的行数

VB获取快捷方式原文件路径

微软 Small Basic 简体中文版 已经发布了

VB操作Excel 非常详细 [网摘]

VB如何判断文件正被占用/已被打开

VB添加listbox 的水平卷动轴

VB打开资源管理器并指定文件

VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用

VB中的指针技术

Visual Basic编程常见问题及解答(1

Visual Basic编程常见问题及解答(2

Visual Basic编程常见问题及解答(3

VisualBasic变量、常数和数据类型及过程概述

VB6的后期绑定和前期绑定

VB用户控件制作讲解与实例

VB制作OCX控件的步骤

VBFSO的调用的两种方法

VB操作EXCEL

VB判断文件及目录的存在性

VB网站(最新、经典源代码、技术文章、基础知识)

VB得到指定文件夹下的文件列表

VB产生随机任意大小文件挤满硬盘

VB文件的读写操作

VB创建超链接 打开指定网站的几种方法

VB 源码 删除重复行程序 函数

VB 计算自己程序段所用时间

VB 获取路径名各部分 (获取文件路径,获取文件名,获取文件扩展名)自编

几行VB代码拿下注册表

VB 在浏览器中打开指定网址

VB窗口置顶

vb ListBox 之中点击右键弹出菜单

  评论这张
 
阅读(649)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018