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实现的任意位置弹出菜单相关推荐

  1. [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...

    现在在做一个WEB的站内消息系统, 想在用户登陆时, 如果有未读短消息 则从工具栏位置弹出一徐徐上升的窗口 显示提醒信息! <script language="JavaScript&q ...

  2. 怎样在Delphi中屏蔽Flash控件的右键弹出菜单

    关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些, ...

  3. android菜单键变成箭头,Android:DropPopMenu — 显示位置跟随操作按钮显示的带箭头的弹出菜单(转载,写的很好)...

    转载请注明出处:http://blog.csdn.net/hmyang314/article/details/70920295DropPopMenu 显示位置跟随操作按钮显示的带箭头的弹出菜单 Git ...

  4. Android屏幕随机位置弹出View

    最近项目中人脸注册需要尽量多的捕捉人脸特征,就要想办法使得人脸在注册中呈现不同角度,于是想到在屏幕内随机位置弹出一个吸引注意力的View. 本文中主要用到: 1.view.setX();setY()方 ...

  5. popupmenu java_Java基于JPopupMenu实现系统托盘的弹出菜单,解决PopupMenu弹出菜单中文乱码...

    本人萌新,利用业余时间学习Java.最近在写一个GUI程序的时候遇到一个问题,系统托盘创建弹出菜单中文乱码,网上搜索很多内容都没有找到解决方案,现将个人解决方案分享给大家,希望有所帮助 一.Popup ...

  6. vb在 ListBox 之中点击右键弹出菜单

    '1.API 的声明: Const LB_ITEMFROMPOINT = &H1A9 Private Declare Function SendMessage Lib "user32 ...

  7. 蓝光影视媒体菜单结构浅析[原版加字幕保留花絮/主菜单/弹出菜单并分割对应PS3]...

    虽然标题说浅析,但实际内容可能较复杂,修改原盘现阶段也是很烦琐的工作 本文写给有兴趣修改原盘加字幕流或音频流的网友看的,没兴趣的可以不看了 本文主要以菜单基本类型为例子,其他情况实例操作以后再补充说明 ...

  8. 选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单

    菜单控件<Menu > 选项菜单(Option Menu) 单击Menu实体按钮弹出,android中把它叫做option menu 上下文菜单(ContextMenu 是Menu的子接口 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图 ...

最新文章

  1. mysql yearweek 日期不准_Mysql 中,WEEK 与YEARWEEK函数的参数问题
  2. Java学习笔记(1)——概述
  3. mybatisplus修改单个属性_第二节 官封弼马温——类的属性
  4. Windows下载、安装、卸载Redis
  5. java忽略引号中的分隔符_java – 令牌化但忽略引号内的分隔符
  6. MTK MODEM(1)--- MTK平台NV基本功能与操作
  7. JavaScript 开发工具webstrom使用指南
  8. linux 在文件中增加空行,linux – 在不同组的行之间添加空行
  9. Java String类的相关操作
  10. 2016年度太和顾问北京高科技行业人力资本数据信息发布
  11. 苹果M1芯片兼容mysql吗_苹果m1芯片相当于什么水平
  12. 端口映射内网穿透——网络通
  13. 【干活推送 】人工智能(AI)教程
  14. Pycharm生成.exe文件
  15. 国美易卡不需要扩展,国美易卡系统维护复杂
  16. linux下写脚本时-gt或-lt是什么意思?
  17. 计算机 语言学 交叉,计算机和语言学
  18. 洛谷P3426 [POI2005]SZA-Template 题解
  19. Java游戏开发 —— 象棋
  20. Java 判断平衡二叉树

热门文章

  1. 软件工程概论个人作业02(四则运算2)
  2. HDU 5617 Jam's maze dp+滚动数组
  3. OpenGL学习之路(二)
  4. js Date对象总结
  5. [FZYZOJ 1038] 隧道
  6. 用nodejs 替换文件中所有图片的url
  7. 使用vs2010+WCF发布json数据,ExtJS4.0进行调用
  8. 一个c++ 2d图形引擎 AGG
  9. discuz数据从godaddy主机中导出的mysql数据乱码变问号???的解决方法
  10. [导入]画带阴影效果的文字