|
|
|
VB问题全功略(27) |
[上一页](27)[下一页] |
131、Printer
物件如何控制打印机跳页至指定的地方? 132、如何在按下
Enter 键之后,自动让 Focus 移到下一个物件? 133、如何隐藏及显示任务栏? 134、取得应用程序执行的路径 135、清除 ListBox
及 ComboBox 中重复的项目
131、Printer
物件如何控制打印机跳页至指定的地方?
在网站上有人提出这样的问题:
用
VB6 写一打印程序,打印机是点矩阵的,而纸张为公司特别定做的,所以当用 EndDoc
方法打印时,无法控制打印机跳页至指定的地方(就是可用手撕纸的那一条虚线)
VB 的 Printer 物件提供的 EndDoc
会自动根据我们设定的纸张大小,自动跳到下一页,但是当我们所使用的纸张是特殊大小时
(很多套印的表格都是特殊大小的尺寸),若要让打印机的跳页正常,并不需更改我们的程序,要更改的是我们机器上该打印机的纸张大小的设定。
1、开启【我的电脑】,开启【打印机】(或由【开始】或【控制面板】开启打印机)。 2、在该点矩阵打印机上按鼠标右键选择【内容】,出现该打印机的【内容】问话框。 3、选择【纸张】页签。 4、纸张大小选择【自订】,会出现【使用者定义大小】问话框。 5、输入纸张的宽度和长度,单位有二种
( 0.01英寸 / 0.1公
)
用以上的方法设定好后,您就可以不用管纸张大小了,下一次它换页时就会自动跳页至指定的地方。
132、如何在按下 Enter 键之后,自动让 Focus 移到下一个物件?
如果您希望使用者在 TextBox 中按下 Enter 键之后,能够让 Focus 在各个物件之间游移,在
KeyPress 事件中您就必须判断是否有按下 Enter 键,如果有的话,您就必须取消 Enter 键,并送出一个 Tab 键。
在
VB 中,当您送出一个 Tab 键后,游标会依照 TabIndex 的顺序,在各物件之间移动。
若要照 TabIndex
顺序移动,指令为 SendKeys "{tab}" 若要照 TabIndex 反顺序移动,指令为 SendKeys
"+{tab}"
其实以上的方法不只适用于 TextBox 物件,很多物件都适用这个原则,但是 CommandButton
就不行了!因为 CommandButton 根本就没有 KeyPress 事件!
以下是一段范例程序:
Sub
Text1_KeyPress (KeyAscii As Integer) If KeyAscii = 13 Then SendKeys
"{tab}" KeyAscii = 0 End If End Sub
133、如何隐藏及显示任务栏?
有时候,我们希望在我们的程序执行中,将任务栏隐藏,让桌面变得比较清爽,等到我们的程序执行完毕之后,再将任务栏显示出来,这时就要用到
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
134、取得应用程序执行的路径
有时候执行我们的应用程序时,会用到一些和应用程序相关的文件,例如资料库、图档、文字档...等,这些文件我们通常都会放在和应用程序相同的目录或子目录中,于是在我们的应用程序中便有抓取应用程序现行目录的 求,在此我们介绍二种方法:
1、App.Path:返回值自动转为大写。 2、CurDir:返回值为大小写混合。
使用范例如下:
Private
Sub Command1_Click() Text1.text = App.Path Text2.text =
CurDir End Sub
135、清除 ListBox 及 ComboBox
中重复的项目
当我们要将一大堆资料加入 ListBox 或 ComboBox
时,为了不让 ListBox 或 ComboBox 中的项目重复,有些人会在将新项目加入 ListBox 或 ComboBox
时,就先作项目比对,资料没有重复时,才将资料加入 ListBox 或 ComboBox 中。
但是如果我们将资料统统加入
ListBox 或 ComboBox 之后,再来执行比对动作,不但程序容易维护,而且速度会加快一点点,以下的模组就是做项目比对,以清除
ListBox 或 ComboBox 中重复的项目。
模组中需要传入二个参数,说明如下:
1、控制项名称:可传入
ListBox 或 ComboBox 的名称。 2、是否分别大小写:True 表示要分别大小写,False
则不分大小写。
Sub RemoveDups(lst As Control, comptype As Boolean) Dim
lPos As Long '原始比对项目 index Dim lCompPos As Long '待比对项目 index Dim
sComp As String '原始比对字串 Dim sComptype As Long '0(binary) / 1(textual)
比对
lPos = 0 If comptype Then sComptype = 0 Else sComptype =
1 Do While lPos < (lst.ListCount - 1) sComp =
lst.List(lPos) lCompPos = lPos + 1 Do While lCompPos <
lst.ListCount If StrComp(sComp, lst.List(lCompPos), sComptype) = 0
Then lst.RemoveItem lCompPos lCompPos = lCompPos - 1 End
If lCompPos = lCompPos + 1 Loop lPos = lPos + 1 Loop End
Sub
'在程序中使用方式如下:
'要分别大小写 Private Sub
Command1_Click() RemoveDups List1, True RemoveDups Combo1,
True End Sub '不分别大小写 Private Sub Command2_Click() RemoveDups
List1, False RemoveDups Combo1, False End
Sub |
|