📄 9921.txt
字号:
===========================================================
《编 程 技 术》
一份属于广大编程爱好者的电子杂志
这是一份完全关于探讨编程的免费电子杂志
您可以任意传播本刊,但必须保持它的完整
本刊承诺绝不向订户发送任何形式的垃圾邮件!
===========================================================
第21期 99/08/15 本期发送数: 3115
===========================================================
◆本期栏目◆
*刊首语*
*技术文档*
在VB中取得Windows的当前目录详解
VB中的时间处理问题
自己的IE——用VB制作浏览器
用VC++6.0制作图片屏幕保护程序
如何实现PB应用程序的屏幕保护功能
用DELPHI设计屏幕保护程序
退出 DOS 死循环的小程序
简单计算函数的编写过程
*服务台*
三个最新编程工具
===========================================================
◆刊首语◆
首先有一个好消息要宣布:《编程技术》1999年合订本(上)抢鲜
推出。由于近期本刊订阅者人数成倍增加,而且又不断有朋友向我索取
以前的刊物,为此本人特地把第二十期以前所有刊物内容统统打包,就
权且当作1999年合订本(上)吧。其中有近百篇各类编程语言的应用文
章,方便各位新老读者保存查阅,还等什么呢,赶快来我主页下载吧。
**********************************************************
***********************************************************
◆技术文档◆
在VB中取得Windows的当前目录详解
江苏 the.Sea
很多情况下我们需要在程序中确定当前Windows的目录,VB中自身并没
有这样的函数,但我们可以借助Windows API来达到目的,这个关键的函数
就是:Kernel32中的GetWindowsDirectory。
首先要在新建的程序中加入一个Module,在该Module中作如下声明:
Declare Function GetWindowsDirectory Lib “kernel32”
Alias “GetWindowsDirectoryA” (ByVal lpBuffer As String,
ByVal nSize As Long) As Long
这里的几个参数说明一下:lpBuffer是一个字符串,用以返回Windows
的目录值(实际上是一个指针),这个目录值不带反斜杠的,比如
C:\Windows,但有一种情况例外:当Windows安装在根目录下时返回反斜杠,
比如C:\;第二个参数是前一个字串的长度,你得告诉系统为返回值预留的
字串的最大长度(其实这个参数实在有些鸡肋的感觉);函数的返回值,
在成功的情况下是目录字符串的长度,在不成功时返回NULL值,还有一种
情况,就是返回值超出预留的串长度,那么该函数就返回实际值应有的长
度。
函数说明完毕,可以看到,为了防止出错情况,函数引入了nSize参数,
但只要使用下述经典的取目录代码,可保证程序平稳运行。
Public Function MyGetWinDirectory() As String
Dim sBuffer As String
Dim lSize As Long
sBuffer = String(255, 0)
lSize = GetWindowsDirectory (sBuffer, Len(sBuffer))
sBuffer = Left(sBuffer, lSize)
sBuffer = sBuffer + “\”
MyGetWinDirectory = sBuffer
End Function
这里程序首先为字符预留了255Bytes,应该是足够了,不会有人用这么
长的Windows目录名的,更重要的是超出255的长文件名Windows是不支持的;
然后调用GetWindowsDirectory函数,通过返回值lSize截取缓冲区中有用的
部分重新定义sBuffer;最后再加上反斜杠,形成完整的路径名。
现在你可以试一下你的新函数:在窗体Form1中加入一个文本框Text1,
然后再加入一个命令键Command1,在Command1_Click()事件中加入以下代码:
Private Sub Command1_Click()
Text1 = MyGetWinDirectory
MsgBox Text1
End Sub
最后运行程序,占击一下Command1,看一下实际的运行效果。(以上程
序在中文Windows98,VB6中通过。)
***********************************************************
VB中的时间处理问题
武汉 罗程
编程中常常会与时间打交道,VB编程自然也不例外。以下就谈谈我在这
方面的一点经验。
VB中提供了很多变量类型,DATE型就是专门用了存储时间的。
1、DATE型变量及其相关函数。
在内部,一个Date占8个字节的内存,你可以方便地用它来存储日期和时
间。给Date变量赋值是很容易的。但请保证输入顺序与系统默认的时间表示
顺序相同。例如:
Dim d As Date
d = #5/23/99 11:45:34 AM#
DateSerial函数可以把年、月、日的数字组合成一个Date值。TimeSerial
函数可把小时、分、秒的数字组合成一个Date值。且两函数可以叠加。
d = DateSerial(1999, 5, 23) + TimeSerial(11, 45, 34)
而DateValue 和TimeValue 函数则可将代表日期和时间的字符串转化为
Date型,并且也可以叠加。
d = DateValue(“1999/ 5/ 23”) + TimeValue(“11: 45: 34”)
Format函数可按预定的格式显示或打印一个Date变量。如:
Print Format(d, “general date”) '99-5-23 11:45:34
Print Format(d, “long date”) '1999年5月23日
Print Format(d, “medium date”) '99-05-23
Print Format(d, “short date”) '99-5-23
Print Format(d, “long time”) '11:45:34
Print Format(d, “medium time”) '11:45 AM
Print Format(d,“short time”) '11:45
Format函数也允许你自己规定显示格式。如:
Print Format(d, “mmmm”) 'may 产生日期中月份的英文
以以上日期为例,如想显示其中的一部分信息可使用以下函数:
Print Month(d) '5
Print Day(d) '23
Print Year(d) '1999
Print Hour(d) '11
Print Minute(d) '45
Print Second(d) '34
Print WeekDay(d)'1
Weekday 提供了一组内部常量,vbSunday代表1,直到 vbSaturday代表7。
Now 函数可返回今天的日期及时间。如:
Private Sub Form_Click()
Dim d As Date
d = Now
Print d
End Sub
灵活地应用以上的函数,可以大大地简化你的程序。例如想计算10000秒等
于几小时几分几秒可写为:
Private Sub Form_Click()
Dim d As Date
d = TimeSerial(0, 0, 10000)
Print d
End Sub
结果为2:46:40。
2、与时间相关的常用控件。
Timer控件是一个奇特的控件。Timer 控件会在固定时间间隔中运行Timer
事件。此间隔是由Interval属性决定的,其单位为千分之一秒。但不要以为将
其值设为0事件就可不间断地运行了。结果恰恰相反,事件将一次也不运行。同
时还要注意变量的声明。如:
Private Sub Timer1_Timer()
Dim a As Integer
a = a + 1
Print a
End Sub
Dim a As Integer
Private Sub Timer1_Timer()
a = a + 1
Print a
End Sub
试试看,其结果是完全不同的。
当需要用户输入时间时,为避免出现错误的时间,可以使用日历控件。它
只允许用户在日历表中选择日期,避免了错误的发生。
3、记录时间的API函数。
GetTickCount Windows API函数可返回 Windows 启动以来消失的毫秒数。
其精度高于VB的Timer 函数。且Timer 函数会在午夜清零,而GetTickCount 函
数只有当机器连续使用49.7天后才返回零。这为我们编程提供了很大的方便。
例如想知道你的电脑连续工作多久了,可新建一工程,然后添加以下代码:
Private Declare Function GetTickCount Lib “kernel32" () As Long
Private Sub Form_Load()
Dim d As Date
Dim t As Integer
Form1.Show
t = GetTickCount \ 1000
d = TimeSerial(0, 0, t)
Print d
End Sub
***********************************************************
自己的IE——用VB制作浏览器
上海 钱可栋
自己做浏览器?有没有搞错?不要说像IE这样的庞然大物,就是小巧的
Opera,我们大多数普通人也决计搞不出来。但如果你的机器里装有VB5.0专
业版,那么事情就好办多了,想试试吗?那好,Let's go!
程序的主角是一个ActiveX控件:WebBrowser。当然,缺省状态下VB的
工具箱中并没有它,我们得手工加入,方法是:右击工具箱,在出现的快捷
菜单中选择“部件...”,确保在弹出的对话框中选中“控件”标签,找到
Microsoft Internet Controls,在它前面的小框中打钩,然后确定。此时
你会发现工具箱中多了两个小图标,其中,地球图标代表的控件正是我们需
要的WebBrowser。
由于许多人对WebBrowser控件不是很熟悉,VB的帮助中也没有有关它的
内容(反正我没有找到),因此有必要介绍一下它的属性、方法和事件,限
于篇幅,我们只涉及程序中用到的:
属性:LocationURL 返回控件显示WEB页面的URL。
方法:Navigate 转移到指定的URL或打开指定HTML文件。
事件:1.DownloadBegin 下载操作开时触发。
2.DownloadComplete 下载操作完成、终止或失败时触发。
3.ProgressChange WebBrowser控件跟踪下载操作的过程,并定期触发
此事件。其语法为:Sub WebBrowser_ProgressChange (ByVal Progress As Long,
ByVal ProgressMax As Long)。Progress变元是当前已下载的数据总量,
ProgressMax变元是将要下载的数据总量。
4.TitleChange 当前文档标题改变时触发
除了WebBrowser控件外,程序还需要一个Label控件:Label1;一个
ComboBox控件:combo1,用来显示URL地址;一个StatusBar控件:StatusBar1;
一个ProgressBar控件:ProgressBar1,用来显示下载进度(StatusBar控件和
ProgressBar控件是ActiveX控件Microsoft Windows Common Controls5.0的成
员,加入工具箱的方法同WebBrowser控件),这些控件的属性值都用缺省值。
以下是程序清单:
Option Explicit
Private Sub Form_Load()
Me.Caption =“My Explorer”
Label1.Caption = “URL”
Combo1.Text = “”
Combo1.Top = Label1.Height
Combo1.Left = 0
WebBrowser1.Top = Combo1.Top + Combo1.Height
WebBrowser1.Left = 0
Form_Resize
StatusBar1.Style = sbrSimple
ProgressBar1.ZOrder
End Sub
Private Sub Form_Resize()
On Error GoTo a
Combo1.Width = Form1.Width - 100
WebBrowser1.Width = Combo1.Width
WebBrowser1.Height = Form1.Height - Combo1.Height - 1000
ProgressBar1.Top = Me.Height - StatusBar1.Height - 330
ProgressBar1.Left = 0.25 * StatusBar1.Width
ProgressBar1.Width = 0.75 * Me.Width - 250
a:
End Sub
Private Sub Combo1_Click()
'转到指定网址
WebBrowser1.Navigate Combo1.Text
End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim i As Long
Dim existed As Boolean
If KeyCode = 13 Then
If Left(Combo1.Text, 7) <> “http://”Then
Combo1.Text = “http://”+ Combo1.Text
End If
WebBrowser1.Navigate Combo1.Text
For i = 0 To Combo1.ListCount - 1
If Combo1.List(i) = Combo1.Text Then
existed = True
Exit For
Else
existed = False
End If
Next
If Not existed Then
Combo1.AddItem (Combo1.Text)
End If
End If
End Sub
Private Sub WebBrowser1_DownloadBegin()
'下载开始时状态栏显示“Now Linking...”
StatusBar1.SimpleText = “Now Linking...”
End Sub
Private Sub WebBrowser1_DownloadComplete()
'下载完成时状态栏显示“Link Finished”
StatusBar1.SimpleText = “Link Finished”
ProgressBar1.Value = 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -