动态菜单设计,麻烦大啦。(50分)

  • 主题发起人 主题发起人 TaoChina
  • 开始时间 开始时间
T

TaoChina

Unregistered / Unconfirmed
GUEST, unregistred user!
拜托,我想要实现像QQ皮肤一样的动态菜单,目前动态菜单已创建;
但是,我怎么实现选中的菜单Checked,而原来选中的菜单Unchecked?
就是菜单前面的勾选符号?
 
MyMenu : TMenuItem;
在 MyMenu.OnClick 事件中:
MyMenu.Checked:=not MyMenu.Checked;
 
这种方法试过了,不能实现。因为我的菜单有多项。Please,给个代码先!
 
注意GroupIndex.[:)]
 
你可以用一个变量记录原来被checked的菜单项,选中别的菜单项后,把原来的unchecked,
再checked选中的菜单项。
 
也不能这么干,具体给个例子先!
 
1.选择一个菜单时记住菜单项,如:5
2.用一个循环将所有菜单项UnChecked
3.将第5菜单项Checked
以上方法在我的『网聊』中已经实现。
http://ph11.126.com
 
给个例子,具体功能可以自己改
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
sitemenu:tpopupmenu;
procedure createpopupmenu;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure tform1.CreatePopupMenu();
var
NewItem:TMenuItem;
begin
SiteMenu:=TPopupMenu.Create(Self);
SiteMenu.AutoHotkeys:=maManual;
//加入弹出菜单项
NewItem:=TMenuItem.Create(Self);
NewItem.Caption:='编辑站点';
// NewItem.OnClick:=EditSiteMenuClick;
SiteMenu.Items.Add(NewItem);

NewItem:=TMenuItem.Create(Self);
NewItem.Caption:='删除站点';
// NewItem.OnClick:=DelSiteMenuClick;
SiteMenu.Items.Add(NewItem);

NewItem:=TMenuItem.Create(Self);
NewItem.Caption:='删除连接';
// NewItem.OnClick:=DelSiteLinkMenuClick;
SiteMenu.Items.Add(NewItem);

NewItem:=TMenuItem.Create(Self);
NewItem.Caption:='查询站点';
// NewItem.OnClick:=QuerySiteMenuClick;
SiteMenu.Items.Add(NewItem);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
createpopupmenu;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if sitemenu<>nil then
sitemenu.free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
sitemenu:=nil;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (button=mbright) and (sitemenu<>nil) then
begin
sitemenu.Popup(mouse.CursorPos.x,mouse.CursorPos.y);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
mt:tmenuitem;
begin
mt:=sitemenu.Items.Find('查询站点');
mt.Checked:=not mt.Checked;
end;

end.
 
>>xiao_min
你的例子是对的。但是,我的菜单是通过构件继承的,有所不同。
现在我自己解决了。谢了!
 
后退
顶部