编程俱乐部(1)
软件世界
VB
一、为何TextBox控件读取包含中文的文本文件时出错?
TextBox控件读取包含中文的文件时出错,例如对于下面的代码:
Open dlg1.FileName For Input As #1
Text1.Text = Input(LOF(1), 1)
Close #1
如果文件为纯英文,没有问题,一旦包括中文,就会“实时错误62,输入超出文件尾”,这是为什么?其实这就是编码的问题,从VB4.032-bit版后,VB就采用Unicode编码,就是每个字符都以两个byte表示,一个字母的长度就等同一个汉字的长度。如Len(“中文Mixed”)=7,而LenB(“中文Mixed”)=14。在上面代码中,Input读入的是字符数,LOF返回的是字节数,所以,当文件包含有中文时,两者就不同了。因此应作以下修改:
Open dlg1.FileName For Input As #1
Text1.Text =strConv(InputB(LOF(1), 1), vbUnicode)
Close #1
二、Win98下修改注册表后立即生效,如何用程序来实现?
大部分注册项修改后不一定要重启,按下“CTRL+ALT+DEL”,然后选择EXPLORER结束任务,在弹出关机窗口选择NO,即可刷新注册表。用程序实现应该用以下步骤:1.枚举EXPLORER的进程ID2.KILL掉。3.重建进程。
三、如何防止同一个程序多次被执行?
要达到这个目的,最常用的方法是判断App对象的PrevInstance属性,如果为True,就表示同一程序已经装入到系统中了,那么这次的运行就应该被终止。其代码如下:
If app.PrevInstance then
Msgbox “该程序已被运行”
End
End if
该判断语句通常放在“启动对象”的起始程序单元中。如果启动对象为Sub Main(),则直接将这个语句放在Sub Main()的第一行,如果启动对象为Form,则可以放在Form_Initialize()或Form_Load()事件程序中,两者的区别为Form_Initialize()发生的时间比Form_Load()早。
四、VB中如何快速获得TXT文本文件中指定的某行内容?
可以调用API函数SendMessage。程序如下:
Dim content as string‘定义保存该行文本的字符串变量
Comtnet=string(1024,0)
SendMessage Text1.hwnd,EM_GETLINE,lLine,content‘lLine为要获取的行号。
如果是VB6后的版本,还可以用文件系统对象(File System Objects),效率则更高。
五、怎样才能用TextBox控件加载大于32KB的文本?
TextBox内容不可超过32KB,但可用以下两个办法,可使它加载大于32KB内容。
1.Dim strcont as string,
显示32KB以内的字符串时,Text1.text=mid(strcont,1,32000)
显示32KB以外的字符串时,Text1.text=mid(strcont,32000,32000)
2.用API函数可以扩到128KB,SendMessage(text1.hwnd,EM_LIMITTEXT,0,0)。
当然,还有的办法就是使用RichTextBox控件。
六、如何用VB编写多址广播程序?
就是向多个IP地址发同一信息,就像QQ的系统广播信息一样。可以使用Winsock控件数组,用Winsock(1)来侦听。Winsock(i)作为对每个客户端的响应,即每增一个客户就增加一个Winsock,减少一个用户则反之。在Winsock的DataArrival事件中,用一个循环将数据发给每个Winsock(i)。
Delphi
一、快速启动Delphi
Delphi启动速度很慢,特别是程序初始化时那张布幕停在桌面,让人很着急。Delphi启动时要进行初始化,同时会跳出一张类似宣传单的布幕(很多应用程序程序都这样)。此外,Delphi还打开了一个新工程。这两项工作使得Delphi的启动变得很漫长,对于机器速度慢的朋友确实是一种煎熬。Delphi提供各种启动参数,通过这些参数可以加快Delphi的启动。在“开始”菜单“运行”中运行“"F:\Program Files\Borland\Delphi6\Bin\delphi32.exe" /ns /np”(注意:我的Delphi安装在“F:\Program Files\”目录下),这样就可以跳过前述的Delphi启动的两个步骤,加快Delphi的启动速度。其中这两个参数解释如下:
(1)ns:no splash:不显示快闪屏幕
(2)np:no project:不加载项目
二、滚动的控件面板
Delphi拥有用不完的控件,很便于开发,但每次要在众多的控件中选择一个实在不是一件轻松的事,鼠标要不停地点击,那么如何实现控件面板的平滑滚动呢?
Delphi的控件面板可以在注册表中做设置,使得控件面板可以随鼠标移动而平滑滚动。新建一个注册表文件(以“.reg”为后缀名),如“控件面板的平滑滚动.reg”,在该文件中输入如下代码:
REGEDIT4
[HKEY_CURRENT_USER\Software\Borland\Delphi\5.0\Extras]>
"AutoPaletteSelect"="1"
"AutoPaletteScroll"="1"
双击“控件面板的平滑滚动.reg”,把这个注册表文件信息输入注册表,即可使Delphi的控件面板平滑滚动。
注意:这里以Delphi5为例,其他版本请相应修改[HKEY_CURRENT_USER\Software\Borland\Delphi\5.0\Extras]。
三、阻止Local Interbase自动运行
安装Delphi后,Local Interbase在Windows系统启动后会自动运行,我不想让它自动运行,如何解决?
有几种解决办法:
1.在系统托盘(任务栏右端靠近输入法控制器处)中右击“Local InterBase Server”图标,选择“Startup Configuration”,选择“Manual Startup”选项即可;
2.在Windows“开始”→“运行”中输入“regedit”,运行注册表编辑器,在注册表编辑器中找到键值:“Hkey_local_machine\software\microsoft\windows\CurrentVersion\Run”,把该键值下“IBSERVER”删除(如果你不太熟悉注册表,建议做这项操作前注意备份注册表)。
3.如果你用的是Win98操作系统,那么你还可以运行“msconfig”,在msconfig中的“启动”页中找到“IBSERVER”项,把左边的钩去掉,重新启动即可。
四、如何分行提示
Delphi中大部分控件都有一个实用的Hint属性,即浮动条提示。但有时提示较长,是否可以使浮动提示条分行显示呢?
其实,Hint属于字符串(string)型的,因此只要在需要分行显示的地方加入回车符(ASCII码是“#13”),Delphi显示该字符串时会自动解释其中的回车符。如:表单上有Lable1的控件,它的Caption属性为“IMF”。要给这个缩写加上提示条,可收入如下代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Hint:='International Monetary Fund’+#13 +‘国际货币基金组织’;
end