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

一共2个部分,分别下载。 用过BSskin或者VCLskin的哥们 支持的开发语言 Borland Delphi 4/5/6 Borland Delphi 7 Borland Delphi 8 Borland Delphi 2005 Borland Delphi 2006 CodeGear Delphi 2007 支持的操作系统 Windows Vista Wndows 2000/XP/2003 Windows NT4.0 Windows Me Windows 98/98SE Windows 95 版本信息 当前版本:3.0 文件大小:24.9MB 更新日期:2006-12-6 下载次数:22670 软件概述 Skin++ For Delphi目前全面支持Delphi4、Delphi5、Delphi6、Delphi7、Delphi8、Delphi2005、Delphi2006。 迄今为止,Delphi支持4种类型的应用程序: 1、VCL Forms Application – Delphi for Win32 (该类型在Delphi4/5/6/7/2005/2006所有版本包含); 2、VCL Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含); 3、Windows Forms Application – C# Builder (该类型在Delphi2005/2006中包含); 4、Windows Forms Application – Delphi for .Net (该类型在Delphi8/2005/2006中包含)。 Skin++对以上4种Delphi程序类型做了全面的支持。 试用版本描述与运行截图 1.在本安装盘中,包含了Delphi的各个版本(D6,D7,D8,D2005,D2006)Skin++测试例子; 2.关于如何使用Skin++,请参考文档《Skin++ For Delphi [All Edition]使用帮助》; 3.要查询Skin++所有的接口,请参考文档《Skin++接口描述》; 4.本安装盘提供一套试用皮肤PixOS.ssk,正式版用户将获得网站上更多更精美的皮肤。并可获得定期更新; 5.Skin++正式版中提供强大的皮肤设计工具Skin++Builder。 该工具完成皮肤所有的设计工作,并可以全自动导入Windows主题、第三方主题; Skin++Builder使用详情请参考《Skin++Builder Help》; 6.案例说明: 我们以Delphi2006 VCL Win32的测试例子为例,描述其组成。 打开\Delphi 2006\VCL Forms Application - Delphi For Win32\目录中的MDIAPP.exe 该例子是一个MDI类型的程序。主窗口部分演示Skin++在MDI方面处理的各个细节。 如:主菜单条、主弹出菜单、系统菜单、工具条、状态条、MDI客户区、MDI子窗口、MDI子窗口最大化后等各个部分的换肤细节。 Skin++ 3.0 可以对皮肤进行动态的色调设置 这个功能可以使您的程序可以瞬间拥有N套色调的皮肤。 更改色调样例1: 我们分以下几个页面对Delphi的全部控件进行了演示: Buttons、Static、Controls with ScrollBar(带滚动条的控件)、Splitter、TabControls、TrackBar & Progress、Misc Controls、Dialog、DataControls 6.1 Buttons 该部分我们演示了Skin++对Delphi的各种类型的按钮进行的换肤支持, 包括BitBtn按钮、SpeedButton、Tbutton、CheckBox、RadioBox 在该部分,还演示了对按钮进行多风格的换肤效果,“Style 2”按钮和其他按钮不同,呈现了其特有样式。 这种效果一般用在网络电话、多媒体软件、网络聊天等需要同时支持多种按钮风格的地方。 每个按钮具有其固定的5中状态:正常、按下、高量、禁用、默认。在该窗体中演示了每种按钮的5中状态。 并且在Skin++ 3.0 中,支持Focus的效果。通过Tab或方向键可以看到焦点在每个按钮上移动。 6.2 Static 该部分演示了Skin++ 对Label、GroupBox、右键菜单、Panel、FlowPanel、GridPanel等控件的支持。 值得一提的是,Skin++对Label的支持是彻底,并且不像其他的换肤软件需要在窗体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值