- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
WM_KEYDOWN: begin
if GetAsyncKeyState(VK_CONTROL) <> 0 then case W of
integer('X') : SendMessage(H, WM_CUT, 0, 0);
integer('C') : SendMessage(H, WM_COPY, 0, 0);
integer('V') : SendMessage(H, WM_PASTE, 0, 0);
integer('Z') : SendMessage(H, WM_UNDO , 0, 0);
integer('Y') : ReDo(H);
integer('A') : SelectAll(H);
VK_INSERT : SendMessage(H, WM_COPY, 0, 0);
VK_PRIOR : MoveCaretLine (H, -1000000);
VK_NEXT : MoveCaretLine (H, 1000000);
VK_DELETE : SendMessage(H, WM_CLEAR, 0, 0);
// end else if GetAsyncKeyState(VK_ALT) then case W of
// VK_BACK : SendMessage(H, WM_UNDO , 0, 0);
end else if GetAsyncKeyState(VK_SHIFT) <> 0 then case W of
VK_DELETE : SendMessage(H, WM_CUT , 0, 0);
VK_INSERT : SendMessage(H, WM_PASTE, 0, 0);
end else case W of
VK_SHIFT : SDown(H);
VK_LEFT : MoveCaretSymbol (H, -1);
VK_RIGHT : MoveCaretSymbol (H, 1);
VK_UP : MoveCaretLine (H, -1);
VK_DOWN : MoveCaretLine (H, 1);
VK_PRIOR : MoveCaretLine (H, -MaxLinesInScreenByH(H));
VK_NEXT : MoveCaretLine (H, MaxLinesInScreenByH(H));
VK_DELETE : DeleteSymbol(H, False);
end;
DrawText(H);
Exit;
end;
Пишу свой винапи-класс типа Edit.
Так сделаны горячие клавиши.
guest 10.01.2012 11:00 # −8
ctm 10.01.2012 13:13 # 0
TarasB 10.01.2012 13:27 # 0
А вообще я хотел подсветку синтаксиса.
Govnocoder#0xFF 10.01.2012 20:33 # 0
TarasB 10.01.2012 20:35 # 0
Govnocoder#0xFF 10.01.2012 20:56 # −1
Что, простите?
TarasB 10.01.2012 21:02 # +1
Govnocoder#0xFF 10.01.2012 21:04 # −5
inho 21.03.2018 09:47 # 0
bormand 21.03.2018 11:03 # 0
guest 10.01.2012 20:42 # 0
TarasB 10.01.2012 20:55 # 0
TarasB 10.01.2012 20:56 # 0
Как это по-нормальному делается? Я про горячие клавиши в своих компонентах.
Govnocoder#0xFF 10.01.2012 21:02 # 0
eth0 10.01.2012 21:06 # 0
TarasB 10.01.2012 21:08 # 0
Govnocoder#0xFF 10.01.2012 21:12 # 0
TarasB 10.01.2012 21:14 # 0
Govnocoder#0xFF 10.01.2012 21:18 # 0
TarasB 10.01.2012 21:22 # 0
eth0 10.01.2012 22:29 # 0
Lure Of Chaos 11.01.2012 13:21 # 0
eth0 11.01.2012 18:21 # 0
Разве что мы говорим про разные хуки.
P.S. Всё равно делать это хуком - грязный хак.
ctm 11.01.2012 06:18 # 0
function DoKeyDown(Key: Word; Shift: TShiftState): integer;
// тут вся обработка
procedure RExcelGridViewer.WMKeyDown2(var Message: TWMKeyDown); message CM_CHILDKEY;
var ss: TShiftState;
ks: TKeyboardState;
begin
if (not Focused) then exit;
GetKeyboardState(ks);
ss := KeyboardStateToShiftState(ks);
Message.Result := DoKeyDown(Message.CharCode, ss);
end;
ctm 11.01.2012 06:23 # 0
FOnKeyDown: TKeyEvent;
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
в конструкторе
inherited OnKeyDown := MyOnKeyDown;
FOnKeyDown := NIL;
и обработчик
procedure MyKeyDown(...);
begin
// тут обработка
if (Assigned(FOnKeyDown)) then FOnKeyDown(...);
end;