的VCL旨在讓菜單項的快捷方式優先。你可以,但是,編寫你的項目點擊處理程序(或行動執行處理程序)做一些特殊處理時,ActiveControl是TCustomEdit(呼叫撤消等)
編輯:我明白你不喜歡處理所有可能的特殊情況在代碼中的許多地方(所有菜單項或操作處理程序)。恐怕我不能給你一個完全滿意的答案,但也許這會幫助你找到一個更通用的解決方案。試試你的表單上以下OnShortCut事件處理程序:
procedure TMyForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
Message: TMessage absolute Msg;
Shift: TShiftState;
begin
Handled := False;
if ActiveControl is TCustomEdit then
begin
Shift := KeyDataToShiftState(Msg.KeyData);
// add more cases if needed
Handled := (Shift = [ssCtrl]) and (Msg.CharCode in [Ord('C'), Ord('X'), Ord('V'), Ord('Z')]);
if Handled then
TCustomEdit(ActiveControl).DefaultHandler(Message);
end
else if ActiveControl is ... then ... // add more cases as needed
end;
您也可以覆蓋IsShortCut方法以類似的方式從這個新TCustomForm後代獲得項目的形式。
爲什麼添加一個撤消功能,當你正在使用的控件已經有一個內置? – 2009-07-09 14:59:25
如果編輯框有焦點,他想撤消對文本的更改。如果別的東西有焦點,他希望將整體變化撤回到最後一次保存的時間。 – 2009-07-09 15:38:58