Delphi XE7实现的任意位置弹出菜单
Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件。看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自己在网上找了一个例子,修改后实现了我的在任意位置弹出菜单需求!全部代码如下:
{
功能:DelphiXE7里面实现的弹出菜单
------------------------------------------------------------------------------
说明:实现在任意位置显示弹出菜单功能。
------------------------------------------------------------------------------
注意:
1,rcPopup为弹出菜单最外层的容器,在正式使用时候,"visiable"属性建议设置为false。
在设计菜单时候,把这个属性改为true,那样可以可视化设计菜单。
2,"main_old.pas"为原作者写的代码,对原作者辛苦工作表示感谢。
------------------------------------------------------------------------------
原作者:不详,从大富翁论坛下载到此代码
修改者:孙玉良 QQ:14667479 Email:sunylat@163.com 修改时间:2014/11/20 00:47
------------------------------------------------------------------------------
开发工具:Delphi XE7
测试手机:华为荣耀X1
}
unit main;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Effects,
FMX.Objects, FMX.StdCtrls, FMX.Filter.Effects, FMX.Ani;
type
TForm7 = class(TForm)
ToolBar1: TToolBar;
sbDropDown: TSpeedButton;
rcPopup: TRectangle;
ShadowEffect1: TShadowEffect;
lbHome: TLabel;
imHome: TImage;
FillRGBEffect1: TFillRGBEffect;
imSeparator: TImage;
Image1: TImage;
lbOption2: TLabel;
Image2: TImage;
FillRGBEffect2: TFillRGBEffect;
Image3: TImage;
lbOption1: TLabel;
Image4: TImage;
FillRGBEffect3: TFillRGBEffect;
lbOption3: TLabel;
Image5: TImage;
FillRGBEffect4: TFillRGBEffect;
PopupAnimation: TFloatAnimation;
procedure sbDropDownClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
// {
// 功能: 执行显示弹出菜单操作
// 参数:
// menuX:// 菜单显示位置的X值
// menuX:// 菜单显示位置的Y值
// isShowMenu:是否显示菜单
// }
// procedure DoShowPopMenu(menuX, menuY: Single; var isShowMenu: boolean);
procedure DoShowPopMenu(menuX, menuY: Single; var popMenu: TRectangle;
var popAnimation: TFloatAnimation; var isShowMenu: boolean);
end;
var
Form7: TForm7;
isShowPopMenu: boolean; // 是否显示菜单
implementation
{$R *.fmx}
// 演示如何使用
procedure TForm7.sbDropDownClick(Sender: TObject);
var
menuX, menuY: Single; // 菜单显示位置的X和Y值
begin
{ 测试数据1 }
// 测试默认菜单X值
menuX := 1;
// 测试默认菜单Y值
menuY := ToolBar1.Height;
{ 测试数据2 }
menuX := menuX + 20; // 菜单显示位置的X值
menuY := menuY + 20; // 菜单显示位置的Y值
// 执行显示弹出菜单操作
self.DoShowPopMenu(menuX, menuY, rcPopup, PopupAnimation, isShowPopMenu);
end;
// 执行显示弹出菜单操作
procedure TForm7.DoShowPopMenu(menuX, menuY: Single; var popMenu: TRectangle;
var popAnimation: TFloatAnimation; var isShowMenu: boolean);
begin
// 如果要执行不显示菜单操作
if isShowMenu = false then
begin
// 设置是否显示菜单布尔值为true,为了下次显示菜单判断用
isShowMenu := True;
// 设置菜单显示位置X值
popMenu.Position.X := menuX;
// 设置菜单显示位置Y值
popMenu.Position.Y := menuY;
// 设置菜单可见
popMenu.Visible := True;
{ 暂时没弄清楚下面这两个参数含义,只是通过测试知道这样设置达到预期效果了 }
// 设置菜单打开动画起始位置
popAnimation.StartValue := popMenu.Position.Y;
// 设置菜单打开动画结束位置
popAnimation.StopValue := popMenu.Position.Y;
// 启动动画
popAnimation.Start;
end
else
begin
// 设置是否显示菜单布尔值为false,为了下次显示菜单判断用
isShowMenu := false;
// 设置菜单显示位置X值
popMenu.Position.X := menuX;
// 设置菜单显示位置Y值
popMenu.Position.Y := menuY;
{ 暂时没弄清楚下面这两个参数含义,只是通过测试知道这样设置达到预期效果了 }
// 设置菜单打开动画起始位置
popAnimation.StartValue := popMenu.Position.Y;
// 设置菜单打开动画结束位置
popAnimation.StopValue := popMenu.Position.Y;
// 启动动画
popAnimation.Start;
// 设置菜单不可见
popMenu.Visible := false;
end;
end;
end.
源代码下载:http://dl5.csdn.net/fd.php?i=878681887197295&s=1031a6c70ac5628e21f978f48da52987
转载于:https://www.cnblogs.com/sunylat/p/6217652.html
Delphi XE7实现的任意位置弹出菜单相关推荐
- [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
现在在做一个WEB的站内消息系统, 想在用户登陆时, 如果有未读短消息 则从工具栏位置弹出一徐徐上升的窗口 显示提醒信息! <script language="JavaScript&q ...
- 怎样在Delphi中屏蔽Flash控件的右键弹出菜单
关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些, ...
- android菜单键变成箭头,Android:DropPopMenu — 显示位置跟随操作按钮显示的带箭头的弹出菜单(转载,写的很好)...
转载请注明出处:http://blog.csdn.net/hmyang314/article/details/70920295DropPopMenu 显示位置跟随操作按钮显示的带箭头的弹出菜单 Git ...
- Android屏幕随机位置弹出View
最近项目中人脸注册需要尽量多的捕捉人脸特征,就要想办法使得人脸在注册中呈现不同角度,于是想到在屏幕内随机位置弹出一个吸引注意力的View. 本文中主要用到: 1.view.setX();setY()方 ...
- popupmenu java_Java基于JPopupMenu实现系统托盘的弹出菜单,解决PopupMenu弹出菜单中文乱码...
本人萌新,利用业余时间学习Java.最近在写一个GUI程序的时候遇到一个问题,系统托盘创建弹出菜单中文乱码,网上搜索很多内容都没有找到解决方案,现将个人解决方案分享给大家,希望有所帮助 一.Popup ...
- vb在 ListBox 之中点击右键弹出菜单
'1.API 的声明: Const LB_ITEMFROMPOINT = &H1A9 Private Declare Function SendMessage Lib "user32 ...
- 蓝光影视媒体菜单结构浅析[原版加字幕保留花絮/主菜单/弹出菜单并分割对应PS3]...
虽然标题说浅析,但实际内容可能较复杂,修改原盘现阶段也是很烦琐的工作 本文写给有兴趣修改原盘加字幕流或音频流的网友看的,没兴趣的可以不看了 本文主要以菜单基本类型为例子,其他情况实例操作以后再补充说明 ...
- 选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单
菜单控件<Menu > 选项菜单(Option Menu) 单击Menu实体按钮弹出,android中把它叫做option menu 上下文菜单(ContextMenu 是Menu的子接口 ...
- vc+如何添加右键弹出菜单
2019独角兽企业重金招聘Python工程师标准>>> 一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图 ...
最新文章
- mysql yearweek 日期不准_Mysql 中,WEEK 与YEARWEEK函数的参数问题
- Java学习笔记(1)——概述
- mybatisplus修改单个属性_第二节	官封弼马温——类的属性
- Windows下载、安装、卸载Redis
- java忽略引号中的分隔符_java – 令牌化但忽略引号内的分隔符
- MTK MODEM(1)--- MTK平台NV基本功能与操作
- JavaScript 开发工具webstrom使用指南
- linux 在文件中增加空行,linux – 在不同组的行之间添加空行
- Java String类的相关操作
- 2016年度太和顾问北京高科技行业人力资本数据信息发布
- 苹果M1芯片兼容mysql吗_苹果m1芯片相当于什么水平
- 端口映射内网穿透——网络通
- 【干活推送 】人工智能(AI)教程
- Pycharm生成.exe文件
- 国美易卡不需要扩展,国美易卡系统维护复杂
- linux下写脚本时-gt或-lt是什么意思?
- 计算机 语言学 交叉,计算机和语言学
- 洛谷P3426 [POI2005]SZA-Template 题解
- Java游戏开发 —— 象棋
- Java 判断平衡二叉树