读书人

关于动态菜单的有关问题!

发布时间: 2012-04-12 15:46:35 作者: rapoo

关于动态菜单的问题!!!
我设置了一个全局变量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中,就不需要用变量了
...

Delphi(Pascal) code
  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; 

读书人网 >.NET

热点推荐