热键的实现方法(100分)

  • 主题发起人 主题发起人 lcypipi
  • 开始时间 开始时间
L

lcypipi

Unregistered / Unconfirmed
GUEST, unregistred user!
组合热键怎么实现?例如ctrl+shift+k实现某一事件。
 
function GetShiftState: TShiftState;
begin
Result := [];
if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift);
if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl);
if GetKeyState(VK_MENU) < 0 then Include(Result, ssAlt);
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormKeyPress(Sender: TObject
var Key: Char);
begin
if (Key = #11) and
(GetShiftState = [ssShift, ssCtrl]) then
button1.click;
end;

end.

将Form的KeyPreview属性设置为true;
 
能不能写在一个过程里面,#11是什么意思?刚学的,请大师指点
 
写在一个过程里面不是很乱吗 不如用一个函数好.#号后面加一个数字代表一个字符. 数字就是这个字符的AScii值 如A的Ascii值是65 那么#65 代表字符'A' 这里好象还不是很一样.
这里的#11代表字母'k' 但'k' 好象AScii是107 有点乱
它用了这里的数据
字符 十进制数 十六进制数 注解 字符 十进制数 十六进制数 注解
NUL 0 00 Null @ 64 40  
SOH 1 01 Start of Heading A 65 41  
STX 2 02 Start of Text B 66 42  
ETX 3 03 End of Text C 67 43  
EOT 4 04 End of Transmission D 68 44  
ENQ 5 05 Enquiry E 69 45  
ACK 6 06 Acknowledge F 70 46  
BEL 7 07 Bell G 71 47  
BS 8 08 Backspace H 72 48  
SH 9 09 Horisontal Tabulation I 73 49  
LF 10 0A Line Fees J 74 4A  
VT 11 0B Vertical Tabulation K 75 4B  
FF 12 0C Form Feed L 76 4C  
CR 13 0D Carriage Return M 77 4D  
SO 14 0E Shift Out N 78 4E  
SI 15 0F Shift In O 79 4F  
DEL 16 10 Data Link Escape P 80 50  
DC1 17 11 Device Control 1 Q 81 51  
DC2 18 12 Device Control 2 R 82 52  
DC3 19 13 Device Control 3 S 83 53  
DC4 20 14 Device Control 4 T 84 54  
笑一笑(6454699) 16:54:56
VT 11 0B Vertical Tabulation
 
最简单的方法就是直接用delphi自带的actionlist控件了,添加此控件,然后双击,添加项,设置其shortcut属性即可。
 
procedure TForm1.FormKeyDown(Sender: TObject
var Key: Word
Shift: TShiftState);
begin
if (Key=75) and (Shift = [ssCtrl, ssShift]) then begin
...
end;
end;
 
后退
顶部