2012-04-12 112 views
4

我們知道,如果我們設置的快捷方式(例如,按Ctrl + F2)到TMenuItem,菜單項將被指定一次快捷鍵被按下執行自動快捷鍵說明也將顯示當菜單顯示時。爲菜單項設置「僅查看」快捷方式?

但有沒有辦法讓快捷方式描述在菜單項上可見,但使菜單不會自動響應快捷方式?

你可能會問我,爲什麼我要這樣,這裏的情況是:

在多文檔(如Firefox的多個選項卡)程序,有這樣多TMenuItem對象具有相同的快捷鍵TPopupMenu的多個實例,但我只希望活動文檔窗口中的菜單項響應快捷方式。


編輯1:對不起,我想簡化我的問題,我錯誤地描述它 - 實際上,我用TActionList和行動鏈接到菜單項。


編輯2:剛發現:我認爲我可以使用TApplicationEvents.OnShortCut Event攔截捷徑他們被分派到菜單/動作之前......我會試着將更新我的問題,當我得到結果。

+0

TLama,感謝您的幫助。我已更新(更正)了我的問題。 '多個TPopupMenu實例(在我糾正我的問題後應該是TActionList)',我的意思是我創建了多個TFrame對象,其中每個都包含一個TActionList。 – 2012-04-12 13:18:30

+0

但即使是關於動作列表,仍然只有一個對焦框的菜單會響應快捷鍵。我不明白爲什麼要攔截快捷方式,如果它們在這些菜單項標題中描述。這會讓用戶感到困惑,他們可以彈出菜單,可以看到快捷方式,但是使用按鍵時沒有任何反應。 – TLama 2012-04-12 13:35:03

+0

@TLama,我再次用D2010驗證過,這不是聚焦框的菜單會響應快捷方式,但意外框架的動作將被執行,其餘的將被跳過。這實際上會混淆用戶。我想要做的是通過集中處理快捷方式來避免這種混淆,以便只有活動框架才能處理快捷方式,同時仍然讓用戶通過使用TAction.Shortcut屬性來查看菜單項上的快捷方式。 – 2012-04-12 16:54:51

回答

6

使用選項卡(#9)字符來指示標準菜單中正文的正文部分。您可以設置菜單項或菜單項是通過編輯「DFM」或在運行時綁定到動作組件的Caption屬性包括製表符:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Action1.Caption := 
     Action1.Caption + #9 + ShortCutToText(ShortCut(VK_F2, [ssCtrl])); 

除非您還分配到菜單項或動作的ShortCut屬性本身,click/execute事件不會被觸發。

+0

太棒了!選項卡字符後面的文本甚至是右對齊,這是我想要的,當我第一次看到這個解決方案時,我很擔心!感謝塞爾特克!現在我知道我不必製作自己的TMenuItem血統並繪製只讀快捷鍵;) – 2012-04-13 04:33:17