Delphi XE5下,TMainMenu和TPopupMenu不可用,那麼如何支持Android的菜單呢?函數
查看了一些資料,不得要領,只是摸索着先模擬一下吧。spa
首先在窗體上放置一個TPanel,在其上放置一個TListBox充當菜單項,對每個Item的OnClick事件編寫具體的動做。以下圖:orm
因爲要模擬菜單鍵,因此Panel放置在左下角,且設置Anchors屬性爲[akLeft,akBottom],即靠左靠下,已確保Panel在任何狀況下都處在左下角,這個是Delphi很是強大的功能,不用編寫代碼來控制其位置,以下圖:blog
在Form的OnKeyDown事件中,對菜單按鈕進行處理,按一下顯示菜單Panel,再按下一下隱藏。事件
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
if Key = vkMenu then
begin
//若是沒有顯示則顯示,不然隱藏
if pnlMainMenu.Visible then
pnlMainMenu.Visible := False
else
begin
//清除選擇項
ListBox1.ClearSelection;
//顯示菜單
pnlMainMenu.Visible := true;
end;
end;
end;get
點擊TListBox的Item後,執行相關函數並隱藏菜單Panel,這裏的功能只是顯示一下菜單項的名稱:it
procedure TfrmMain.ListBoxItem1Click(Sender: TObject);
begin
ShowMessage((Sender as TListBoxItem).Text);
pnlMainMenu.Visible := False;
end;
io
最後,當用戶點擊Panel之外的區域時,要隱藏Panel。這裏只是簡單地處理了Form的OnMouseDown事件,以演示用,實際狀況可能更復雜些。至因而不是有更好的解決辦法,知道的也請告訴我一聲,先謝啦!List
procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
pnlMainMenu.Visible := False;
end;im
運行效果還不錯,以下圖: