Delphi判断Ctrl+号这个判断咋表达?
本帖最后由 冥界3大法王 于 2023-2-23 12:43 编辑修改下面的代码,热键改成Ctrl+加号
procedure TForm4.RichViewEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Char(Key) in ['K', 'k']) then
begin
// ShowMessage('Ctrl K');
RichViewEdit1.DocumentPixelsPerInch := RichViewEdit1.DocumentPixelsPerInch + 48;
RichViewEdit1.Reformat;
RichViewEdit1.SetFocus;
end;
end;
设想的热键是这个样子的:
Ctrl+放大文档
Ctrl-缩小文档
{:301_974:}
if ssCtrl in Shift then
begin
if Key=189 then
ShowMessage('Ctrl -')
else if Key=187 then
ShowMessage('Ctrl =');
end;
应该是这样的
VK_OEM_PLUS = 187;
VK_OEM_MINUS = 189;
Windows单元有这个定义。 本帖最后由 冥界3大法王 于 2023-2-23 14:04 编辑
@DEATHTOUCH
那为什么if (GetAsyncKeyState(VK_CONTROL) < 0) and (GetAsyncKeyState(Ord('=')) < 0) then
或 if (ssCtrl in Shift) and (Char(Key) in ['=', '=']) then不行呢? 是方法有问题,还是表达方式有问题?
虽然以前搞成功过,总感觉自己糊里八都的
还差一个Ctrl + 鼠标上下滚轮的
https://stackoverflow.com/questions/5297234/tlistview-and-mouse-wheel-scrolling
这个有用?
跟着学习一下!!! 本帖最后由 DEATHTOUCH 于 2023-2-23 16:16 编辑
冥界3大法王 发表于 2023-2-23 13:50
@DEATHTOUCH
那为什么if (GetAsyncKeyState(VK_CONTROL) < 0) and (GetAsyncKeyState(Ord('=')) < 0) then ...
因为这个函数的Key是根据Windows单元定义的VK_XXX系列常量来的,而不是简单的ASCII符号,所以不能用类似Char(Key) = '=' 这样的形式,对于字母来说恰好A-Z这些就对应了ASCII的65-90,但是像是等号(加号),减号(下划线),逗号(左尖括号)等就不是了,不过一般都是按照美式键盘的标准定义,比如等号是187,当然大部分时候建议用VK_XXX常量来。
对于鼠标滚轮加Ctrl的,用
procedure TForm1.XXXMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
就行了,Shift和键盘的一样,WheelDelta表示鼠标滚了多少,取决于系统设置的鼠标滚轮速度,一般根据这个就可以确定缩放了。 @DEATHTOUCH
学得真好,心服口服!外加佩服。{:301_993:}
页:
[1]