收藏登陆界面的写法。

copy_paste 2003-05-11 11:04:31
一般来说,很多程序是需要写登陆窗口的,光我接触的登陆窗口的写法,一个程序有一种,N个就有N个,所以想收集一下大家的,看看有什么不同,特点。

条件:
一个Project, 一个MainForm, 一个LoginForm;
LoginForm两个Button, 一个OK(mrOK), 一个Cancel(mrCancel)

大家任意发挥。

我的:
AppProject.Dpr

Application->Initialize;
Application->CreateForm(TMainForm, MainForm);
Application->Run;

MainUnit:
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
if (!IsLogin(this)) then
{
Application->ShowMainForm = false;
Application->Terminate();
}
}

LoginUnit:

void IsLogin(TComponent *AOwner)
{
TLoginForm *Form = new TLoginForm(AOwner);
bool Result = (Form->ShowModal() == mrOK);
delete Form;
return Result;
}
...全文
99 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chifengwatch 2003-05-12
  • 打赏
  • 举报
回复
收藏
srxumin 2003-05-12
  • 打赏
  • 举报
回复
各位大虾,你们的启动界面都没带LogoFrm的启动画面啊。能不能加个带启动界面的?就像Word启动时那样,第一步出现LogoFrm窗体,第二步出现MainFrm窗体,第三步LogoFrm窗体消失,第四步出现LoginFrm窗体;
好像将MainFrm窗体设为MDI父窗体时会出错
「已注销」 2003-05-12
  • 打赏
  • 举报
回复
收藏!
GaoLun 2003-05-11
  • 打赏
  • 举报
回复
收藏ing

我的办法比较笨,可是也能用
不过还是不要来献丑了 ^_^
gdyt007 2003-05-11
  • 打赏
  • 举报
回复
學習
jishiping 2003-05-11
  • 打赏
  • 举报
回复
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
TLoginForm *Form = new TLoginForm(0);
if (Form->ShowModal() != mrOK)
return 0;
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

这儿没有删除TLoginForm,我在TLoginForm的事件OnClose里写代码:
void __fastcall TLoginForm::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
meCAD 2003-05-11
  • 打赏
  • 举报
回复
up
imisu 2003-05-11
  • 打赏
  • 举报
回复
谢谢了
joymachines 2003-05-11
  • 打赏
  • 举报
回复
收藏ing
耙子 2003-05-11
  • 打赏
  • 举报
回复
嗬嗬,那个闪一下是因为窗体要Show一次,随即就关闭了。
我这人太懒,加在工程文件每次都要修改。
copy_paste 2003-05-11
  • 打赏
  • 举报
回复
(回头突然发现俺的代码,好像N多错误,哈,俺是从D译过来的,也不调试。)

2 netsys2(来电)
有什么登陆进度?一般对应DB Application来说project只会创建两个对象(Splash除外),DataModule & MainForm。基本上都没有登陆进度。

你说的登陆进度是不是DataModule的连接数据库的那一过程?那不在主题之内。而且我发现连接数据库的模块中,也是N多方法,也是像登陆一样,N人会写出N种方法来。

2 pazee
你说会闪一下,估计你的程序运行了Create MainForm,所以闪了一下。其实俺的发贴的其中一个意思就是看看按取消时,会不会闪一下的问题。JSP没有这个问题,应该是其中你的代码有些问题吧。呵呵,大头。


如果是VC写登陆窗体,好像应该是按JSP的思路写的:
Init:

CLogin dlg;
if (dgl.DoShowModal() == IDOK)
{
MainForm ...
}
else
return 0;

所以看,我看很多程序,基本上是取消后马上退出,基本不会闪的情况。
以前我写登陆时,反正这搞搞那搞搞,好像总是会有些BUG。。。:(
Friecin 2003-05-11
  • 打赏
  • 举报
回复
哇!我发现我发错了!与主体不对!

不要意思~
netsys2 2003-05-11
  • 打赏
  • 举报
回复
都差不多。估计就这两种。

1)写在PROJECT中:
好处,可以显示登陆进度
坏处:修改工程文件会被破坏

2)写在主FORM中
好处,修改工程文件不会被破坏
坏处:不能显示登陆进度
langhaixin 2003-05-11
  • 打赏
  • 举报
回复
我也是同楼上的pazee兄一样的做 不过主窗体闪的问题好像没发现过!
Friecin 2003-05-11
  • 打赏
  • 举报
回复
USEFORM("FormPicEdit.cpp", frmPicEdit);
USEFORM("FormSysSet.cpp", frmSysSet);
USEFORM("FormSpl.cpp", frmSpl);
USEFORM("FormColor.cpp", frmColor);
USEFORM("FormVColorEdit.cpp", frmVColorEdit);
//---------------------------------------------------------------------------
AnsiString (__stdcall *ReadDiskID)();

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{


//=========================================


TfrmSpl *frmSpl=new TfrmSpl(Application); ///这里,通过读取系统秒数
long nowtime=GetTickCount();
while(long(GetTickCount())-nowtime<1500)
{
frmSpl->Show();
frmSpl->Update();
}

Application->Initialize();

Application->Title = "大器医疗系统";
Application->CreateForm(__classid(TfrmMain), &frmMain);

delete frmSpl;
Application->Run();
耙子 2003-05-11
  • 打赏
  • 举报
回复
原来我写的也是放在工程文件里面,类似jsp,
但是发现bcb每次在我添加了新的窗口后他都要修改这个工程文件,面目全非,这点他不如delphi,
所以bcb里面我都写在主窗口的OnCreate里面,唯一的问题就是放弃登录的时候这个主窗体会闪一下。
spaceman 2003-05-11
  • 打赏
  • 举报
回复
学习
myy 2003-05-11
  • 打赏
  • 举报
回复
一般程序允许“重新登陆”,我觉得只要把登陆模块独立开就行了,放在哪里都行。
kata520 2003-05-11
  • 打赏
  • 举报
回复
我觉得JSP的好一些。
Behard 2003-05-11
  • 打赏
  • 举报
回复
不过如果使用登陆数据库的话
我觉得最好使用 Copy_paste 的方法比较方便
加载更多回复(1)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