在Form8动态新建Form1里的菜单,Form8窗体释放后,Form1里新建的菜单不见了
procedure TForm8.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TForm8.Button3Click(Sender: TObject);//新建的代码
var mi:tmenuitem;
i,maxid:integer;
begin
//新建菜单里的变化
For i:=form1.PopupMenu1.Items[0].Count-3 downto 0 do
begin form1.PopupMenu1.Items[0].Delete(i);
end; with form1.adoquery1 do
begin
sql.Clear;
sql.Add('select max(id) as exp1 from templet');
open;
first;
maxid:=fieldbyname('exp1').AsInteger;
end;
for i:= maxid-1 downto 0 do
begin
if tcheckbox(panel1.Controls[i]).Checked then
begin mi:=tmenuitem.Create(self);
mi.Caption:=tcheckbox(panel1.Controls[i]).Caption ;
mi.OnClick:=commandclick;
mi.Tag:=i+1;
form1.PopupMenu1.Items[0].Insert(0,mi);
with form1.adoquery1 do
begin
sql.Clear;
sql.Add('select * from templet where id='+inttostr(i+1));
open;
first;
edit;
fieldbyname('checked').AsInteger:=1;
post;
close;
end;
end else with form1.adoquery1 do
begin
sql.Clear;
sql.Add('select * from templet where id='+inttostr(i+1));
open;
first;
edit;
fieldbyname('checked').AsInteger:=0;
post;
close;
end;
end; close;
end;
你的MI应该放到FORM1中,或者写一个单独的UNIT来声明
生命周期=procedure TForm8.Button3Click(Sender: TObject);的周期
也就是说这个过程结束了就释放了,呵呵
var
Form1: TForm1;
mi:tmenuitem;
真是怪事!!
mi:=tmenuitem.Create(Application);
FPopMenu := TPopupMenu.Create(self); FMenuRefresh := TMenuItem.Create(FPopMenu);
FMenuRefresh.Caption := '刷新(&R)';
FMenuRefresh.OnClick := doRefresh;
FPopMenu.Items.Add(FMenuRefresh); self.PopupMenu := FPopMenu;
...