⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9918.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:

(3)ON READERROR DO ERROR2 WITH 

(4)@11,36 SAY ‘年份'GET YEAR RANGE ‘80',‘96' 

(5)READ 

(6)ON READERROR DO ERROR2 WITH 

(7)@12,36 SAY‘月份'GET MONTH RANGE ‘01',‘12' 

(8)READ 

(9)ON READERROR DO ERROR2 WITH 

(10)@13,36 SAY ‘职业' GET JOB RANGE ‘01',‘20' 

(11)READ 

(12)ON READERROR 

(13)RETURN 

(14)PROCEDURE ERROR2 

(15)PARAMETERS 

(16)DEFINE WINDOW WIN2 FROM 8,10 TO 15,70 `出错显示窗口' 

(17)ACTIVATE WINDOW WIN2 

(18)?IIF(P=1,‘输入年的范围在:80-96',IIF(P=2,‘输入月的范围在:01-12',
‘输入职业范围在:01-20')) 

(19)WAIT ‘按任意键重新输入' 

(20)DEACTIVATE WINDOW WIN2 

(21)RETURN 

注意:如果以上程序取消第5句和第8句READ命令,只保留第11句READ命令,则在
出现输入 错误时,提示信息总是"职业"的输入内容,而非实际所需年份或月份
的内容。这是因为每一 时刻只有一条ON READERROR命令有效,因此在每一条
ON READERROR命令之后必须跟READ命令 ,方可使每条@…SAY/GET命令所对应
的ON READ-ERROR命令有效。 

二、按键陷阱的设置 

FoxPro提供的按键陷阱语句有ON ESCAPE,ON KEY,ON KEY=,ON KEY LABEL四类,
主要用 于响应按键后的中断服务。 

1.ON KEY[] 

该命令的功能是捕获程序运行过程中用户按下的任意键,在程序运行过程中,
当有任意 一键被按下时,陷阱即被触发,控制转移执行ON KEY指定的[<命令>]。
例如在一些软件封面 (画面或音乐)演奏过程中,使用该命令,当按下任意键时,
停止演奏,继续往下执行。 

2.ON KEY=[] 

该命令的功能是捕获执行READ命令期间用户按下的某一特定键。在READ命令
执行期间 ,若<键值>所指定的键被按下,系统控制转移执行<命令>;如不
设置该命令,则在READ命令执 行期间,即使按下该键,系统也不作任何响应。 

应该注意,当用该命令定义的键为可打印字符时,<键值>必须是被定义键的
ASCII码值; 而定义象F1、END、↑、ALT+F3、CTRL+F1、ALT+Q等功能键、光
标键、组合键时,<键值>必 须是被定义的扩展ASCII码值加上256。 

同ON ERROR命令一样,在一个程序中只有最后一次定义的ON KEY
(或ON KEY=[<键值><命 令>])命令效。取消其作用的方法是定义一个不
带参数的ON KEY命令。 

程序示例INPUTTIME.PRG 

SET TALK OFF 

ON KEY=315 DO HELP WITH VARREAD() *\定义F1键为帮助键 

USE 时间库 

STORE ‘ ' TO A1, B1, C1 

@6,30 SAY ‘请输入年/月/日,按F1帮助' 

@8,34 SAY ‘年' GET A1 RANGE ‘80' , ‘96' 

@9,34 SAY ‘月' GET B1 RANGE ‘01' , ‘112' 

@10,34 SAY ‘日' GET C1 RANGE ‘01' , ‘31' 

READ 

RETURN 

PROCEDURE HELP 

PARAMETERS fdname 

DEFINE WINDDW help_me 

@0,0 SAY IIF(FDNAME=‘A1',‘年范围应在:80-96',IIF(FDNAME=‘B1',
‘月范围应在 :01-12',‘日范围应在:01-31')) 

WAIT ‘ 

DEACTIVATE help_me 

RETURN 

3.ON ESCAPE[] 

该命令为FoxPro提供的中断陷阱。其功能是当<ESC>键被按下时陷阱即被
触发,控制转 移并执行<命令>。该命令一经运行就一直有效,直至遇到另
外一个ON ESCAPE命令为止。不 带参数的ON ES-CAPE命令,将取消中断陷阱
作用。当环境设置SET ESCAPE OFF时,该命令不 起作用,一般在程序设计中,
为保持程序的完整性,避免按ESC键后导致程序非正常退出,一般 将ESC键设
为OFF,故该命令不常用。 

4.多键和鼠标陷阱设置 

这类陷阱设置语句为: 

ON KEY [LABEL<键标><命令>] 

其功能为指定的多个键或鼠标按钮设置陷阱。当任一指定的键或鼠标按钮
被按下时,陷 阱即被触发,控制转移并执行<命令>。有关<键标>可查
阅Foxpro2.5提供的ON KEY LABEL命 令键码表。 

ON KEY LABEL命令的用途比较广泛,使用该命令可以捕获READ BROW、EDIT、
CHANGE等 命令和用户自定义菜单或弹出式菜单状态下所按的指定键。与
ON KEY命令不同,在任何时候 可以有多个ON KEY LABLE命令同时有效。取
消某一键或鼠标的陷阱设置,可执行命令ON LA BLE<键标>。 

例如把F1键定义为执行求助程序,把F2键定义为对当前工作区打开的数据
库进行浏览, 可用如下语句: 

ON KEY LABLE F1 DO helpfile 

ON KEY LABLE F2 BROW 

5.按键陷阱设置中热键的重复使用 

当在一个程序和其子程序中欲重复设置某一键,但两次设置的功能完全不
同,例如F1键 在主程序中进行了设置,当执行其子程序时F1键被子程序使
用,并重新设置。而当从子程序 返回时必须恢复F1在主程序中的用途,这
时可以使用按键的堆栈解决问题。当进入一个子程 序后,在未进行F1键设
置之前,首先使用PUSH KEY [CLEAR]命令将F1的当前定义压栈,再定义 自
己的F1键用途,返回主程序前,再用POP KEY [ALL]命令恢复主程序中的热
键设置。在程序 的不同部分F1键重复使用,也可以用此法解决。 

三、打印陷阱设置 

在数据库程序的设计中,中止打印过程一般有三种处理方法:一是打印指
定记录后,中止 打印;二是打印指定行内容后,中止打印;三是在任意时刻
按某键,中止打印。 

第一种方法。由于和数据库记录数有关,利用RECNO(),RECCOUNT( )两函数
设计中止程 序较为简单;第三种方法利用INKEY( )函数扫描键值,设计中
止程序也较为容易。 

第二种方法不仅和数据库记录数有关,还与打印内容的表头、表尾有关,在
以前的系统 里较难实现。FoxPro新增ON PAGE[AT LINK<数值><命令>]
陷阱命令后,使得按行中止打印程 序的设计变得十分简便,只需在以上命令
中加入中止行数,即可在打印输出到该行时自动中 止打印。 

以下程序是按行打印中止程序的简单例子。 

SET TALK OFF 

SET PRINT ON 

ON PAGE AT LINE 20 DO EJE 
 
USE \MA\MESS 

DO WHILE ·NOT· EOF() 

?CODE 

??MESN 

SKIP 

ENDDO 

SET PRINT OFF 

USE 

RETURN 

PROCEDURE EJE 

SET PRINT OFF 

WAIT 

SET PRINT ON 

RETURN 

四、异常退出FoxPro的陷阱设置 

当用户非正常退出FoxPro时,可以使用FoxPro提供的ON SHUTDOWN陷阱命令
解决这个问 题。该命令可以捕获以下动作:一是在左上角控制菜单双击鼠
标;二是单击控制菜单,选择C lose退出;三是在Comand窗口键入Quit命令
退出。我们可以使用ON SHUTDOWN DO FILENAME 命令,用名为FILENAME的
程序取代Fox-Pro本身提供的系统信息。FILENAME程序向用户提供 提示信
息,让用户确认是否真的要退出FoxPro,若不退出,使用RETRY命令返回程序,
否则,使 用QUIT命令退出FoxPro。 

***********************************************************
***********************************************************

◆有问必答◆

★本期回答★

●043. mailto: yaozheng@kali.com.cn?subject=043
怎么实现这样的功能:一个picture上显示一张图,在上面乱画线
再擦去,而原图保持不变,即随擦随回显。  ccchome@21cn.net
答:
画图的时候,改一下操作掩码(Raster operation code)
阿蒙

●044. mailto: yaozheng@kali.com.cn?subject=044
请问我想在自己编的程序中加一个可收发邮件的程序,发的程序找到一些
用winsock编的,但不知怎么加附件,收的没找到。那位高手能告知我怎么
加附件,怎么收邮件,最好是源代码,多谢了!!!  ccchome@21cn.net
答:
从我的经验来看,如果想在应用中嵌入一个邮件系统,而不是单纯的
做一个收发邮件的程序,建议你不要用控件。而是采用MAPI技术,调
用系统的邮件程序,一般来说,这样的程序比较稳定,这种实现方法
也比较正规。
举一例:
    HANDLE hLibrary;
    PFNMAPISENDDOCUMENTS lpfnMAPISendDocuments;
 
    if((hLibrary = ::LoadLibrary("MAPI32")) < (HANDLE)32){
        Application->MessageBox("Init MAPI32.DLL failure!","Warning",MB_OK);
        return;
    }
    if((lpfnMAPISendDocuments = (PFNMAPISENDDOCUMENTS)::GetProcAddress(hLibrary,"MAPISendDocuments"))==NULL){
        Application->MessageBox("Get procedure GetProcAddress failure!","Warning",MB_OK);
        return;
    }
    (*lpfnMAPISendDocuments)(Handle,";",fname.c_str(),"浪潮国强报表 - 发送程序",0);
    ::FreeLibrary(hLibrary);
阿蒙 

●045. mailto: yaozheng@kali.com.cn?subject=045
在delphi下如何实现所见即所得的打印? nshosp@telekbird.com.cn
答:
你用打印预览做不到所见即所得吗?---allfornow

_____________________________________________________________

★本期问题★

046. mailto: yaozheng@kali.com.cn?subject=046      
各位同仁,我有个问题急需得到解答:我在用ASP开发WEB 数据库中总出
现下列错误:
ADODB.Connection 错误 '800a0e7a' 
ADO 找不到指定的提供者。 
/answer.asp, 行9 
第9行为: conn.Open "shop","",""
SHOP 为我在ODBC中定义的源名.
我的环境为 WIN98+PWS+ACCESS
sunjm@Trigold.cngb.com


如果您有什么疑难问题,就请把问题发往 yaozheng@kali.com.cn
主题为“提问”,我会把问题放在杂志上的,希望编程高手们能
不吝赐教,也希望这个栏目能成为大家交流的场所。

***********************************************************
***********************************************************

◆编者的话◆

本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net

如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:

E-mail:yaozheng@kali.com.cn
ICQ#:  43260473
Homepage:http://biancheng.126.com 【163】
          http://person.zj.cninfo.net/~yao 【169】
◆欢迎光临我的主页,一个集编程、软件、鬼故事为主的个人主页         
                                                

◆《编程技术》订、退方法:

请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao

投稿:向yaozheng@kali.com.cn发封邮件     主题:投稿
提问:向yaozheng@kali.com.cn发封邮件     主题:提问

**************************THE END**************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -