编程俱乐部(3)
软件世界
VB
一、如何知道登录者使用的名称
调用GetUserName API函数,Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long。其中参数lpBuffer为传回使用者名称。
程序如下:
Dim s As String
Dim length As Long
length = 80
s = String(length, Chr(0))
GetUserName s, length
s = Left(s, InStr(s, Chr(0)) - 1)
msgbox s
二、0、""(空字串)、Null、Empty、与Nothing有何区别
我们先看以下的变量定义:
Dim A
Dim B as String
Dim C as Integer
Dim D as Object
经过以上定义后,A声明了Variant变量而没有赋值,其值为Empty(空),Empty值不同于空字符串(“”),用IsEmpty函数可以看出变量是否初始化。但如果检测A = ""或A = 0,都可以得到True值。
B等于"",因为尚未初始化的非固定长度“字串”都等于""。但请注意 B<>Null。
C等于0。D等于Nothing,对象变量尚未初始化。如果要切断对象与对象变量间的关联关系,可用Set语句将对象变量设置为Nothing,如:Set wordapplicationobject=Nothing。
Null常用于数据库应用程序中,表示字段中没有数据或对象变量没有赋值。Null值不同于Empty值。引用数据库、专用对象、集合等对象变量的未初始化变量是Null而不是Empty。如果程序调用函数来建立新对象,则必须用IsNull语句来检查Object变量的值,保证相应对象已经建立。
三、如何向文件写入非ASCⅡ字符
从VB4起,微软引入Unicode。但我们一样可以采用Byte类型直接向文件写入非ASCII字符。方法如下:
Dim a As Byte
a=&HF5 '此处直接给出ASCII码即可
Open "test.dat" For Binary As #1
Put #1, , a
Close (1)
四、如何传递不固定个数参数
如下定义一个过程:
Dim p()
Sub MySub(P) ' 把P定义成一个数组,这样便可传入非固定个数参数
举个例子说明。定义过程后,以下是可能出现的调用情况:
MySub "ABC" ' 只传递一个参数
MySub 1111, 222, 333, 1688, 888 ' 传递5个整数参数
MySub 111, "abc", Date() ' 传递3种不同类型的参数
以最后一个调用为例,P(0)将等于111,P(1)等于"abc",P(2)则等于 Date()函数的传回值,由于P()是一个数组,我们可以利用以下方法读取每一个参数:
For i = 0 To UBound(P)?
'读取参数语句
Next
请注意数组P一定是Variant,若要判断某个参数的类型,可以使用TypeName函数。
五、如何在VB中实现撤消(Undo)功能
在许多应用程序中,例如许多编辑软件都有Undo功能。它给我们带来了方便。那么在VB中能不能实现Undo功能呢?答案是肯定的。下面介绍一下对于标准的文本框或组合框实现Undo功能的示例代码。
Declare Function SendMessage Lib"user"(ByVal hWnd As Integer,ByVal wMsg As Integer,wParam As Integer,lparam As Any) As Long
Const WM_USER=&h400
Const EM_UNDO=WM_USER+23
UndoResult=SendMessage(myControl.hWnd,EM_UNDO,0,0)
六、如何在DOS程序结束运行时,自动将它关闭
在VB程序中启动DOS程序(或指令)的方法是:
Shell "DOS可执行文件名", vbNormalFocus
例如:
Shell "Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus
但是当以上的Xcopy程序结束执行时, 却会残留着DOS窗口没有被关闭,如果想要让DOS程序结束执行时DOS 窗口自动关闭,则应该使用以下方法来启动DOS程序:
Shell "Command.com /C DOS可执行文件名", vbNormalFocus
例如:
Shell "Command.com /C Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus
Delphi
一、如何操作INI文件
Windows操作系统用INI文件代替DOS操作系统的config.sys和autoexec.bat来管理程序初始环境以及一些资源信息,这些文件一般保存在x:\windows目录下。
Delphi提供了很方便的INI文件操作,这些操作包括:create(创建INI文件),readstring(从INI文件读出字符串值),writestring(向INI文件中写入字符串值),readinteger(从INI文件读出整型值),writeinteger(向INI文件中写入整型值)等。整个INI文件操作步骤如下:
首先定义变量,注意变量类型为“Tinifile”(如:Var winmine:Tinifile;),然后就可以利用已定义的INI文件类型变量进行操作了:
创建INI文件:
winmine:=tinifile.create('c:\windows\winmine.ini');
读出字符串值:
edit1.text:=winmine.readstring('扫雷','name1','佚名1');
写入字符串值
winmine.writestring('扫雷','name1',edit1.text);
二、如何调用帮助文件HLP文件
Windows标准帮助文件为*.hlp,这些文件如何在Delphi中调用呢?有两个步骤:
首先,把程序和帮助文件链接起来,方法是:选择“Project”→“Options”菜单,按动“Browse”按钮,选择已有的帮助文件(如:“help.hlp”),按“OK”按钮确定即可。
其次,通过程序代码调用帮助文件,有两种调用方式,即内容方式调用和查找方式调用:
内容方式调用:
Application.HelpCommand(Help_Contents,0);
查找方式调用:
Application.HelpCommand(Help_Finder,0);
三、如何制作不规则表单
四角形的屏幕从一出现起就对应用程序产生了决定性的影响,到目前为止,几乎所有的应用程序都不约而同地选择了方方正正的四角形的表单界面。久而久之,让人难免生出厌倦之意。所以,我们来探讨不规则表单的制作。大家可能很喜欢的一个媒体播放器Sonic就为我们提供了多种形式的表单,使得我们第一眼就被那不俗的界面吸引住了。
在Delphi中,制作不规则表单主要通过CreateRectRgn API函数定义表单区域,然后通过SetWindowsRgn API函数合成窗口来完成。
procedure TForm1.FormCreate(Sender: TObject);
var
Rgn1:HRgn;
pntXY:array [0..3] of TPoint; {定义表单边数,这里为三个边}
begin
{ 定点坐标定义 }
pntXY[0].x := 0;
pntXY[0].y := 0;
pntXY[1].x := width div 2;
pntXY[1].y := height;
pntXY[2].x := width;
pntXY[2].y := 0;
pntXY[3].x := 0;
pntXY[3].y := 0;
{ 调用API函数,定义表单区 }
Rgn1 := CreatePolygonRgn(pntXY, 3, Winding);
SetWindowRgn(Handle, Rgn1, True);{调用API函数,合成表单}
end;