unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, Menus;type
TmainForm = class(TForm)
MainMenu1: TMainMenu;
StatusBar1: TStatusBar;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
N6: TMenuItem;
N7: TMenuItem;
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
mainForm: TmainForm;implementation{$R *.dfm}
uses login;
procedure TmainForm.N2Click(Sender: TObject);
begin
application.CreateForm(Tlogin_form,login_form);
login_form.Show;
n2.Enabled:=false;
end;end.主窗口的代码unit login;登录窗口的代码interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;type
Tlogin_Form = class(TForm)
Panel1: TPanel;
yhm_Edit: TEdit;
mm_Edit: TEdit;
StaticText1: TStaticText;
StaticText2: TStaticText;
Button1: TButton;
Button2: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
login_Form: Tlogin_Form;implementation{$R *.dfm}
uses main;procedure Tlogin_Form.Button1Click(Sender: TObject);
begin
close;
end;procedure Tlogin_Form.Button2Click(Sender: TObject);
var yhm,mm:string;
a,b:integer;
begin
if (length(trim(yhm_edit.Text))>0) or (length(trim(mm_edit.Text))>0) then
begin
yhm:=trim(yhm_edit.Text);
mm:=trim(mm_edit.Text);
with adoquery1 do
begin
sql.Clear;
sql.Add('select* from yhb a,qxb b where (a.yhm=:yhm) and (a.mm=:mm) and (a.yhm=b.yhm) order by b.cdx');
Parameters.ParamByName('yhm').Value:=yhm;
Parameters.ParamByName('mm').Value:=mm;
open; if recordcount>0 then
begin
First;
while not eof do
begin
a:=strToint(copy(fieldByName('cdx').AsString,1,1));
B:=strToint(copy(fieldByName('cdx').AsString,2,2));
mainform.MainMenu1.Items[a].Visible:=true;
mainform.MainMenu1.Items[a].Items[b].Visible:=true;
next;
end;
login_form.Close;
mainform.StatusBar1.Panels[0].Text:=yhm;
end
else
begin
showMessage('请确认登录的用户至名与密码是否正确');
yhm_edit.SelectAll;
yhm_edit.SetFocus;
end;
close;
end;
end else
begin
showMessage('请输入登录用户名与密码!');
yhm_edit.SelectAll;
end;
end;end.
每次输入密码与用户名就出现个错误'LIST INDEX OUT OF BOUNDS'应如何解决,高手出手啦
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, Menus;type
TmainForm = class(TForm)
MainMenu1: TMainMenu;
StatusBar1: TStatusBar;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
N6: TMenuItem;
N7: TMenuItem;
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
mainForm: TmainForm;implementation{$R *.dfm}
uses login;
procedure TmainForm.N2Click(Sender: TObject);
begin
application.CreateForm(Tlogin_form,login_form);
login_form.Show;
n2.Enabled:=false;
end;end.主窗口的代码unit login;登录窗口的代码interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;type
Tlogin_Form = class(TForm)
Panel1: TPanel;
yhm_Edit: TEdit;
mm_Edit: TEdit;
StaticText1: TStaticText;
StaticText2: TStaticText;
Button1: TButton;
Button2: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
login_Form: Tlogin_Form;implementation{$R *.dfm}
uses main;procedure Tlogin_Form.Button1Click(Sender: TObject);
begin
close;
end;procedure Tlogin_Form.Button2Click(Sender: TObject);
var yhm,mm:string;
a,b:integer;
begin
if (length(trim(yhm_edit.Text))>0) or (length(trim(mm_edit.Text))>0) then
begin
yhm:=trim(yhm_edit.Text);
mm:=trim(mm_edit.Text);
with adoquery1 do
begin
sql.Clear;
sql.Add('select* from yhb a,qxb b where (a.yhm=:yhm) and (a.mm=:mm) and (a.yhm=b.yhm) order by b.cdx');
Parameters.ParamByName('yhm').Value:=yhm;
Parameters.ParamByName('mm').Value:=mm;
open; if recordcount>0 then
begin
First;
while not eof do
begin
a:=strToint(copy(fieldByName('cdx').AsString,1,1));
B:=strToint(copy(fieldByName('cdx').AsString,2,2));
mainform.MainMenu1.Items[a].Visible:=true;
mainform.MainMenu1.Items[a].Items[b].Visible:=true;
next;
end;
login_form.Close;
mainform.StatusBar1.Panels[0].Text:=yhm;
end
else
begin
showMessage('请确认登录的用户至名与密码是否正确');
yhm_edit.SelectAll;
yhm_edit.SetFocus;
end;
close;
end;
end else
begin
showMessage('请输入登录用户名与密码!');
yhm_edit.SelectAll;
end;
end;end.
每次输入密码与用户名就出现个错误'LIST INDEX OUT OF BOUNDS'应如何解决,高手出手啦
mainform.MainMenu1.Items[a].Items[b].Visible:=true;
中的一个下标值,超出了你的已存在下标最大值,导致的问题.
....
Exception
...
End;
begin
mainform.MainMenu1.Items[a].Visible:=true;
mainform.MainMenu1.Items[a].Items[b].Visible:=true;
next;
end;
什么意思啊?你要加菜单的话,动态添加才能用啊。
....
Exception
...
End;
Parameters.ParamByName('mm').Value:=mm;
这里会不会有问题呢?
begin
First;
while not eof do
把上面改成
if adoquery1.recordcount>0 then
begin
adoquery1.First;
while not adoquery1.eof do 试试。
可能是你statusbar1没有初始化
你看看object Ttreeview中的statubar1的panels下面有没有0-tstatuspanels,如没有的话,就是这里出错,只要add就可以了。
另外一种可能,就如上面的分析啦