16、如何避免程式重复执行?(侦测是否存在前一副本,若有,则结束目前新启动的程式) 17、如何让一个 App
永远保持在最上层 ( Always on Top ) 18、表单配置视窗和解析度 19、连续变量的声明 Dim a,
b, c as string * 4 20、正确的除错
(Debug) 方式
16、如何避免程式重复执行?(侦测是否存在前一副本,若有,则结束目前新启动的程式)
使用者在启动程式后,有时会将程式缩小在工作列上,之后要用时,又会重新启动一次程式,资料库程式有时会因此造成资料错乱!若您不希望使用者重复启动程式,您可以使用
APP 物件来判断,方法如下:
Private Sub Form_Load() If App.PrevInstance Then '检视前一版本 MsgBox
"此程式已经在执行中!", 48 End End If End Sub
17、如何让一个 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
18、表单配置视窗和解析度
这个地方不是要告诉您如何写出一支程式,会自动根据使用者荧幕的解析度调整 Form
及各控制项的大小,也就是适用于各种解析度的程式。那是另一个主题!
由于我在集团式的公司资讯中心上班,在我的开发过程中,我的使用者依不同公司别,分成几个族群,有的公司都是使用 640x480 的解析度,有的都用
800x600,设计公司则是 1024x768,为了替这些公司开发软件,在 VB5.0 以前,写各家公司的程式以前就必须先调整荧幕的解析度
(否则在解析度 800x600 的电脑上开发的程式,在 640x480
解析度的电脑中执行时,右方和下方的画面会跑出荧幕外面),有的电脑一改变解析度就必须重新开机,更是麻烦!
VB5.0 以后,VB 多提供了一个功能,就是【表单配置视窗】,从此以后,您可以在高解析度的荧幕中,开发低解析度的程式,要怎么做呢?
《假设您的电脑解析度是 1024x768》
很简单!在【表单配置视窗】上的荧幕上按滑数右键,选择【解析度】。看到了吗!在【表单配置视窗】上的荧幕上,出现了二个虚线框,上面各标明了
640x480 及 800x600。好了!现在您可以开始开发各种不同解析度的系统了!
例如您要开发的系统,解析度是 640x480,您只要注意不要让您的表单超出 640x480 的虚线框就可以了!
19、连续变量的声明 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
20、正确的除错 (Debug) 方式
当程式执行起来怪怪的,很多人在除错 (Debug) 时,都喜欢在程式中使用中断点 (Break) 加上 MsgBox
来看执行结果,但有些时候,这样子的作法会造成某些事件 (Event) 无法触发,甚至改变事件原来触发的顺序!
比较正确的作法是在程式中使用 Debug.Print "事件名称/要显示的讯息" ,而不要用中断点
(Break)。 |