冥界3大法王 发表于 2023-2-23 12:42

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:}

DEATHTOUCH 发表于 2023-2-23 13:13

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 13:50

本帖最后由 冥界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
这个有用?

168qn 发表于 2023-2-23 14:39

跟着学习一下!!!

DEATHTOUCH 发表于 2023-2-23 16:14

本帖最后由 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表示鼠标滚了多少,取决于系统设置的鼠标滚轮速度,一般根据这个就可以确定缩放了。

冥界3大法王 发表于 2023-2-23 17:13

@DEATHTOUCH
学得真好,心服口服!外加佩服。{:301_993:}
页: [1]
查看完整版本: Delphi判断Ctrl+号这个判断咋表达?