关于popumenup的问题(100分)

  • 主题发起人 主题发起人 notnoname
  • 开始时间 开始时间
N

notnoname

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在StringGrid的右键菜单上动态添加一个新的item,我的代码如下
var NewItem:TMenuItem;
begin
NewItem:TMenuItem.Create(StringGrid.PopupMenu);
NewItem.Caption := 'Menu Item ';
NewItem.OnClick := PopupMenuItemsClick;// assign it an event handler
StringGrid.PopupMenu.Items.Add(NewItem);
end;
运行时出错,我改怎么办?
 
參考一下:
var PopupMenu1:tPopupMenu;
n1: TMenuItem;
begin
PopupMenu1:=tPopupMenu.create(self);
n1:=TMenuItem.Create(nil);
n1.Caption := 'Menu Item ';
PopupMenu1.Items.Add(n1);
n1.OnClick := PopupMenuItemsClick
dbgrid1.PopupMenu:=PopupMenu1;
end;
 
var NewItem:TMenuItem;
begin
[blue] NewItem:TMenuItem.Create(StringGrid.PopupMenu);[/blue]
[red] // 应该是NewItem := TMenuItem.Create(StringGrid.PopupMenu);吧.[/red]
NewItem.Caption := 'Menu Item ';
NewItem.OnClick := PopupMenuItemsClick;// assign it an event handler
StringGrid.PopupMenu.Items.Add(NewItem);
end;

我在Form的OnCreate中加入该代码,没有出错.
看看你是在什么地方加入这段代码的.
 
to zhao xiao bo:
我的意思是增加一个item而不是把整个popupmenu都换掉。
to bluerain:
编译的时候是没错,运行的时候出错了。
 
老大,我这里一切正常,你那边有什么错误?
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem:TMenuItem;
begin
NewItem:=TMenuItem.Create(StringGrid.PopupMenu);
NewItem.Caption := 'Menu Item ';
NewItem.OnClick := PopupMenuItemsClick;
StringGrid.PopupMenu.Items.Add(NewItem);
end;
 
问题应该不是在这里,你看看是在什么事件调用上面代码的,PopupMenuItemsClick干了什么
事情.
下面是我测试的例子,没有问题:
form1上放一个stringgrid1,popupmenu1, 设置stringgrid的popupmenu为popupmenu1;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
PopupMenu1: TPopupMenu;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure PopupMenuItemsClick(sendor:tobject);
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var NewItem:TMenuItem;
begin
NewItem := TMenuItem.Create(StringGrid1.PopupMenu);
NewItem.Caption := 'Menu Item ';
NewItem.OnClick := PopupMenuItemsClick;// assign it an event handler
StringGrid1.PopupMenu.Items.Add(NewItem);
end;

procedure TForm1.PopupMenuItemsClick(sendor: tobject);
begin
showmessage('abc');
end;
 
to bluerain:
您可能理解我的意思了,stringgri自己有popumenu,我不想把她替换掉,我只是想在上边增加自己
的item。
 
是啊,我就是在上边增加item啊.
我的意思是你看看是否是别的地方出问题了,比如触发的事件等.
如果还是没有解决,把代码给我寄一份,应该明天中午前就可以解决了.
sunyu@hzcnc.com
 
to bluerain:
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
PopupMenu1: TPopupMenu;//我的意思是说不要这个popupmenu
...
TStringGrig处于编辑状态的时候自身是有一个popupmenu的,我想不替换她只是在她上边
加几个按钮。
十分感谢您的关注。

 
终于搞清楚你的意思了,呵呵.
那个popupmenu是系统的.不能这么用. 实现起来也比较麻烦.
我去试试看(其实是去查MSDN了,[:D]).
不过不要抱太大希望.[:D],心里没底
 
老大啊,我等的花儿都谢了。
 
给分吧。也不能老拖着!
 
后退
顶部