2009年1月18日星期日

DCL对话框开关控件(toggle)的赋值技巧

灵活利用LISP的EVAL函数,在对对话框的开关控件(toggle)赋值时可以大大简化程序设计。尤其是如果结合用LISP程序生成DCL文件技术,我们就可以生成选项不定的开关控件并对其进行控制(这一点,留待以后在叙述)。如下图所示的多选开关对话框,在程序中利用(SETQ str "abcdefghxyz")语句,并结合(SET_TILE (EVAL letter) "1")语句,完成了初始赋值。只要改变字符串str(当然也可以用表),就可以得到不同的效果。


对应的DCL文件如下,如果该DCL文件用lisp程序生成,则label、key甚至label的数量都可以根据需要动态改变。

letter : dialog {

label= "Letter";

fixed_height = true;

: boxed_column {

letter = " ";

: row {

fixed_width = true;

: toggle { label= "A"; key= "letter_a"; width = 5; }

: toggle { label= "B"; key= "letter_b"; width = 5; }

: toggle { label= "C"; key= "letter_c"; width = 5; }

: toggle { label= "D"; key= "letter_d"; width = 5; }

: toggle { label= "E"; key= "letter_e"; width = 5; }

: toggle { label= "F"; key= "letter_f"; width = 5; }

: toggle { label= "G"; key= "letter_g"; width = 5; }

: toggle { label= "H"; key= "letter_h"; width = 5; }

: toggle { label= "I"; key= "letter_i"; width = 5; }

: toggle { label= "J"; key= "letter_j"; width = 5; }

: toggle { label= "K"; key= "letter_k"; width = 5; }

: toggle { label= "L"; key= "letter_l"; width = 5; }

: toggle { label= "M"; key= "letter_m"; width = 5; }

: toggle { label= "N"; key= "letter_n"; width = 5; }

}

: row {

fixed_width = true;

: toggle { label= "O"; key= "letter_o"; width = 5; }

: toggle { label= "P"; key= "letter_p"; width = 5; }

: toggle { label= "Q"; key= "letter_q"; width = 5; }

: toggle { label= "R"; key= "letter_r"; width = 5; }

: toggle { label= "S"; key= "letter_s"; width = 5; }

: toggle { label= "T"; key= "letter_t"; width = 5; }

: toggle { label= "U"; key= "letter_u"; width = 5; }

: toggle { label= "V"; key= "letter_v"; width = 5; }

: toggle { label= "W"; key= "letter_w"; width = 5; }

: toggle { label= "X"; key= "letter_x"; width = 5; }

: toggle { label= "Y"; key= "letter_y"; width = 5; }

: toggle { label= "Z"; key= "letter_z"; width = 5; }

}

}

ok_cancel;

}



;Lisp程序:

(DEFUN c:test (/ str char label)

(SETQ str "abcdefghxyz") ;

(SETQ DCL_ID (LOAD_DIALOG "test"))

(NEW_DIALOG "letter" dcl_id)

(WHILE (/= str "")

(SETQ char (STRCASE (SUBSTR str 1 1) T)

str (SUBSTR str 2)

letter (STRCAT "letter_" char)

)

(SET_TILE (EVAL letter) "1")

)

(ACTION_TILE "access" "(done_dialog 1)")

(START_DIALOG)

)

2009年1月13日星期二

Home Edition上安装IIS的痛苦经历

为了建一个简单的网站,我想在自己的电脑上安装IIS,对网站模板进行简单调试。没想到这一弄就是三四个晚上,最后还没有成功。把经历写下来,或许能让同样想安装IIS的朋友有个借鉴。把我找到的一些东西也放在这里,让有志安装IIS的朋友少化一点力气。
我的操作系统是Windows XP Home Edition 2002,按照网上的提示,要安装IIS,需要Windows 2000专业版的两个文件:IIS.DL_和IIS.IN_。我手头上没有Windows 2000专业版安装盘,那就从网上找吧。用用了整整两个晚上,打开了不知多少网页,绝大多数的回答都只是:Windows 2000专业版安装盘上就有——气死我了,如果有安装盘,还用费这个力气找吗?纯粹是为了得到百度的那两分应答分。偶然找到一两个有下载地址的,明明说是2000版,可下载下来一试,根本不能用。最后,总算从一个个人网站上下载下来的这两个文件,能通过了。
接下来是安装。本以为有了IIS.DL_和IIS.IN_,安装应该不难,谁知安装过程中还需要提供进程文件。我没有安装盘,老办法,从网上下载。找这些文件倒没有找IIS.DL_和IIS.IN_那么麻烦,可要的文件也太多了,有的文件要查5、6个网站才能找得到,又不能打包下载,就这样又用去了一个晚上,下载安装了30多个进程文件,最后,卡在了IISRESET.EXE上。
我用GOOGLE和百度找来找去,怎么也找不到这个IISRESET.EXE。只找到一家网站,要注册后才能下载。算了,我不想为了下载一个文件再去注册一个用户,再说注册了也未必下载得下来。这个文件找到了,后面谁知还需要再下载多少文件?干脆,我不用IIS了,换别的吧。不是还有网络盒子NetBox吗?小旋风ASP服务器好像也还值得一试。条条大路通北京不是吗?


这里是我下载的IIS.DL_和IIS.IN_以及其他一些进程文件,有需要的朋友拿去。


Windows XP家庭版安装IIS的方法,各家的说法大同小异,这里写的是还算比较全面。

2009年1月4日星期日

DCL编辑器

这几天为了把一个程序的对话框做的好看一点,搞得我苦不堪言。今天为了查找一点资料,偶然在明经上发现了一个飞诗寻雪编写的DCL编辑器,虽然还没来得及使用,但看介绍似乎相当不错。 姑且放在这里,等忙过这一阵好好研究研究。<DCL编辑器>

2009年1月1日星期四

清屏的一个小技巧

这几天在设计一个应用了DCL对话框的程序,碰到了一个让人非常恼火的问题:对话框操作完成以后,点击OK按钮,这时屏幕上的对话框本应立即关闭,可事实上却总是滞留很长一段时间,一直要到后续处理进行了一段时间之后才能完全清屏,如下图。

检查程序设计应该没有什么问题,试了很多方法也不能彻底解决,如用REDRAW命令不起作用,用REGER命令会影响程序执行的流畅性,我甚至试了用ZOOM-S-1X,也不行。
后来冷静下来分析,我发现在后续程序执行过程中,只要在对话框区域内有新的实体生成,就会局部清屏——我灵机一动,用下面两行程序试了一下,果然成功:
(VL-CMDF "RECTANG" (GETVAR "VSMAX")(GETVAR "VSMIN"))
(VL-CMDF "UNDO" 1)

Template Designed by Douglas Bowman - Updated to New Blogger by: Blogger Team
Modified for 3-Column Layout by Hoctro