Delphi XE5 for Android (七)

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

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

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

image

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

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

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

image image

相關文章
相關標籤/搜索