Delphi 菜单的应用(系统菜单添加一项、主菜单增加历史记录、弹出菜单的动态合并、菜单中画图、显示状态)
来源:互联网 发布:opencms访问数据库 编辑:程序博客网 时间:2024/06/05 11:15
知识简介:
Windows菜单可以分为系统菜单、主菜单、弹出菜单三种。
一、往系统菜单中添加菜单项
//1、在FormCreate中往系统菜单中添加自己的菜单
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
i := GetSystemMenu(Handle,False);
AppendMenu(i,mf_separator,0,nil); //添加分割线
AppendMenu(i,mf_string,100,'我的菜单(&E)'); //添加我的菜单
end;
//2、设置自己定义的菜单的响应事件
声明为: procedure sysmenu(var msg: TWMMENUSELECT); Message wm_MENUSELECT;
procedure TForm1.sysmenu(var msg:TWMMENUSELECT);
begin
if msg.IDItem = 100 then
ShowMessage('我的菜单')
else
inherited;
end;
二、设置主菜单中添加历史信息
//1、点击【打开】按钮,选择文件
procedure TForm1.pmiN2Click(Sender: TObject);
var
TempMItem: TmenuItem;
begin
TempMItem := TmenuItem.Create(nil);
if DlgOpen1.Execute then
begin
TempMItem.Caption := DlgOpen1.FileName;
//往【主菜单】中的【第一列菜单组】中的【第三行】插入新菜单项
mm1.Items.Items[0].Insert(2,TempMItem);
end;
end;
//2、设置相应的点击事件
procedure TForm1.mm1Change(Sender: TObject; Source: TMenuItem;
Rebuild: Boolean);
var
i: Integer;
begin
//为新建的菜单指定事件
for i:=2 to mm1.Items.Items[0].Count - 3 do
begin
mm1.Items.Items[0].Items[i].OnClick := Btn1.Onclick;
end;
end;
//3、响应菜单的事件
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage(TMenuItem(Sender).Caption);
end;
三、菜单动态合并、
//1、pm1弹出菜单中添加pm2弹出菜单的所有项
procedure TForm1.btn2Click(Sender: TObject);
begin
pm1.Items.Add(pm2.Items);
end;
//2、在当前按钮的位置显示弹出菜单,主要是坐标的编写
procedure TForm1.btn3Click(Sender: TObject);
begin
pm1.Popup(Form1.Left + btn3.Left,Form1.Top + btn3.Top+ btn3.Height);
end;
四、主菜单中左侧画图片
//1、设置私有变量Private中添加MBitmap :TbitMap;
//2、加载图片
procedure TForm1.FormCreate(Sender: TObject);
begin
MBitmap := TBitmap.Create;
MBitmap.LoadFromFile(ExtractFileDir(Application.ExeName)+ '\pic\2.bmp');
end;
//3、释放图片
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MBitmap.Free;
end;
//4、画图片
procedure TForm1.pmiN6AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; State: TOwnerDrawState);
var
mRect,cRect: Trect;
begin
aCanvas.TextWidth(TMenuItem(Sender).Caption); //文字的宽度
//画图片
Mrect := Rect(0,0,MBitmap.Width,MBitmap.Height);
aCanvas.Draw(Mrect.Left,aRect.Top-aRect.Bottom,mBitmap);
//写主菜单中菜单项的文字
cRect := Rect(aRect.Left + mBitmap.Width+2,aRect.Top,aRect.Right,aRect.Bottom);
//也可以使用DrawText,但是区域只会是文字的区域
aCanvas.TextRect(cRect,aRect.Left + mBitmap.Width+2,aRect.top + 3,TMenuItem(Sender).Caption);
//文字背景透明
SetBkmode(aCanvas.Handle,TRANSPARENT);
//在图片中画文字,使上面的TextRect方法会覆盖图片
DrawText(aCanvas.Handle,'我'+#13+'的'+#13+'菜'+#13+'单',-1,mRect,DT_LEFT+DT_Center);
end;
五、设置主菜单在不同的状态下显示情况
State的状态有:
odSelected:被选中;
odGrayed:为huis;
odDisabled:不可用;
odChecked:被选中;
odFocused:处于焦点;
odDefault: 默认状态;
odHotLine:高亮显示;
odInactive:菜单及其关联的子菜单处于非活动状态;
odNoAccel:在菜单被绘制时,忽略加速键;
odNoFocusRect:不显示焦点区域;
odComboBoxEdit:组合框被绘制时发生;
odReserved1,odReserved2:保留;
//在AdvancedDrawItem中设置不同状态下按钮的颜色
procedure TForm1.pmiN7AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; State: TOwnerDrawState);
begin
ACanvas.Brush.Color := clwhite;
if odSelected in State then
begin
ACanvas.Font.Color := clRed;
ACanvas.Pen.Color := clBlue;
ACanvas.Rectangle(Rect(1,(TMenuItem(Sender).Tag-1)*20,ARect.Right-1,
(TMenuItem(Sender).Tag-1)*20+15));
end
else
begin
ACanvas.Font.Color := clBlack;
ACanvas.Pen.Color := clWhite;
ACanvas.Rectangle(Rect(1,(TMenuItem(Sender).Tag-1)*20,ARect.Right-1,
(TMenuItem(Sender).Tag-1)*20+15));
end;
ACanvas.TextRect(ARect,aRect.Left+2,aRect.top+3,TMenuItem(Sender).Caption);
end;
六、设置拉伸菜单
设置Visible属性
- Delphi 菜单的应用(系统菜单添加一项、主菜单增加历史记录、弹出菜单的动态合并、菜单中画图、显示状态)
- 主菜单中"窗口"子菜单的简单实现办法
- Delphi动态添加菜单
- MFC : 给主菜单动态添加删除一级子菜单
- 3ds max 软件主菜单中添加新的菜单
- VC 弹出菜单 动态添加二级菜单
- 用Delphi为窗体的系统菜单中添加选项
- 动态创建菜单,添加菜单,执行自己的菜单事件
- 动态创建菜单,添加菜单,执行自己的菜单事件
- Delphi中添加窗体系统菜单和菜单点击处理
- Delphi在系统菜单中添加菜单项
- Delphi在系统菜单中添加菜单项
- 在VB中动态添加弹出菜单
- 替换系统弹出的菜单
- 选项菜单之主菜单
- 如何向系统菜单中动态添加菜单项
- [VC MFC] 修改主菜单和子菜单的文本
- 选择主菜单,自动全选子菜单的checkbox操作
- OnPaint()函数的作用原理
- 根据控件ID得到句柄
- J2EE系统优化的几点体会
- 在Windows下sqlplus完全正常,可是到Linux下,sqlplus中文显示就出问题了,总是显示“??”,这个问题又怎么解决呢?
- JAVA文件操作
- Delphi 菜单的应用(系统菜单添加一项、主菜单增加历史记录、弹出菜单的动态合并、菜单中画图、显示状态)
- 一个入职小半年的新人的感悟
- devexpress 控件不见了
- 提高创新能力及创造性思维
- 页面执行完成后进行信息显示
- google搜索技巧
- JQUERY 获取URL上的参数
- Shell重定向&>file、2>&1、1>&2的区别
- Jquery去掉JSP页面中 text,password等输入内容的空格