![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отображение ShortCut(Accelerator) в главном меню [Delphi]
Mist © (2004-02-13 11:28:00)Привет всем.
Суть. (используется библиотека 1.90)
Пункты главного меню привязаны к ActionList в котором заданы Accelerator.
В режиме разработки отображение нормальное, а в запущенном приложении
пункт меню выглядит примерно так: "Вырезать Ctrl+PAlt+BackspaceShift+Del"
Т.е. собираются все сочетания (находящиеся в ActionList) до "Ctrl".
Такой эффект наблюдается для всех клавиш не содержаши "Ctrl".
Если Accelerator добавлен в свойствах самого меню то все ОК.
И еще, так разные мелочи:
1. Клавиши Insert, Delete, PageUp, PageDown (возможно и др.) приходится
вводить вручную т.к. свойством Accelerator воспринимаются их сокращенные
названия Ins, Del, PgUp и PgDown соответственно, а ввод по нажатию клавиш дает из полное названи.
2. При установке Action для пунков меню свойство caption получает
название с Accelerator: "&Вырезать|Shift+Ins". Может конечно так
задумано, но мне потом приходиться это исправлять.
3. Accelerator в меню связанного с ActionList отображается и в случае
установки свойства showShortCuts=False компонента TKOLMainMenu.
Владимир Кладов (2004-02-22 13:21:00) [1]Во втором разве полностью? Так я беру первый вариант?
RA (2004-02-21 15:56:00) [2]Пожалуйста.
2Kladov Может внести эти поправки в следующую версию KOL?
Mist (2004-02-17 14:21:00) [3]Спасибо, все получилось.
Чтобы поправить проблему
>Клавиши Insert, Delete, PageUp, PageDown (возможно и др.)
>приходится
Использовал 2 вариант - пусть названия клавишь выводятся полностью.
RA{Upgrate for mirror.pas} (2004-02-17 12:15:00) [4]Решение проблемы с выводом ShortCut. Надо поправить mirror.pas
function TKOLAccelerator.AsText: String;
var S: String;
begin
asm
jmp @@e_signature
DB '#$signature$#', 0
DB 'TKOLAccelerator.AsText', 0
@@e_signature:
end;
Result:='';//Добавить {RA}
if kapControl in Prefix then
Result := 'Ctrl+';
if kapAlt in Prefix then
Result := Result + 'Alt+';
if kapShift in Prefix then
Result := Result + 'Shift+';
Чтобы поправить проблему
>Клавиши Insert, Delete, PageUp, PageDown (возможно и др.) >приходится
>вводить вручную т.к. свойством Accelerator воспринимаются их >сокращенные
>названия Ins, Del, PgUp и PgDown соответственно, а ввод по >нажатию клавиш дает из полное названи.
Есть 2 варианта:
1) в mirror.pas исправить код, чтобы выглядел так:
// Maxim Pushkar:
const VirtualKeyNames: array [TVirtualKey] of string =
( '', 'Back'{'BackSpace'}, 'Tab', 'CLEAR', 'Enter', 'Pause', 'CapsLock',
'Escape'{'Esc'}, 'Space', 'PageUp', 'PageDown', 'End', 'Home', 'Left',
'Up', 'Right', 'Down', 'SELECT', 'EXECUTE', 'PrintScreen',
'Ins', 'Delete'{'Del'}, 'Help'{'?'}, '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'LWin', 'RWin', 'APPS',
'Numpad0', 'Numpad1', 'Numpad2', 'Numpad3', 'Numpad4',
'Numpad5', 'Numpad6', 'Numpad7', 'Numpad8', 'Numpad9',
'*', '+', '|', '-', '.', '/', 'F1', 'F2', 'F3', 'F4',
'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'F13',
'F14', 'F15', 'F16', 'F17', 'F18', 'F19', 'F20', 'F21',
'F22', 'F23', 'F24', 'NumLock', 'ScrollLock', 'ATTN', 'CRSEL',
'EXSEL', 'EREOF', 'PLAY', 'ZOOM', 'PA1', 'OEMCLEAR');
2) Или же править в mckAccEditor.inc процедуру
procedure TKOLAccEdit.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var S, K: String;
begin
if (Key = VK_CONTROL) or (Key = VK_SHIFT) or (Key = VK_MENU) then Exit;
if Shift * [ ssShift, ssAlt, ssCtrl ] = [ ] then Exit;
S := '';
if ssCtrl in Shift then S := S + 'Ctrl+';
if ssAlt in Shift then S := S + 'Alt+';
if ssShift in Shift then S := S + 'Shift+';
case Key of
VK_CANCEL : K := 'Cancel' ;
VK_BACK : K := 'BackSpace'{'Back'} ;
VK_TAB : K := 'Tab' ;
VK_CLEAR : K := 'Clear' ;
VK_RETURN : K := 'Enter' ;
VK_PAUSE : K := 'Pause' ;
VK_CAPITAL : K := 'CapsLock' ;
VK_ESCAPE : K := 'Escape'{'Escape'} ;
VK_SPACE : K := 'Space' ;
VK_PRIOR : K := 'PgUp' ;
VK_NEXT : K := 'PgDn' ;
VK_END : K := 'End' ;
VK_HOME : K := 'Home' ;
VK_LEFT : K := 'Left' ;
VK_UP : K := 'Up' ;
VK_RIGHT : K := 'Right' ;
VK_DOWN : K := 'Down' ;
VK_SELECT : K := 'Select' ;
VK_EXECUTE : K := 'Execute' ;
VK_SNAPSHOT : K := 'PrintScreen' ;
VK_INSERT : K := 'Insert' ;
VK_DELETE : K := 'Del'{'Delete'} ;
VK_HELP : K := '?'{'Help'} ;
P.S. Первый вариант точно работает, но и втрой должен работать
RA (2004-02-14 17:44:00) [5]У меня та же проблема в 1.86, думал, что уже исправлено и исправлять не стал. придется исправлять.