📄 9918.txt
字号:
===========================================================
《编 程 技 术》
一份属于广大编程爱好者的电子杂志
这是一份完全关于探讨编程的免费电子杂志
您可以任意传播本刊,但必须保持它的完整
本刊承诺绝不向订户发送任何形式的垃圾邮件!
===========================================================
第18期 99/07/25 本期发送数: 2648
===========================================================
◆本期栏目◆
*刊首语*
*技术文档*
用VB将命令行软件Windows化
在Visual Basic中终止Windows 95
PowerBuild 的高级菜单设计技术
用C++BUILDER建立自己的WEB浏览器
怎样在C++Builder中创建使用DLL
用DELPHI编写TAPI应用程序
利用Delphi编程发送E-mail
FoxPro中的陷阱技术及应用
*有问必答*
===========================================================
◆刊首语◆
真要命,我的E-mail已经罢工大半周了,可至今还没有恢复,真可恨,
从本期的有问必答栏目中就可以看的出。可能有不少朋友的提问信或者解
答信就这样迷失在茫茫的网海之中。在此向这些朋友打声招呼,我也实在
是没办法。免费的东西毕竟不是这么好用的,我现在只盼望着不要丢信就
可以了。记得不久前一次邮件系统故障,我整整两天没有收到一封信,平
时我可是每天有二十来封啊!痛心啊,说不定错过了什么“终身大事”:-)
***********************************************************
***********************************************************
◆技术文档◆
用VB将命令行软件Windows化
刘强
有很多深受欢迎的软件,如ARJ,UNDISK等都是在DOS环境下以命令行的形
式出现的。其特点就是依靠大量的参数和开关变量来实现其丰富的功能。利
用Visual Basic可以简单地把此类软件改写成WINDOWS版本,其中大量的开关
参数可用菜单、列表框、组合框和复选框等一一映射成图形界面。而命令的
调用。可以用VB提供的SHELL函数,其语法为:
shell(命令字符串[,窗口风格])
如以下VB小程序:
Sub Command3D1_Click ()
Dim x
x = Shell("c:\tools\arj.exe a a:\demo c:\demo\*.*")
End Sub
但使用SHELL函数 会出现WINDOWS界面和DOS黑色界面的突然切换,显得
不美观。如何解决这个问题呢?使用WINDOWS的API函数WinExec,可以在隐含
的窗体中启动应用程序,使命令行程序完全在后台执行。下面给出一例,将
ARJ完全WINDOWS化,其效果完全可以乱真。
Sub Command1_Click ( )
Dim cmd As String
Dim hWnd As Integer
cmd = "c:\dos\ARJ.pif " & list1.Text & " -" & LIST2.Text &
" " & text2.Text & " " & text1.Text ’list1、list2输入参数,text1,text2输入文件路径
hWnd = WinExec(cmdline, 0) ’参数为0则隐藏窗体
If HWND < 32 Then ’hWin<32则启动应用程序失败
MsgBox "error!"
Exit Sub
End If
While GetModuleUsage(HWND%)
mousepointer = 11 ‘鼠标呈沙漏状
WAIT% = DoEvents()
Wend
mousepointer = 1 ’鼠标复原为箭头
End Sub
在此例中,笔者使用了WINDOWS的PIF编辑器将ARJ.EXE编辑成ARJ.PIF,
是因为类似ARJ这样的软件是以全屏方式执行的,而WINEXEC函数只能隐藏以
窗体方式运行的程序。在编辑PIF文件时显示方式选择“窗口”,执行方式
选择“后台”,这样就解决了上面提到的界面突换的问题。而调用API函数
GetModuleUsage以获得应用程序结束的标志,若运行完毕则返回TRUE,若
未运行完毕则让出CPU控制权,为运行ARJ提供时机。
这样的小程序完全可以实现命令行软件的WINDOWS化,而且运行起来真
假难辨,有兴趣的读者不妨试一试。
***********************************************************
在Visual Basic中终止Windows 95
谭翁
在Visual Basic程序中,可以使用Windows API函数来重新启动计算机
系统,文本介绍如何退出Windows 95并关闭计算机系统。
# 关闭计算机系统
可以使用Windows API的ExitWindowsEx函数来从Visual Basic程序中
重新启动计算机系统。要使用该函数,需要将如下声明语句包含在窗体的
通常声明部分中:
Private Declare Function ExitWindowsEx Lib "user32" (ByVal
uFlags As Long, ByVal dwReserved As Long) As Long
ExitWindowsEx 函数需要2个参数,可以使用一个或多个下面的标识
的组合来告诉ExitWindowsEx函数希望进行关机过程。
EWX_FORCE所有的进程都被强制终止。
EWX_LOGOFF所有的进程被强制终止,并且用户退出登录(logged off)。
EWX_POWEROFF计算机系统被关机,并且如果支持节电特性,则计算机被物理关机。
EWX_REBOOT计算机系统被关机并重新启动。
EWX_SHUTDOWN计算机被物理地安全地关机。
下面的样例程序中使用了上面的三个标识的组合。该标识组合
(EWX_LOGOFF,EWX_FORCE, 以及EWX_REBOOT)告诉Windows95退出所有正
在执行的进程,使用户退出网络登录,使计算机系统处于准备状态以供用
户关机。
# 样例程序
该样例程序显示了如何关闭计算机系统。
1.在Visual Basic中开始一个新的项目,采用缺省的方法建立Form1。
2.将如下常量和声明语句添加到Form1的通常声明部分中(注意该声
明语句需要书写在一行内):
Private Declare Function ExitWindowsEx Lib "user32" (ByVal
uFlags As Long, ByVal dwReserved As Long) As Long
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const EWX_POWEROFF = 8
Const EWX_RESET = EWX_LOGOFF + EWX_FORCE + EWX_REBOOT
3.在Form1上添加一个命令按钮控件,采用缺省的方法建立Comand1。
将它的Caption属性设置为“重新启动计算机”。
4.将如下代码添加到Command1的单击事件中:
Private Sub Command1_Click()
Dim X As Long
X = ExitWindowsEx(EWX_RESET, dwReserved)
End Sub
按下F5来运行上述样例程序,单击命令按钮,即可重新启动计算机系统。
***********************************************************
PowerBuild 的高级菜单设计技术
武警学院计算机中心 程连孚
做为事件驱动的系统,菜单所起的作用是明显的。一个好的菜单,能给
程序起到锦上添花的作用。PowerBuild 5.0(以下简称PB5)在这方面给用户
提供了很大的灵活性,使用户能根据自已的爱好和需求设计出各种不同风格
的菜单。下面就谈谈如何在PB5中实现两种别致的菜单:动态菜单和声音菜单。
一、动态菜单
如果一个程序的选项复杂,那么菜单项也会相应地增多。在主界面上设置过
多的菜单项会影响界面的简洁,有时也会使用户无所适从。如果将菜单设置
成动态菜变化的菜单,在一个功能下只显示相应的菜单,那么用户使用起来
会效果更好。
菜单在PB5中是窗口的一个属性,我们可在通过改变这种属性来改变窗口菜
单的显示。我们假设在已存在一个库test.pbl,该库中有一个标准的File菜
单(m_file),
窗口上有一个按钮"Change to Another Applicatiuon",按下后,程序将启
动另一个应用模块,该模块将用自己的菜单来替代现有的菜单。我们可以通
过下面的方法来实现这一功能。
1、在菜单模板下,创建一个菜单,设为 m_test,它与前面的file菜单
有完全不同的设置
2、利用"Change to Another Application"按钮的脚本来改变菜单的显示。
单现"Script"按钮,在其中添加如下的语句:
Parent.ChangeMenu(m_test)
3、运行程序,即可得到结果。
需要说明地是,改变菜单项必须通过ChangeMenu( )函数,而不能通过标
准的"."来无成,因为在PB5中,菜单对窗口来说是保护(protected)属
性,该属性只能通过界面函数来访问。另外,如果在菜单项中添加脚本来
动态改变菜单,则脚本中应该使用语名:
ParentWindow.ChangeMenu(m_test)
二、为菜单添加声音
在多媒体演示产品中,我们经常会遇到这样的情形,当鼠标单击某一菜单
或按钮时,音箱会发出某种音效(如果有这种设备的话),这使得软件更
加生动。在 PB中我们也可以很容易地实现这一点。
PB中没有直接调用多媒体功能的函数,要想为一个程序加入多媒体功能,
必须通过调用Windows API函数"SndPlaySound()"或"PlaySound()"来完成。
假设我们己有有了一个库"test.pbl",其菜单也如前所示,具体实现步骤
如下 :
1、在"Declare"菜单中选择"Local External Functions…",弹出的对话
框中填入如下的声明语句:
Function Boolean sndPlaySound(String s_file,&
UINT u_flags) Library "WINMM.dll"
Function UINT LoadLibrary(String as_library) "kernel32.dll"
Subroutine FreeLibrary(UINT Hinstance)Library "kernel32.dll"
实际上PB中的菜单也是动态的,"Declare"必须在编辑菜单时才出现
2、为每个菜单项选择相应的声音文件" .WAV"
3、为菜单项添加脚本,驱动声音文件,以"new"菜单为例:
sndPlaySound ("new.wav",0)
sndPlaySound函数有两个参数,前面的一个为声音文件名,后面的一
个为播放方式,主要用到有如下几个:
0--同步播放
1--异步播放
2--找不到声音文件即返回
4--播放声音文件在内存中的映象
声音文件最好是放在当前目录下,否则系统将按如下的顺序进行查
找:当前目录,Windows目录,Windows系统目录,PATH中列出的目录,
网络映射目录。
完成上述步骤后,运行程序即可听到菜单的声音了。
作者地址:河北省廊坊市武警学院计算机中心
邮编: 065000
E_mail:chlf@hotmail.com
***********************************************************
用C++BUILDER建立自己的WEB浏览器
中央民族大学计算机系 杨超
---- 用够了IE和NETCAPE的朋友,有没有想过也编制一个自己的浏览器呢?
用C++BUILDE使得你能够方便高效的创建自己的INTERNET程序.由于C++BUILDER
的基本语言是C++,所以它几乎可以做任何事情,通过C++BUILDER的组件设置,
你可以象其他应用程序一样建立INTERNET应用,意味着你可以扩展这些组件来
增强他们的功能,如果需要的话,它也可以处理低水平的API细节,因为它是基
于c++的.如果直接使用API(如ISAPI)建立INTERNET应用,你选用的工具必须能
使用并建立DLL,而且能利用这些DLL公布的接口.
---- 让我们看一下它的INTERNET组件及功能:
---------------------------------------------------------
FTP 支持远程机器间交换文件
THTML 支持分析和规划html数据并提供一个
当前html页的可滚动视图
THTTP 提供访问超级文本传输协议
TNTTP 提供读取新闻组的能力
TPOP 提供访问pop3电子邮件协议
TSMTP 支持传送Internet邮件报文组给SMTP服务器
TTCP 提供访问winsock传送控制协议(客户和服务器端)
TUDP 提供访问winsock用户数据图协议(客户端和服务器端)
---- 现在我们就可以开始建立我们的浏览器了:
---- 1.先建立一个新的工程文件
---- 创建一个新表单,设它的Caption属性为mybrowse,Position的属性为
PoScreeCenter将一个TTabControl组件放在表单顶部,这个控制在你浏览中
列出的URL使你很容易返回到你已经访问过的节点,设置Align的属性为alTop,
这样以使程序运行时它总处于表单的顶端,再放置一个Tpanel并设置Align属
性为alBottom,使它运行时处于底端, 在对象观察器中删除Caption属性,并
设TabOder为0.再向表单中加入另一 Tpanel,清除其Caption属性,并放置两
个TBitBtn,Caption分别设置为GO和HOME,在表单的底部放置一个TcomBoBox
并删除他的Text属性,程序运行时,你将在它里面键入或下拉选择你要访问
的URL ..最后在表单上放置一个THml组件,这将显示你访问的网页.下面就
可以编写代码了.
---- 2. (1).为TabControl的OnChange事件( 使cbURL与tcURL同步)编写
代码:
cbURL- >Text=tcURL- >Tabs-
>Strings[tcURL- >TabIndex];
cbURL- >SelectAll( );
bbGo- >Click( ); //使点击go与点表格相同效果
---- (2).为THtml的OnbeginRetrieve事件编写代码:
Cursor=(TCursor)crHourGlass;
if (cbURL- >Items- >indexOf(htBrowser- >URL)==-1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -