|
|
|
VB问题全功略(9) |
[上一页](9)[下一页] |
41、如何产生渐层的
Form 背景? 42、Set FormName =
Nothing 43、如何移除 Form
右上方之『X』按钮? 44、如何制作透明的表单
(Form)? 45、在抓取资料库之资料前先计算资料总笔数
41、如何产生渐层的
Form 背景?
在 Form_Load 中加入以下程序码
Sub
Form_Load() Form1.AutoRedraw = True '使 Form
物件的自动重绘有效 Form1.DrawStyle = 6 '直线的样式为内实线
(6-vbInsideSolid) Form1.DrawMode = 13 'copy Pen-由 ForeColor
属性指定的颜色。(13-vbCopyPen) Form1.DrawWidth = 2 '输出的线宽为 2 像素
(Pixel)
'为绘图或列印建立一自订的座标比例尺 '图形像素为显示器或印表机解析度的最小单位 Form1.ScaleMode
= 3 '设定物件座标的量测单位为像素 (3-VbPixels) Form1.ScaleHeight = (256 *
2) '设定垂直量测单位值为 512 For i = 0 To 255 Form1.Line (0,
Y)-(Form1.Width, Y + 2), RGB(0, 0, i), BF Y = Y + 2 Next
i 'RGB(red, green, blue) 'B : 使一方块用一指定方块对角的座标画出 'F :
指定此方块系以用来画方块的色彩来加以填满 (有B才可用F) End Sub
42、Set FormName = Nothing
语法:Set objectvar =
{[New] objectexpression | Nothing}
Nothing 为选择性引数。停止 objectvar
和任何特定物件的关连。指定 objectvar 为
Nothing,会在没有其它变数引用时,释放所有与先前物件有关的系统和内存资源。
当 objectvar 设定成 FormName
时,会将该 Form 中所有占用内存的物件所占用的内存通通释放。
虽然有人说 VB 在 Form Unload
时会自动释放内存,但是并不是全部!!
就像有人说, VB 程序要 Make EXE 之前最好先结束 VB, 重新载入该 Project
再 Make EXE, 结果执行档会比较小, 为什么 ? 就是少了一些在内存中的垃圾 !!
43、如何移除 Form 右上方之『X』按钮?
其实 Form 右上方之三个按钮分别对应到
Form 左上方控制盒 (ControlBox) 中的几个选项 (缩到最小 / 放到最大 / 关闭),而其中的最大化 (MaxButton)
及最小化 (Minbutton) 都可以直接在 Form 的属性中设定,但是 VB 并没有提供设定『X』按钮的功能!要达到这个功能,必须借助
API:
由于『X』按钮对应到 ControlBox 的关闭选项,所以我们只要移除系统 Menu (就是ControlBox)
的关闭选项即可!您自己可以先看看您现在使用的 Browser 左上方的系统 Menu,【关闭】选项是在第几个,不是第 6 个!是第 7
个,分隔线也算一个!分隔线才是第 6 个!
当我们移除了关闭选项之後,会留下一条很奇怪的分隔线,所以最好连分隔线也一并移除。而
Menu 的 Index 是从 0 开始,分隔线是第 6 个,所以 Index = 5。
修正:为了让程序码在 Windows NT
也能运作正常,将各 Integer 型态改成 Long。 89.05.04
'抓取系统 Menu 的 hwnd Private
Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (ByVal
hwnd As Long, ByVal bRevert As Long) As Long
'移除系统 Menu 的
API Private Declare Function RemoveMenu Lib "user32" Alias "RemoveMenu"
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As
Long '第一个参数是系统 Menu 的 hwnd '第二个参数是要移除选项的 Index
44、如何制作透明的表单
(Form)?
请在声明区中放入以下声明
Const GWL_EXSTYLE =
(-20) Const WS_EX_TRANSPARENT = &H20& Const SWP_FRAMECHANGED
= &H20 Const SWP_NOMOVE = &H2 Const SWP_NOSIZE =
&H1 Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or
SWP_NOSIZE Const HWND_NOTOPMOST = -2
Private Declare Function
SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 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
在 Form_Load
使用的范例如下:
Private Sub Form_Load() SetWindowLong Me.hwnd,
GWL_EXSTYLE, WS_EX_TRANSPARENT SetWindowPos Me.hwnd, HWND_NOTOPMOST,
0&, 0&, 0&, 0&, SWP_SHOWME Me.Refresh End Sub
45、在抓取资料库之资料前先计算资料总笔数
Sub Form1_Load() Dim
db As Database Dim ds As Snapshot Dim iNum As Integer '总笔数 Dim
wsql As String 'SQL字串
wsql = "Select Count (*) from Authors Where
AU_ID > 10" Set db = OpenDatabase("c:\vb\biblio.mdb") Set ds =
db.CreateSnapshot(wsql) iNum = ds(0) MsgBox "总笔数为 " +
Str$(iNum) End Sub
怎么样,是不是一样呢,只差在一个是 ADO,一个是 DAO
而已! |
|