1. 程式人生 > 其它 >Delphi XE5 for Android (四)

Delphi XE5 for Android (四)

Delphi XE5下,TMainMenu和TPopupMenu不可用,那麼如何支援Android的選單呢?

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

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

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

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