aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 44666|回复: 22

登陆窗口

 火.. [复制链接]

23

主题

283

回帖

1831

积分

荣誉会员

积分
1831
发表于 2011-8-14 05:35:56 | 显示全部楼层 |阅读模式
本帖最后由 游戏 于 2011-8-14 05:38 编辑

这里要实现一个简单的登陆窗口:
       打开程序时,先弹出登陆对话框,要求用户输入用户名和密码,只有用户名和密码都正确了,才能进入主窗口。

主窗口位置:\main.aardio;
主窗口代码:

import win.ui;
import web.form
/*DSG{{*/
var winform = win.form( edge=1;bottom=249;text="已经登陆";border="dialog frame";right=349 )
winform.add(
static={ bottom=135;color=255;right=265;left=84;top=101;font=LOGFONT( name=
"宋体";h=-29; );z=1;text="Hello world!";transparent=1;cls="static" }
)
/*}}*/

var loginForm = winform.loadcode("\res\login.aardio" );
loginForm.show(
true);

win.loopMessage();


————————————————————————————————————————————————————

登陆窗口位置:\res\login.aau;
登陆窗口代码:

import win.ui;
/*DSG{{*/
var winform = win.form( edge=1;bottom=189;max=false;right=349;border="dialog frame";text="登陆窗口" )
winform.add(
ed_pass={ bottom=85;right=282;left=130;top=61;font=LOGFONT( name=
"宋体";h=-12 );tabstop=1;z=5;text="";edge=1;cls="edit" };
static3={ right=239;bottom=124;text=
"默认账号,密码: admin";left=115;top=107;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=3;cls="static" };
btn_login={ bottom=171;text=
"登陆";left=58;top=135;font=LOGFONT( name="宋体";h=-12 );z=7;right=149;cls="button" };
ed_name={ bottom=44;right=281;left=129;top=20;font=LOGFONT( name=
"宋体";h=-12 );tabstop=1;z=6;text="";edge=1;cls="edit" };
static={ right=123;bottom=43;text=
"账号:";left=61;top=26;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=1;cls="static" };
btn_exit={ bottom=171;text=
"退出";left=208;top=135;font=LOGFONT( name="宋体";h=-12 );z=4;right=299;cls="button" };
static2={ right=124;bottom=84;text=
"密码:";left=62;top=67;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=2;cls="static" }
)
/*}}*/

var flag = false;

winform.btn_exit.oncommand =
function(id,event){
    winform.close();
}

winform.btn_login.oncommand =
function(id,event){
   
if(!(winform.ed_name.text = "admin" and winform.ed_pass.text = "admin")){
        winform.msgbox(
"用户名或密码错误!","错误")
        
return ;
    }
   
    flag =
true;
    winform.close();
}

winform.wndproc =
function(hwnd,message,wparam,lparam){
   
select(message) {//判断消息类型
        case 0x10/*_WM_CLOSE窗口关闭消息*/{
            
if(flag){
                winform.parent.show();
            }
            
else {
                winform.parent.close();
            }
        }
    }
}

winform.show();
win.loopMessage();
return winform;




75

主题

767

回帖

5045

积分

六级会员

The only one

积分
5045
发表于 2011-8-14 07:48:21 | 显示全部楼层
本帖最后由 look 于 2011-8-14 08:28 编辑

这样似乎不合理,我一开始也是这么设计的,可是后来一想,如果有人,停留在登陆窗口,不登陆,用工具遍历窗口,查到主窗口句柄,显示主窗口,就可以绕过登陆窗口,直接进入主窗口!


//这样就被破解了!
import winex;
var hwnd=winex.find("AAU_FORM","已经登陆")
win.show(hwnd);


23

主题

283

回帖

1831

积分

荣誉会员

积分
1831
 楼主| 发表于 2011-8-14 11:11:48 | 显示全部楼层
look 发表于 2011-8-14 07:48
这样似乎不合理,我一开始也是这么设计的,可是后来一想,如果有人,停留在登陆窗口,不登陆,用工具遍历窗口,查到 ...

这样的确可以绕过登陆窗口,版主真细心。
只要 再建一个子窗口 用来做为登陆以后的窗口,这样应该没办法绕过登陆了。

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 2011-8-14 11:37:17 | 显示全部楼层
本帖最后由 编程 于 2011-8-14 12:11 编辑

main.aardio
import win.ui;
/*DSG{{*/
var winform = win.form( edge=1;bottom=249;text="已经登陆";border="dialog frame";right=349 )
winform.add(
static={ bottom=135;color=255;right=265;left=84;top=101;z=1;text=
"Hello world!";transparent=1;cls="static" }
)
/*}}*/

var loginForm = winform.loadcode("\res\login.aardio" );
var logined = loginForm.doModal(winform)

//如果没有登录,直接退出主程序
if( ! logined )
   
return;
   
//所有需要登录后才能执行的函数、事件都写在这后面
   
//显示主窗口   
winform.show();
win.loopMessage();

\res\login.aau
import win.ui;
/*DSG{{*/
var winform = win.form( edge=1;bottom=189;max=false;right=349;border="dialog frame";text="登陆窗口" )
winform.add(
ed_pass={ bottom=85;right=282;left=130;top=61;font=LOGFONT( name=
"宋体";h=-12 );tabstop=1;z=5;text="";edge=1;cls="edit" };
static3={ right=239;bottom=124;text=
"默认账号,密码: admin";left=115;top=107;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=3;cls="static" };
btn_login={ bottom=171;text=
"登陆";left=58;top=135;font=LOGFONT( name="宋体";h=-12 );z=7;right=149;cls="button" };
ed_name={ bottom=44;right=281;left=129;top=20;font=LOGFONT( name=
"宋体";h=-12 );tabstop=1;z=6;text="";edge=1;cls="edit" };
static={ right=123;bottom=43;text=
"账号:";left=61;top=26;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=1;cls="static" };
btn_exit={ bottom=171;text=
"退出";left=208;top=135;font=LOGFONT( name="宋体";h=-12 );z=4;right=299;cls="button" };
static2={ right=124;bottom=84;text=
"密码:";left=62;top=67;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=2;cls="static" }
)
/*}}*/

