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, 算 ...
随机推荐
- 如何计算java程序运行花了多长时间。加时间戳。
long start = System.currentTimeMillis(); // 记录起始时间 try { Thread.sleep(5000); // 线程睡眠5秒,让运行时间不那么小 } c ...
- 关于&联系我
本文已迁移至: Github博客:https://coco5666.github.io/blog/about Gitee博客:https://coco56.gitee.io/blog/about 博客 ...
- apache traffic server安装
wget http://mirrors.hust.edu.cn/apache/trafficserver/trafficserver-7.1.1.tar.bz2 tar -jxvf trafficse ...
- Vim安装插件支持 MarkDown 语法、实时预览等
使用 markdown-preview.vim 插件可以实时通过浏览器预览 markdown 文件 使用该插件需要 vim 支持py2/py3 安装 使用 vim-plug: 在 .vimrc 或 i ...
- 安装wordpress的过程
1 首先安装lamp.在安装php时,由于ubuntu16.04源中自带的是php7,所以需要直接安装 apt-get install phpapt-get install libapache2-mo ...
- web页面请求历程
web页面请求历程 1)准备DHCP,UDP,IP和以太网 客户端要访问www.google.com的网站. 首先客户端要与网络相接,没有IP地址地址就不能做什么事情,所以客户端采取的一个网络相关的动 ...
- CentOS 基础命令
命令格式: 命令字 选项 参数1 参数2 ..... CentOS 7 主目录介绍 [xbb@localhost ~]$ ls -l /total 16lrwxrwxrwx. 1 root ro ...
- useradd 创建用户
useradd 创建用户 1.命令功能 useradd 创建一个新用户或者更改默认新用户信息. 2.语法格式 useradd option username useradd -D option ...
- web渗透系列--信息收集
信息收集对于渗透测试前期来说是非常重要的,因为只有我们掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测.正所谓,知己知彼百战百胜! 信息收集的方式可以分为两种:主动和被动. 主 ...
- 前端每日实战:141# 视频演示如何用 CSS 的 Grid 布局创作一枚小狗邮票
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/BOeEYV 可交互视频 此视频是可 ...