Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件。看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自己在网上找了一个例子,修改后实现了我的在任意位置弹出菜单需求!全部代码如下:

{
功能:DelphiXE7里面实现的弹出菜单
------------------------------------------------------------------------------
说明:实现在任意位置显示弹出菜单功能。
------------------------------------------------------------------------------
注意:
1,rcPopup为弹出菜单最外层的容器,在正式使用时候,"visiable"属性建议设置为false。
在设计菜单时候,把这个属性改为true,那样可以可视化设计菜单。 2,"main_old.pas"为原作者写的代码,对原作者辛苦工作表示感谢。 ------------------------------------------------------------------------------
原作者:不详,从大富翁论坛下载到此代码
修改时间: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 := ;
// 测试默认菜单Y值
menuY := ToolBar1.Height; { 测试数据2 }
menuX := menuX + ; // 菜单显示位置的X值
menuY := menuY + ; // 菜单显示位置的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

Delphi XE7实现的任意位置弹出菜单的更多相关文章

  1. Swift实现封装PopMenu菜单,可在屏幕任意位置弹出

    效果图: 说明: 代码现已支持 Swift3 语法 使用介绍: 1.初始化位置 //frame 为整个popview相对整个屏幕的位置 箭头距离右边位置,默认15 //popMenu = SwiftP ...

  2. delphi怎样在关闭程序时弹出窗口?

    我想在关闭delphi编译的程序时,弹出“您是否确实要退出的窗口”点击否不退出,是退出 在主窗体的CloseQuery事件里,使用messagebox进行提示,根据选择的按钮对Canclose进行设置 ...

  3. 解决Mui中popover 顶部弹出菜单弹出位置不准确以及无法收回的问题

    前言 最近公司的项目转向使用Hbuilder开发移动端项目,其中想要通过在顶部标题栏加入弹出菜单的方式,来定位长列表的位置,如图所示. 问题 Mui的功能貌似还不是很完善,在使用这个弹出菜单的时候,发 ...

  4. 向上弹出菜单jQuery插件

    插件名:柯乐义英文名:Keleyijs文件名称:jquery.keleyi.js插件功能:该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单. 示例查看:http://keleyi.com/kel ...

  5. vc++ 如何添加右键弹出菜单

    一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...

  6. win32进阶之路:程序托盘图标+右键弹出菜单

     开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...

  7. web标准(复习)--4 纵向导航菜单及二级弹出菜单

    今天我们开始学习纵向导航菜单及二级弹出菜单,包含以下内容和知识点: 纵向列表 标签的默认样式 css派生选择器 css选择器的分组 纵向二级列表 相对定位和绝对定位 一.纵向列表纵向列表或称为纵向导航 ...

  8. Android 使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  9. 【Android】创建Popwindow弹出菜单的两种方式

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

随机推荐

  1. mybatis相对于ibatis的优势

    2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis.从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架.一个没人维护的框架注定被myba ...

  2. pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY'")

    在<Python数据挖掘-概念.方法与实践>一书的第3章实体匹配中,如果一路按照作者的代码及SQL语句进行配置运行的话,会出现如题目所示的错误.根据python脚本的执行错误提示显示,错误 ...

  3. Python 入门学习(壹)上机时间提醒

    基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 控制台版本 思路 Project 1 是一个时间提 ...

  4. (基于Java)算法之动态规划——矩阵连乘问题

    动态规划(Dynamic Programming):与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解.与分治法不同的是,适用于动态规划法求解 ...

  5. 19-python 自己建立词库并实现文章汉语词频统计

    首先在网上下载一个汉语词典的txt文件, 汉语词典 1.用正则去掉词语的解释,即提取出所有汉语词语: import re def getHanYuCi(st): p = re.compile(r'[. ...

  6. datagridview paging

    http://www.codeproject.com/Articles/211551/A-Simple-way-for-Paging-in-DataGridView-in-WinForm

  7. Win10正式版怎么关闭windows defender

    分步阅读 如何关闭Win10正式版系统所自带的"Windows Defender"程序呢?"Windows Defender"程序是Win10正式版系统所自带的 ...

  8. 想成为一名成功的UX设计师吗?做好这13件事情吧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 丢掉那些阻碍你前进的东西 每个人对成功的定义都不同.如果想在重要事情上取得成功,学会给予才是关键.只 ...

  9. html符号转换

    通常情况下,HTML会自动截去多余的空格.不管你加多少空格,都被看做一个空格.比如你在两个字之间加了10个空格,HTML会截去9个空格,只保留一个.为了在网页中增加空格,你可以使用 表示空格.最常用的 ...

  10. Spring boot——logback.xml 配置详解(二)

    阅读目录 1 根节点包含的属性 2 根节点的子节点 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 根节点<config ...