| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1839 人关注过本帖, 3 人收藏
标题:VFP学习、开发漫谈 (六)
只看楼主 加入收藏
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
结帖率:96.88%
收藏(3)
已结贴  问题点数:10 回复次数:12 
VFP学习、开发漫谈 (六)
孔夫子教导我们:温故而知新。有时候,“回锅肉”更有味道。所以,今天我们针对前几节课中的几个问题,杀个回马枪。

首先,更正一个在漫谈(二)中出现的错误:

原文是:“==”仅用于两个字符串之间的比较,不能用于数值或其他类型表达式之间的比较,否则会出现语法错误。

经版主 TonyDeng 提醒,并上机验证确认:“==”也可以用于其他类型表达式之间的比较,但其功能与“=”相同,如:? 2==2.0 显示 .t.

有些错误在自己脑子里已经根深蒂固,若不借助“外力”,已经很难改正了。

其次,我想对漫谈(三)中关于 TRANSFORM()函数的使用,结合坛友的回贴,再啰嗦几句:

1. TRANSFORM 函数的掩码由格式掩码(Format)和输入掩码(InputMask)两部分组成,这与文本框的 Format属性和 InputMask属性相似。不同之处是,TRANSFORM 仅用于输出,而表单的 InputMask 还可用于控制输入。
2. 掩码的一般形式是:“@格式掩码 输入掩码”,二者之间用空格分开。当无格式掩码时,前面的“@”和空格可以省略,只保留输入掩码即可。
3. 有些掩码,如:“!”即可用于格式掩码,也可用于输入掩码。用于格式掩码时,是对整个字符串的控制,如:“!”格式码用于将整个字符串转化成大写。而用于输入掩码时,仅对当前位置上的单个字符起作用。如:“!”用于输入掩码时,仅将该位置上的字符转换成大写。同一个格式掩码不重复,而输入掩码可重复。
4. 同样的掩码对不同的数据类型其作用也是有差异的。下面举两个例子。

例一:把字符串“20140228”转换成“2014年02月28日”

方法一:? TRANS('20140228','@R 9999年99月99')+'日'

方法二:? TRANS(VAL('20140228'),'9999年99月99日')

从这个例子中可以看出,在处理字符型表达式时,对于输入掩码中的非掩码字符,需要使用“@R”,而对于数值型表达式,则不用。

例二:在表单上放置一个 Textbox 控件,保持其 Value 属性为默认的“(None)”,将 InputMask 属性设为“9999”。运行表单,我们发现只能在文本框中输入数字,不能输入加减号。现在,将文本框的 Value 设为 0,InputMask 仍为 9999,运行表单,你会发现:在文本框中不仅可输入数字,也可以输入加减号了。

由此可以看出,掩码“9”对字符型表达式和数值型表达式的控制是不同的。

在漫谈(三)中,我提到:将客户端与服务器时钟同步时,使用“Net Time \\192.168.0.1 /Set /Yes”DOS 命令。

这个命令对于客户端是域用户时,没有问题。但是,若客户端不是域用户,由于客户端未被服务器验证,无法访问服务器,造成时间同步失败。为此,可以在服务器上设置一个临时用户,如:tmp,无口令,在执行 Net Time 前,先与服务器建立连接就 OK 了。

Net Use \\192.168.0.1 "" /User:tmp
Net Time \\192.168.0.1 /Set /Yes

同样的道理,我们开发的应用程序在非域用户微机上运行时,也可以采用此方法。

最后一个问题,就是在 VFP 下执行“RUN Net Time \\192.168.0.1 /Set /Yes”时,会出现一个难看的“黑”窗口。如何避免呢?

有用户可能说:用 RUN /N 不就行了?

使用 RUN /N 有 2 个问题需要解决:一个是对于纯 DOS 批处理,即使增加了“/N”参数,也会有一个“一闪而过”的黑窗口;二是使用“/N”参数时,VFP不等待DOS命令执行完成,就继续向下运行。若后续命令调用了前面 DOS 命令的运行结果,可能导致错误。

