关于动态菜单的问题!!!
我设置了一个全局变量s取得打开文本文件的名称,但是总是最后一个文件的名称
请看看以下代码,高人们给我个正确答案。
我是delphi初学者,请前辈们多多指教。
代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, shellapi, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Button1: TButton;
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure MainMenu1Change(Sender: TObject; Source: TMenuItem;
Rebuild: Boolean);
procedure Button1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure exe;
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
procedure TForm1.exe;
begin
memo1.Lines.LoadFromFile(s);
end;
procedure TForm1.N2Click(Sender: TObject);
var
QQ:Tmenuitem;
begin
if OpenDialog1.Execute then
begin
s:=opendialog1.FileName;
QQ:=Tmenuitem.Create(nil);
QQ.Caption:=OpenDialog1.FileName;
MainMenu1.Items.Items[0].Insert(2,QQ);
memo1.Lines.LoadFromFile(opendialog1.FileName);
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.MainMenu1Change(Sender: TObject; Source: TMenuItem;
Rebuild: Boolean);
var
i:integer;
begin
for i:=2 to mainmenu1.Items.Items[0].Count-3 do
begin
mainmenu1.Items.Items[0].Items[i].OnClick:=button1.OnClick;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
exe;
end;
procedure TForm1.N4Click(Sender: TObject);
var
i:integer;
begin
for i:=2 to mainmenu1.Items.Items[0].Count-3 do
begin
mainmenu1.Items.Items[0].Items[i].OnClick:=mainmenu1.Items.Items[0].Items[0].OnClick;
end;
self.Close;
end;
end.
代码很简单,是从delphi程序开发范例宝典中获取的。
我的可用分很少,请见谅。
。
[解决办法]
那是变量S保存的永远是最后一个值
既然文件路径是保存在菜单的caption中,就不需要用变量了
...
private { Private declarations } public { Public declarations } procedure MClick(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MClick(Sender: TObject);begin if fileexists(Tmenuitem(Sender).Caption) then memo1.Lines.LoadFromFile(Tmenuitem(Sender).Caption);end;procedure TForm1.N2Click(Sender: TObject);var QQ:Tmenuitem;begin if OpenDialog1.Execute then begin QQ:=Tmenuitem.Create(nil); QQ.Caption:=OpenDialog1.FileName; MainMenu1.Items.Items[0].Insert(2,QQ); QQ.OnClick:=MClick; MClick(QQ); end;end;procedure TForm1.N3Click(Sender: TObject);begin close;end;procedure TForm1.FormCreate(Sender: TObject);begin MainMenu1.AutoHotkeys:=maManual;end;