标题:求助:如何先让菜单变灰不可用,输入正确口令,成功登录后,这些菜单才可用 ...
只看楼主
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
结帖率:83.33%
已结贴  问题点数:20 回复次数:5 
求助:如何先让菜单变灰不可用,输入正确口令,成功登录后,这些菜单才可用?

1、我设计一个准考证打印程序。

主程序代码:
**设置运行环境
Set Default To Left(Sys(16),Rat('\',Sys(16)))  &&设置当前目录路径,注意:连编成app用这个,如果连编成exe,用sys(5)+sys(2003)。
Set Path To Data,PROG,Report,Form,Menu,pic,kspics,txm  &&设置搜索路径,根据需要增减文件夹名,程序会自动到这些文件夹中搜索调用的各类文件。
Set Talk Off &&关闭命令显示
Set Escape Off &&禁止运行的程序在按 Esc 键后被中断
Set Exclusive Off &&数据库表以共享方式打开
Set Deleted On &&过滤掉已带删除标记的记录
Set Safety Off &&指定在改写已有的文件时不显示对话框
Set Date Ansi &&设定日期的年份为 4 位数
Set Century On &&指定日期表达式的显示格式为YY.MM.DD
SET MARK TO [-] &&指定日期的分隔符为"-"
SET SECONDS OFF &&日期时间表达式的显示秒钟部分
SET HOURS TO 24 &&指定日期时间表达式的显示为24小时格式
Set Optimize ON &&启用或废止 Rushmore 优化。
Set DECIMALS TO 8 &&指定小数点位数,默认为2位
RELEASE WINDOW 常用
Clear &&清除主窗口
Clear All &&清除变量

_screen.AddObject("IMG","Image") &&在_screen对象(VFP的主窗口)中加入图片控件
_screen.img.top=0
_screen.img.left=0
_screen.img.Stretch= 2 &&设置图片显示方式为 2-变比填充
_screen.img.Visible=.t.
_screen.img.Width = _screen.Width
_screen.img.Height = _screen.Height
_screen.lockscreen=.f.
_screen.img.Picture='55.jpg'

do MENU.MPR
DO 用户登录.scx
READ events

2、想增加一个用户登录窗口

我想当运行这个登录窗口时,上面的菜单是灰的,不能用。
用户名是固定的,只要输入正确的口令111后,登录窗口关闭,然后上面的菜单可以正常使用。

这个登录窗口的命令也不会写了,在网上查了一些,试了试也没行。
if allt(thisform.text2.value) != '111'
    messagebox( "口令输入错误!")
ENDIF

IF allt(thisform.text2.value) = '111'
这个地方再怎么写,才能让菜单变黑,程序正常运行。
ENDIF

各位老师指点一下了。


[此贴子已经被作者于2019-7-18 17:27编辑过]

搜索更多相关主题的帖子: 菜单 登录 Set 显示 img 
2019-07-18 17:26
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:10 
最简单的办法
DO 用户登录.scx  &&设模式表单
do MENU.MPR
 
登录表单可以这样写
先在 init 或主文件中定义全局变量_dlcs
IF    allt(thisform.text2.value) == '111'
    _dlcs=0
    thisform.release
ELSE
    _dlcs=_dlcs+1
    ?chr(7)
    if _dlcs=4
        =messageb('对不起,你输入的用户名或密码错误次数太多,请按确定退出!!',16,'警告!')
*        DBSETPROP('link','CONNECTION','CONNECTSTRING',"DBQ=")
        quit
    else        
        =messageb('用户名或密码错误,请重新输入(注意本系统密码区分大小写)!!',48,'提示')            
        retu
    endif
ENDIF


[此贴子已经被作者于2019-7-18 18:49编辑过]


dBase有人接盘了。
2019-07-18 18:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
DO 用户登录.scx
READ events

成功登录后再调用带菜单的表单

坚守VFP最后的阵地
2019-07-18 18:37
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
得分:0 
以下是引用xuminxz在2019-7-18 18:20:09的发言:

最简单的办法
DO 用户登录.scx  &&设模式表单
do MENU.MPR
 
登录表单可以这样写
先在 init 或主文件中定义全局变量_dlcs
IF    allt(thisform.text2.value) == '111'
    _dlcs=0
    thisform.release
ELSE
    _dlcs=_dlcs+1
    ?chr(7)
    if _dlcs=4
        =messageb('对不起,你输入的用户名或密码错误次数太多,请按确定退出!!',16,'警告!')
*        DBSETPROP('link','CONNECTION','CONNECTSTRING',"DBQ=")
        quit
    else        
        =messageb('用户名或密码错误,请重新输入(注意本系统密码区分大小写)!!',48,'提示')            
        retu
    endif
ENDIF


谢谢老师指点,我明天到单位一点点的学习。

我在网上下载了别人好多的实例,感觉基本上每个人都会用这个全局变量,我一次也没有用过。
我就想知道,什么情况下用全局变量,用了全局变量以后有什么好处?


另外,这一行不知什么意思,起什么作用?
在网上搜了搜也没看明白。
*        DBSETPROP('link','CONNECTION','CONNECTSTRING',"DBQ=")



[此贴子已经被作者于2019-7-18 22:38编辑过]

2019-07-18 20:05
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
得分:0 
以下是引用sdta在2019-7-18 18:37:52的发言:

DO 用户登录.scx
READ events

成功登录后再调用带菜单的表单


老师的意思是,把主程序里调用主菜单的这一行命令去掉,
然后在登录表单中按钮命令中加上一行命令,如果口令对了,再让他运行那个菜单,do menu.mpr。
好的,我明天试一试。

[此贴子已经被作者于2019-7-18 20:12编辑过]

2019-07-18 20:08
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
回复 4楼 wyzeaaa
没有用可以删除。意思是清空数据库的连接中的连接信息。
一般尽量少用全局变量,这里是为了记录试口令的次数。如果不想用的话也可以用表单的自定义属性,或用表单的Comment属性保存次数。

[此贴子已经被作者于2019-7-19 06:43编辑过]


dBase有人接盘了。
2019-07-19 06:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-495927-1-1.html




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

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