Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu
其中的 TMainMenu 暂不能应用其他样式; TMenuBar 只有一个值得注意 UseOSMenu 属性.
控件 PopupMenu 属性用于指定右键菜单.
暂时无法直接为窗体指定右键菜单, 因为窗体现在没有 PopupMenu 属性; 我想到的办法是在窗体上覆盖一个 TPanel 或 TRectangle:
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.Align := TAlignLayout.alClient;
Panel1.StyleLookup := StyleLookup;
Panel1.PopupMenu := PopupMenu1;
end;
也可通过 TPopupMenu 的 Popup() 方法:
procedure TForm1.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
pt: TPointF;
begin
inherited;
if Button = TMouseButton.mbRight then
begin
pt := PointF(x,y);
pt := ClientToScreen(pt);
PopupMenu1.Popup(pt.X, pt.Y);
end;
end;
Popup() 方法用于控件的例子(如 TRectangle):
procedure TForm1.Rectangle1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
pt: TPointF;
begin
if Button = TMouseButton.mbRight then
begin
pt := PointF(x,y);
pt := TControl(Sender).LocalToAbsolute(pt);
pt := ClientToScreen(pt);
PopupMenu1.Popup(pt.X, pt.Y);
end;
end;
TPopupMenu 的功能很简单, 更多需要在 TMenuItem 中.
以下测试都需要在空白窗体上先放置 Rectangle1、PopupMenu1.
动态添加菜单项:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item2';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := '-';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item3';
end;
end;
嵌套菜单项:
procedure TForm1.FormCreate(Sender: TObject);
var
item: TMenuItem;
begin
Rectangle1.PopupMenu := PopupMenu1; item := TMenuItem.Create(Self);
item.Parent := PopupMenu1;
item.Text := 'Item1'; with TMenuItem.Create(Self) do
begin
Parent := item;
Text := 'Item1_1';
end;
with TMenuItem.Create(Self) do
begin
Parent := item;
Text := 'Itme1_2';
end; with TMenuItem.Create(Self) do
begin
Parent := PopupMenu1;
Text := 'Item2';
end;
end;
指定快捷键:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
ShortCut := scCtrl or Byte('A'); //Ctrl + A
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item2';
ShortCut := scShift or scCtrl or scAlt or Ord('A'); //Shift + Ctrl + Alt + A
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := '-';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item3';
ShortCut := ; //F1
end;
end;
复选菜单项:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
AutoCheck := True;
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item2';
AutoCheck := True;
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := '-';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item3';
AutoCheck := True;
end;
end;
单选(分组)菜单项:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
AutoCheck := True;
RadioItem := True;
GroupIndex := ;
IsChecked := True;
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item2';
AutoCheck := True;
RadioItem := True;
GroupIndex := ;
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := '-';
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item3';
AutoCheck := True;
RadioItem := True;
GroupIndex := ;
end;
with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item4';
AutoCheck := True;
RadioItem := True;
GroupIndex := ;
end;
end;
菜单文本格式:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
Font.Style := [TFontStyle.fsBold, TFontStyle.fsItalic];
end;
end;
图标:
procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(Self) do
begin
Parent := PopupMenu1;
Text := 'Item1';
Bitmap.LoadFromFile('c:\temp\test.png');
end;
end;
指定事件:
unit Unit1; interface uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Menus, FMX.Objects; type
TForm1 = class(TForm)
Rectangle1: TRectangle;
PopupMenu1: TPopupMenu;
procedure FormCreate(Sender: TObject);
procedure ItemOnClick(Sender: TObject);
end; var
Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject);
begin
Rectangle1.PopupMenu := PopupMenu1; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item1';
OnClick := ItemOnClick;
end; with TMenuItem.Create(PopupMenu1) do
begin
Parent := PopupMenu1;
Text := 'Item2';
OnClick := ItemOnClick;
end;
end; procedure TForm1.ItemOnClick(Sender: TObject);
begin
ShowMessage(TTextControl(Sender).Text);
end; end.
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu的更多相关文章
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...
- Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...
- Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...
- Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSma ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
- Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...
- Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它
Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...
随机推荐
- .net中对象序列化技术
序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...
- 22_2mybatis——CURD
1.CURD操作 第一步:创建maven工程并导入坐标 <?xml version="1.0" encoding="UTF-8"?> <pro ...
- netlink对中断的支持
http://blog.chinaunix.net/uid-24227137-id-3025783.html https://blog.csdn.net/tycoon1988/article/deta ...
- 用小程序做一个类似于苹果AssistiveTouch功能
一.首先我先介绍一下,我们要做一个什么样的项目功能 项目功能就是一个音频点击播放,当点击为播放的状态时,一个音频的动图出现,而且是可以跟随着手指的滑动而滑动,而且,在滑动动图的时候,当前下的页面是不可 ...
- AI应该享有与动物一样的权利吗?
全世界的大学都在进行人工智能(AI)的重大研究,艾伦研究所(Allen Institute)等组织以及Google和Facebook等高科技公司.可能的结果是,我们很快将拥有与小鼠或狗一样高的认知能力 ...
- HDU-6668-Polynomial(数学)
链接: https://vjudge.net/problem/HDU-6668 题意: 度度熊最近学习了多项式和极限的概念. 现在他有两个多项式 f(x) 和 g(x),他想知道当 x 趋近无限大的时 ...
- 对TypeScript进行研究
1.npm install -g typescript 在编辑器,将下面的代码输入到greeter.ts文件里: function greeter(person) { return "Hel ...
- jetcache:在Spring Boot中怎么玩?
- python Tkinter 编程
Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 Py ...
- POJ 2182 Lost Cows (树状数组 && 二分查找)
题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...