winform.btn_exit.oncommand =
function(id,event){
     winform.endModal()
}

winform.btn_login.oncommand =
function(id,event){
   
if(!(winform.ed_name.text = "admin" and winform.ed_pass.text = "admin")){
        winform.msgbox(
"用户名或密码错误!","错误")
        
return;
    }
   
    winform.endModal(
"登录成功" )
}

return winform;

点评

同意: 5.0 真棒: 5.0
同意: 5 真棒: 5
这代码不错,不过注册过的直接保存配置 下次不再进入注册界面不是更理想?  发表于 2012-4-28 21:15
这个代码有些问题吧,退出会进入到主窗口  发表于 2011-8-14 11:45

10

主题

61

回帖

493

积分

新手入门

积分
493
发表于 2011-8-14 11:41:44 | 显示全部楼层
我也在搞这个,汗的,看看好!

39

主题

151

回帖

1244

积分

四级会员

积分
1244
发表于 2011-8-14 11:48:12 | 显示全部楼层
呵呵。昨天和lujjjh大哥纠结了一下午,没有完美解决方案,晚上又和“游戏”大侠讨论这个,终于解决了,1楼源码是比较完美的父子窗口的一个demo了

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 2011-8-14 12:07:24 | 显示全部楼层
to ninja911:
1楼的代码写的纠结就算了,居然还是一堆人纠结出来的。

to fanishare:
代码测试没有问题,
发贴的时候把 logined改成winform.logined 了,忘记了winform对所有空值会返回一个table,
所以你会看到主窗口,我已经改过来了,谢谢提醒!

0

主题

12

回帖

128

积分

一级会员

积分
128
发表于 2011-8-14 12:47:16 | 显示全部楼层
CC

39

主题

151

回帖

1244

积分

四级会员

积分
1244
发表于 2011-8-14 12:48:17 | 显示全部楼层
一个比一个NB!! 赞一个

51

主题

212

回帖

1548

积分

四级会员

积分
1548
发表于 2011-8-14 14:10:31 | 显示全部楼层
编程 发表于 2011-8-14 12:07
to ninja911:
1楼的代码写的纠结就算了,居然还是一堆人纠结出来的。

为什么不用主窗口作为登录窗口,而子窗口作为主界面呢?

还可以给不同的用户给予不同的界面、权限等等。

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 2011-8-14 15:24:23 | 显示全部楼层
o00viw 发表于 2011-8-14 14:10
为什么不用主窗口作为登录窗口,而子窗口作为主界面呢?

还可以给不同的用户给予不同的界面、权限等等 ...

嗯,这方法也不错,更简单,功能还可以更多。
技术真的不重要,重要的是思路,有好的思路,总是可以化繁为简。

10

主题

61

回帖

493

积分

新手入门

积分
493
发表于 2011-8-14 19:54:13 | 显示全部楼层
编程的代码确实干练,呵呵,就是俺是初学者,还不是很明白一些命令的作用,domodal和endmodal等。

39

主题

151

回帖

1244

积分

四级会员

积分
1244
发表于 2011-8-15 15:52:19 | 显示全部楼层
继续发问

如果登录成功,进入父窗口,那么父窗口有一个按钮“注销”,点击注销后,怎么才能隐藏父窗口,然后又显示出登录子窗口呢??

75

主题

767

回帖

5045

积分

六级会员

The only one

积分
5045
发表于 2011-8-15 19:02:08 来自手机 | 显示全部楼层
本帖最后由 look 于 2011-8-15 19:03 编辑
ninja911 发表于 2011-8-15 15:52 继续发问 如果登录成功,进入父窗口,那么父窗口有一个按钮“注销”,点击注销后,怎么才能隐藏父窗口, ...
代码都有现成的了,组织一下就可以了!把你的问题想清楚,你是不知道怎么隐藏窗口吗?你是不知道怎样再次显示登录子窗体吗?百度或谷歌站内搜索"隐藏"、"子窗体"试试!

39

主题

151

回帖

1244

积分

四级会员

积分
1244
发表于 2011-8-15 19:49:17 | 显示全部楼层
look 发表于 2011-8-15 19:02
代码都有现成的了,组织一下就可以了!把你的问题想清楚,你是不知道怎么隐藏窗口吗?你是不知道怎样再次显 ...

就类似于QQ,已经登陆上线。然后我想切换QQ号登陆,又会弹出QQ登陆界面。

0

主题

3

回帖

46

积分

一级会员

积分
46
发表于 2011-8-25 01:42:03 | 显示全部楼层
不是很懂呀

0

主题

3

回帖

21

积分

新手入门

积分
21
发表于 2012-1-12 09:29:57 | 显示全部楼层
学习了,呵呵

12

主题

21

回帖

193

积分

一级会员

积分
193
发表于 2012-4-26 12:48:39 | 显示全部楼层
mark

0

主题

7

回帖

39

积分

新手入门

积分
39
发表于 2013-1-18 16:51:53 | 显示全部楼层
这个留着!谢谢楼主啊!嘿嘿!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-4-22 12:18 , Processed in 0.077434 second(s), 31 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表