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实现的任意位置弹出菜单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KVM虚拟化
- 下一篇: 最大最完整的---NAG Fortran