古诗江南          VB编程各个突破
平潭旅游必去十大景点
    1、如何避免程式重复执行? (侦测是否存在前一副本,若有,则结束目前新启动的程式 )
2、如何让一个 app 永远保持在最上层 ( Always on Top ) 
3、表单配置视窗和解析度 
4、连续变量的声明 Dim a, b, c as string * 4 
5、正确的除错 (Debug) 方式 
1、如何避免程式重复执行? (侦测是否存在前一副本,若有,则结束目前新启动的程式 )
使用者在启动程式后,有时会将程式缩小在工作列上,之后要用时,又会重新启动一次程式,资料库程式有时会因此造成资料错乱!若您不希望使用者重复启动程式,您可以使用 APP 物件来判断,方法如下:
Private Sub Form_Load()
If App.PrevInstance Then '检视前一版本
MsgBox "此程式已经在执行中!", 48
End
End If
End Sub
2、如何让一个 app 永远保持在最上层 ( Always on Top )
请在声明区中加入以下声明
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
Const SWP_NOMOVE = &H2 '不更动目前视窗位置
Const SWP_NOSIZE = &H1 '不更动目前视窗大小
Const HWND_TOPMOST = -1 '设定为最上层
Const HWND_NOTOPMOST = -2 '取消最上层设定
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
'将 APP 视窗设定成永远保持在最上层
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
'取消最上层设定
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS
3、表单配置视窗和解析度
这个地方不是要告诉您如何写出一支程式,会自动根据使用者荧幕的解析度调整 Form 及各控制项的大小,也就是适用于各种解析度的程式。那是另一个主题! 
由于我在集团式的公司资讯中心上班,在我的开发过程中,我的使用者依不同公司别,分成几个族,有的公司都是使用 640x480 的解析度,有的都用 800x600,设计公司则是 1024x768,为了替这些公司开发软件,在 VB5.0 以前,写各家公司的程式以前就必须先调整荧幕的解析度 (否则在解析度 800x600 的电脑上开发的程式,在 640x480 解析度的电脑中执行时,右方和下方的画面会跑出荧幕外面),有的电脑一改变解析度就必须重新开机,更是麻烦!
儿歌我在马路边捡到一分钱VB5.0 以后,VB 多提供了一个功能,就是【表单配置视窗】,从此以后,您可以在高解析度的荧幕中,开发低解析度的程式,要怎么做呢? 《假设您的电脑解析度是 1024x768》
很简单!在【表单配置视窗】上的荧幕上按滑数右键,选择【解析度】。看到了吗!在【表单配置视窗】上的荧幕上,出现了二个虚线框,上面各标明了 640x480 及 800x600。好了!现在您可以开始开发各种不同解析度的系统了!
例如您要开发的系统,解析度是 640x480,您只要注意不要让您的表单超出 640x480 的虚线框就可以了!
4、连续变量的声明 Dim a, b, c as string * 4
我想声明 a,b,c 三个字串变量 
Dim a, b, c as string * 4 (错的)
这样的声明在 VB 中,结果可能和您要的不同!
有些程式语言,例如 C,类似以上的声明表示三个字串变量。
但是在 VB 中却不是如此!
以上的声明在 VB 中表示声明了 a,b 2 个 variant (不定形态变量),以及 c 这个字串变量。
要声明 a,b,c 三个字串变量,正确的写法如下:
Dim a as string * 4
Dim b as string * 4
Dim c as string * 4
若想写在同一行,也可以,写法如下:
佟丽娅 雷佳音Dim a as string * 4, b as string * 4, c as string * 4
5、正确的除错 (Debug) 方式
当程式执行起来怪怪的,很多人在除错 (Debug) 时,都喜欢在程式中使用中断点 (Break) 加上 MsgBox 来看执行结果,但有些时候,这样子的作法会造成某些事件 (Event) 无法触发,甚至改变事件原来触发的顺序! 
比较正确的作法是在程式中使用 Debug.Print "事件名称/要显示的讯息" ,而不要用中断点 (Break)。
6、Move Method 速度较快
7、哇!我的变量名称变成了保留字!
8、快捷键 -- 寻 Function/Subroutine 
9、我上一次程序写到那里呢?
10、不方便的 Msdn -- VB6.0 的 Help 

6、Move Method 速度较快
当我们要移动控制项 (Control) 或表单 (Form) 时,很多人习惯这样写: 
frmCustomer.Left = frmCustomer.Left + 100 
frmCustomer.Top = frmCustomer.Top + 50 
但是若使用 Move Method ,可以加快 40%:
frmCustomer.Move frmCustomer.Left + 100, frmCustomer.Top + 50 
7、哇!我的变量名称变成了保留字!
当我们升级 VB 的版本时,有时候会因为以前程序中使用的变量名称或函数名称变成了保留字,而使程序跑起来完全不正常,例如: 
print:VB3 时不是保留字,但到了 VB4 却变成了保留字。
国庆节所见所闻作文Array:VB4 时不是保留字,但到了 VB5 却变成了保留字。
遇到这种情形,其实也很简单!只要在 VB 中叫出该工程,打开任何一个表单的程序码,选择【编辑功能表】中的【取代】,搜寻范围设定成【整个工程】,并将【全字拼写须符合】选项打勾,然后将该工程中该字串改成另一个新字串,再重新 Make 成执行档即可。
下一次您升级 VB 的版本时,若原来正常的程序跑起来变得怪怪的,别忘了检查一下您自己定义的变数名称或函数名称是否也变成了保留字!
8、快捷键 -- 寻 Function/Subroutine
当您的 APP 愈来愈大时,或是您要维护别人开发的大系统时,是否曾经有过一种情形,程序中 call 了某一个 Function/Subroutine,您要寻这个 Function/Subroutine,除了一个一个 Module 之外,大部份的人都是使用【编辑功能表】的【搜寻】功能。 
其实您可以使用 【Shift + F2】快捷键!很简单,方法如下:
大胸女明星只要将鼠标停留在程序中该 Function/Subroutine Name 上,再使用【Shift + F2】快捷键即可!
9、我上一次程序写到那里呢?
有时候您会同时写几个不同的程序,或因为某种原因,程序停了一段时间,当您下一次要再继续写时,已经忘了上次写到那里了,其实有一个很简单的方法,可以马上唤起您的记忆! 
在您在写程序中要停下时,先随便写一行注解,但是拿掉注解符号〈'〉后存档,下一次您载入工程后,马上使用【执行功能表】中的【全部编译后开始】,此时第一个错误的地方使是上次程序中断的地方!
10、不方便的 Msdn -- VB6.0 的 Help
很多 VB 程序设计师抱怨为了存取 VB6.0 的 Help,必须一直将 Msdn 光碟放在光碟机中,否则就必须安装 680MB 的 Help 到硬盘中! 
其实还有一个比较人性化的方法,就是在安装 Msdn 时,选择【自订安装】,然后只要选择 Visual Basic 文件 (13792K) 即可。
如此您便可以直接由硬盘存取 VB 的相关主题,若您想看其他非 VB 主题,再由光碟存取。