界面设计的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 flybubble
  • 开始时间 开始时间
F

flybubble

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要设计这样的界面:程序运行时首先出现的是登陆窗口,有管理员和用户两种登陆用户,登陆成功后的主界面根据登陆用户的不同,会有有不同的popupmenu,不知道是否描述清楚了,请高手指点一下,最好有源代码。
 
我需要设计这样的界面:程序运行时首先出现的是登陆窗口,有管理员和用户两种登陆用户,登陆成功后的主界面根据登陆用户的不同,会有有不同的popupmenu,不知道是否描述清楚了,请高手指点一下,最好有源代码。
 
把你的菜单存放到数据库或者数据文件中。
根据登录的ID不同,从外部文件中取出该ID的菜单的列表即可。

你的菜单点击事件最好是有规律的,例如都是点一个菜单,然后就显示一个窗体,这样的话动态生成比较方便。
否则的话,可能就是在设计的时候把所有的菜单点击事件代码都编好,然后在登录完后根据权限的不同修改菜单的visible状态
 
同意2楼的,登录代码太简单
权限稍微复杂一些,不过也不困难
 
楼上已经说得很清楚了,
我补充一点,若要在先出现登录窗口,再出现主界面,
最好是把你的登录窗口放在工程文件中自已控制创建它,
给你一段我的代码
program IEERP;

uses
Forms,
Controls,
SysUtils,
......

{$R *.res}
begin
Application.Initialize;
Application.HintPause:= 0;
Application.HintHidePause := 99999;
glb_AppPath:= ExtractFileDir(Application.ExeName);
//逐渐显示登录画面:
FG_LoginFace:= TFG_LoginFace.Create(Application);
FG_LoginFace.AlphaBlend:= true;
FG_LoginFace.AlphaBlendValue:= 10;
FG_LoginFace.Show;
FG_LoginFace.Update;
Application.ProcessMessages;
while FG_LoginFace.AlphaBlendValue < 240 do
FG_LoginFace.AlphaBlendValue:= FG_LoginFace.AlphaBlendValue + 5;

//创建数据模块:
Application.CreateForm(TFC_DM, FC_DM);
//创建登录窗体
FG_Login:= TFG_Login.Create(Application);
if FG_Login.ShowModal <> mrOK then
begin
FG_LoginFace.Free;
FG_LoginFace:= nil;
FC_DM.Free;
FC_DM:= nil;
FG_Login.Free;
FG_Login:= nil;
Application.Terminate;
exit;
end;
FG_LoginFace.Update;
Application.ProcessMessages;
//创建主窗体:
Application.CreateForm(TFC_Main, FC_Main);
//逐渐消失登录画面:
while FG_LoginFace.AlphaBlendValue > 10 do
FG_LoginFace.AlphaBlendValue:= FG_LoginFace.AlphaBlendValue - 5;
FG_LoginFace.Free;
FG_LoginFace:= nil;
Application.Run;
end.
 
变量定义可根据需要灵活一点,这只是样式:

BtnLogin.Click(--);
begin
if User.isPasswordOK(Password) then
if User.isManager=true then
User.UserType:='Manager'
else
User.UserType:='User'
else
showmessage('Password Error!');
end;
//使用同个popMenu组件,但对不同用户可用性不同
popMenu1.OnPopUp里写
begin
if User.UserType='User' then
PopMenu.Items.Find('Menu Caption1').Enabled:=False;//禁用某功能,示例
end;

//对不同用户使用不同popMenu组件
BtnLogin.Click(--);
begin
if User.isPasswordOK(Password) then
if User.isManager=true then
begin
User.UserType:='Manager';
ListBox1.PopUpMenu:=PopMenu1;//想弹出菜单的控件,示例
end
else
begin
User.UserType:='User'
ListBox1.PopMenu:=popMenu2;
end
else
showmessage('Password Error!');
end;
 
使用ActionList,读取权限来通过ActionList 中Action的Enabled或者Tag来控制你的PopMenu
 
我现在在设计登陆界面时出现了问题,我是这么做的:
1。新建了mdi application(主界面)和一个form1(作为登陆窗口,用于输入用户名和密码)
2。程序的代码是program Mdiapp;
uses
Forms,
MAIN in 'MAIN.PAS' {MainForm},
login in 'login.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
form1:=Tform1.Create(nil);
form1.ShowModal;
end.
3。希望在点击form1的“登陆”按钮后出现mdiappliction界面,然后佛form1界面消失
代码是:
unit login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation

uses MAIN;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.free;
Application.CreateForm(tmainform, mainform);
Application.Run;

end;
编译运行,就有出错信息,我把form1.free语句删除就能正常运行,但是form1登陆没消失,怎么办呀,高手们?
 
用按钮啊,不同用户权限打开不同的按钮。我就是这样做的。
 
你不要这样写,程序运行后可以先显示登陆窗口!如果登陆成功后调出主窗口,然后把登陆窗口隐藏就可以了!
 
project-->options-->forms
在main form 里选择你的登录窗口
然后根据不同的权限设置菜单,再调用主窗口。
试试看,应该可以的
 
后退
顶部