对于第一个问题,我采用了一个完全免费的小程序 NirCmd.exe,用它来执行 DOS 命令不会出现黑窗口。Nircmd 可以从 www. 网站上下载,其体积超小(仅40K)、功能超多、纯绿色、全免费,是不可多得的好工具,强烈推荐!

对于第二个问题,我通过判断一个标记文件 ~cmdok.txt 是否存在,从而使系统处于“等待”状态,以保证 DOS 命令执行完毕。

我编写的通用自定义函数如下:

* 函数:运行 DOS命令-------------------------------------------------------------------------------------------------
FUNCTION RunCmd(tcCmd)
    #DEFINE CRLF CHR(13)+CHR(10)
    LOCAL tcCmd
    DELETE FILE c:\mis\~cmdok.txt                && 清除“批处理执行结束标记文件”
    DELETE FILE c:\mis\~cmd.bat                  && 清除“批处理临时文件”
    IF RIGHT(m.tcCmd,2) # CRLF                   && 换行
        tcCmd = m.tcCmd + CRLF
    ENDIF
    tcCmd = m.tcCmd + 'echo.>c:\mis\~cmdok.tmp'  && 在批处理末尾增加一行,用于生成结束标记文件
    = STRTOFILE(m.tcCmd,'c:\mis\~cmd.bat')       && 将字符串转化成批处理文件
    RUN /N Nircmd.exe execmd c:\mis\~cmd.bat     && 执行 DOS 命令,隐藏 DOS 窗口
    DO WHILE !FILE("c:\mis\~cmdok.tmp")          && 等待命令执行完毕
    ENDDO
    DELETE FILE c:\mis\~cmdok.tmp                && 清除临时文件
    DELETE FILE c:\mis\~cmd.bat
ENDFUNC

执行以下命令,可以将本机的网卡连接信息放到文件 NetCard.txt中:

= RunCmd('config/all>c:\netcard.txt')


[ 本帖最后由 liuxingang28 于 2014-2-28 12:32 编辑 ]
收到的鲜花
  • tlliqi2014-02-28 12:29 送鲜花  20朵   附言:学习
  • hu9jj2014-02-28 19:04 送鲜花  50朵   附言:好文章
搜索更多相关主题的帖子: 温故而知新 孔夫子 回马枪 回锅肉 表达式 
2014-02-28 12:24
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:2 
学习
2014-02-28 12:30
CHB123
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:100
专家分:68
注 册:2012-7-2
收藏
得分:2 
认真学习中!!!
2014-02-28 12:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
我比较关心那个NIRCMD是根据啥原理写的

DO IT YOURSELF !
2014-02-28 13:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:2 
以下是引用wp231957在2014-2-28 13:20:44的发言:

我比较关心那个NIRCMD是根据啥原理写的
应该是RUNCMD吧

坚守VFP最后的阵地
2014-02-28 13:22
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
以下是引用sdta在2014-2-28 13:22:01的发言:

应该是RUNCMD吧

是 NirCmd.exe,该文件是从 www. 网站上下载的。

泉城飞狐
2014-02-28 13:39
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用liuxingang28在2014-2-28 13:39:39的发言:


是 NirCmd.exe,该文件是从 www. 网站上下载的。

  我还以为是楼主自己写的呢

DO IT YOURSELF !
2014-02-28 13:41
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:273
专家分:227
注 册:2012-12-20
收藏
得分:2 
2014-02-28 17:32
flash7914
Rank: 2
等 级:论坛游民
帖 子:40
专家分:14
注 册:2013-4-7
收藏
得分:0 
太棒了,每一期都有惊喜。
2014-03-04 13:13
阳光电子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-8-30
收藏
得分:0 
学习,学习。
2014-03-07 14:46
快速回复:VFP学习、开发漫谈 (六)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019175 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved