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, 算 ...
随机推荐
- softmax+交叉熵
1 softmax函数 softmax函数的定义为 $$softmax(x)=\frac{e^{x_i}}{\sum_j e^{x_j}} \tag{1}$$ softmax函数的特点有 函数值在[0 ...
- zabbix发送报警的脚本
zabbix报警媒介:自定义脚本Custom alertscripts 邮件报警准备工作:安装sendEmail zabbix-server 的 配置文件 /etc/zabbix/zabbix_ser ...
- Nginx Location规则
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令 ...
- 015-Zabbix自动发现和自动注册
前言 对于监控服务器越来越多的情况,如果还单独一个一个添加,那效率也太低,因此就要实现批量添加监控服务器的操作,Zabbix提供两种批量自动监控的方式: 自动发现:由服务端主动发起,Zabbix ...
- 005-监控项item详解,手动创建item实例
模板里的监控项都可以用 zabbix-get 命令执行 来获取相应的值,方法如下: [root@linux-node2 ~]# zabbix_get -s 192.168.1.230 -k agent ...
- Linux日常之命令grep
命令grep简介 利用该命令在文本中查找指定的字符串,是Linux中最常用的文本处理工具之一. 命令grep与正则表达式结合使用时,功能会非常强大. 命令grep会在文本文件中按照指定的正则表达式进行 ...
- 二叉树中序遍历,先序遍历,后序遍历(递归栈,非递归栈,Morris Traversal)
例题 中序遍历94. Binary Tree Inorder Traversal 先序遍历144. Binary Tree Preorder Traversal 后序遍历145. Binary Tre ...
- jmeter使用jdbc获取注册验证码进行注册
自动化工具测试注册功能时,往往会遇到验证码,这个烦人的验证码怎么能够解决掉呢? 通常有两种方法 让开发禁用注册码,或在测试环境写个固定的验证码 在jmeter中用 jdbc获取数据库中验证码 今天通过 ...
- 【ipc-mq】根据mq的key查看使用进程
使用ipcs -q可以得到key与msqid的对应关系,从而找到msgid webadmin@172.172.179.3:/usr/local/webapps/test_ma[17:17:36]$ i ...
- Linux 环境下 jar 加解密命令?
1.源码打jar包 jar -cvf demo-source.jar -C src/ . > log.txt 2.编译字节打jar包 jar -cvf demo-class.jar -C bin ...