我做了个小系统,主窗体是MDI窗体,其他窗体均为普通窗体,不知道怎么回事每次启动时要启动半天,而且所有的窗体都创建并且打开了,好郁闷.我想在程序启动时只启动主窗体,其他窗体在应用程序调用时才执行,请问这种问题应当如何解决?高手请帮帮忙,谢了!
解决方案 »
- 如何在Form的create事件中打开数据模块
- 文本文件中的read和readln的简单问题
- 北京迅鼎科技发展有限公司招聘Delphi程序员
- delphi7如何安装winsock2呀?
- 哪位大虾有读取计算机硬件基本信息的资料?
- 怎么简单计算两个DATATIME类型数据之间隔了多少天?
- 获取到其它进程的TVirtualStringTree对象,但无法读取其数据
- 寻求VBA参考资料
- 怎么处理在SQL中字符串为NULL的字段啊?
- Listview和Listbox怎样一次性添加多个项目然后一起刷新?
- 如何删除IE历史记录
- 小妹遇到难题了,求各位神仙的大哥帮忙。100分相送!!!在线等待,急。。。。。。。
然后你的MDI需要在程序中自己去创建和显示
var
child:tmdichild;
begin
child:=tmdichild.create(application);
end;
action:=cafree;
action:=cafree;
FormN := TFormN.Create(self);
FormN.Show;
不同是地方是MDI窗体在关闭的时候要在OnClose中加:
Action := caFree;{其默认的是caMinimize}
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;procedure TForm2.FormDestroy(Sender: TObject);
begin
form2:=nil;
end;
begin form2:=Tform2.create(self); form2.Show;end;
Application.CreateForm(TFrmLogin, FrmLogin);
FrmLogin:=TFrmLogin.Create(nil);所创建的窗体各事件如下;
unit Login;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Flash, DB, ADODB, ExtCtrls,Main, Mask, DBCtrls, Grids,StudentInfo,
DBGrids;type
TFrmLogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
BtnLogin: TButton;
BtnCancel: TButton;
EditPassword: TEdit;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
CmbUser: TComboBox;
procedure BtnCancelClick(Sender: TObject);
procedure BtnLoginClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CmbUserKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction); private
{ Private declarations }
public
{ Public declarations }
end;var
FrmLogin: TFrmLogin;implementation{$R *.dfm}procedure TFrmLogin.BtnCancelClick(Sender: TObject);
begin
close;
end;procedure TFrmLogin.BtnLoginClick(Sender: TObject);
begin
if CmbUser.Text='' then
begin
showmessage('用户名不能为空,请输入用户名!');
CmbUser.SetFocus;
CmbUser.SelectAll;
end
else if EditPassword.Text='' then
begin
showmessage('密码不能为空,请输入密码');
EditPassword.SetFocus;
EditPassword.SelectAll;
end
else
begin
with FrmLogin.ADOQuery1 do
begin
close;
SQL.Clear;
sql.Add('select * from sys_user where 用户名="'+trim(CmbUser.Text)+'"');
open;
if Recordset.RecordCount<=0 then
begin
showmessage('此用户名不存在,请重新输入!');
CmbUser.SetFocus;
Cmbuser.SelectAll;
end
else if ADOQuery1.fieldByName('密码').AsString<>trim(EditPassword.Text) then
begin
showmessage('密码错误,请重新输入!');
EditPassword.SetFocus;
EditPassword.SelectAll;
end
else
begin
if ADOQuery1.FieldByName('用户类型').AsString='管理员' then
begin
with frmMain do
begin
QXSZ.Enabled:=true;
DLXT.Enabled:=false;
ZXDL.Enabled:=true;
XGMM.Enabled:=true;
FPYH.Enabled:=true;
GLY.Enabled:=true;
XSXXWH.Enabled:=true;
XSXXCX.Enabled:=true;
TBQXSZ.Enabled:=true;
TBDLXT.Enabled:=false;
TBZXDL.Enabled:=true;
TBXGMM.Enabled:=true;
TBFPYH.Enabled:=true;
TBGLY.Enabled:=true;
TBXSXXWH.Enabled:=true;
TBXSXXCX.Enabled:=true;
end;
end
else
begin
with frmMain do
begin
QXSZ.Enabled:=false;
DLXT.Enabled:=false;
ZXDL.Enabled:=true;
XGMM.Enabled:=true;
FPYH.Enabled:=false;
GLY.Enabled:=false;
XSXXWH.Enabled:=true;
XSXXCX.Enabled:=true;
TBQXSZ.Enabled:=false;
TBDLXT.Enabled:=false;
TBZXDL.Enabled:=true;
TBXGMM.Enabled:=true;
TBFPYH.Enabled:=false;
TBGLY.Enabled:=false;
TBXSXXWH.Enabled:=true;
TBXSXXCX.Enabled:=true;
end;
end;
login_user:=FieldByName('用户名').AsString;
login_password:=FieldByName('密码').AsString;
login_usertype:=FieldByName('用户类型').AsString;
pr_view:=FieldByName('查看').Value;
pr_add:=FieldByName('增加').Value;
pr_edit:=FieldByName('编辑').Value;
pr_delete:=FieldByName('删除').Value;
showmessage('登录成功!');
frmLogin.Close;
end;
close;
end; end;
end;procedure TFrmLogin.FormCreate(Sender: TObject);
var i:integer;
begin
FrmLogin.Width:=256;
FrmLogin.Height:=166;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\SMS.mdb;';
ADOQuery1.Active:=true;
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('select * from sys_user');
open;
for i:=1 to Recordset.RecordCount do
begin
FrmLogin.CmbUser.AddItem(FieldByName('用户名').AsString,FieldByName('用户名'));
Recordset.MoveNext;
Refresh;
end;
end;
end;
procedure TFrmLogin.CmbUserKeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) then
begin
Perform(WM_NEXTDLGCTL,0,0);
end;
end;procedure TFrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//action:=cafree;
end;end.
FrmLogin:=TFrmLogin.Create(nil); //新建第二次