Delphi XE5 for Android (七)


Delphi XE5下,TMainMenu和TPopupMenu不可用,那么如何支持Android的菜單呢?

查看了一些資料,不得要領,只是摸索着先模擬一下吧。

首先在窗體上放置一個TPanel,在其上放置一個TListBox充當菜單項,對每一個Item的OnClick事件編寫具體的動作。如下圖:

image

由於要模擬菜單鍵,所以Panel放置在左下角,且設置Anchors屬性為[akLeft,akBottom],即靠左靠下,已確保Panel在任何情況下都處在左下角,這個是Delphi非常強大的功能,不用編寫代碼來控制其位置,如下圖:

image

在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;

點擊TListBox的Item后,執行相關函數並隱藏菜單Panel,這里的功能只是顯示一下菜單項的名稱:

procedure TfrmMain.ListBoxItem1Click(Sender: TObject);
begin
  ShowMessage((Sender as TListBoxItem).Text);
  pnlMainMenu.Visible := False;
end;

最后,當用戶點擊Panel以外的區域時,要隱藏Panel。這里只是簡單地處理了Form的OnMouseDown事件,以演示用,實際情況可能更復雜些。至於是不是有更好的解決辦法,知道的也請告訴我一聲,先謝啦!

procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
  pnlMainMenu.Visible := False;
end;

運行效果還不錯,如下圖:

image image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM