gpt4 book ai didi

delphi - 如何使用 ToolsApi 将按键绑定(bind) Shift+Ctrl+H X 添加到 Delphi IDE?

转载 作者:行者123 更新时间:2023-12-03 15:12:46 26 4
gpt4 key购买 nike

向 Delphi IDE 添加新的快捷方式并不太困难,因为 Open Tools API 为此提供了服务。我正在尝试一些显然更复杂的事情:添加一个 Wordstar,例如附加快捷方式:

我希望当用户按下时发生一些事情

Shift+Ctrl+H 后按单键 X

无论 Shift 键的状态如何,X 都应该起作用。

这是我的代码:

procedure TGxKeyboardBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
const
DefaultKeyBindingsFlag = kfImplicitShift + kfImplicitModifier + kfImplicitKeypad;
var
GExpertsShortcut: Byte;
ShiftState: TShiftState;
FirstShortCut: TShortCut;
SecondShortCut: TShortCut;
begin
GExpertsShortcut := Ord('H');
ShiftState := [ssShift, ssCtrl];
FirstShortCut := ShortCut(GExpertsShortcut, ShiftState);
SecondShortCut := ShortCut(Ord('X'), []);
BindingServices.AddKeyBinding([FirstShortCut, SecondShortCut],
TwoKeyBindingHandler, nil,
DefaultKeyBindingsFlag, '', '');
end;

所以,如果我设置 ShiftState := [ssCtrl] 按下

Ctrl+H X

调用我的 TwoKeyBindingHandler 方法。

但是当 ShiftState := [ssShift, ssCtrl] 按下时

Shift+Ctrl+H X

什么也不做。

奇怪的是,当指定 ShiftState := [ssShift, ssCtrl] (应该只影响第一个键)时按下

Shift+Ctrl+H Shift+X

调用我的 TwoKeyBindingHandler 方法,即使添加第二个 ShortCut 时没有使用修饰键。

有什么想法吗?这可能是 Delphi IDE/开放工具 API 的已知限制/错误吗?有已知的解决方法吗?

我在 Delphi 2007 和 Delphi 10 Seattle 中尝试过,没有区别。

最佳答案

您应该能够使用 GetKeyState 函数来完成此操作。

该程序有两个操作 - 将其视为打开一个下拉菜单项。当按下 ctr-shift-h 时,您的程序将需要标记“菜单”现已打开,并且如果按下无效键,后续按键将激活选项或关闭“菜单”。

function IsKeyDown(const VK: integer): boolean;
begin
IsKeyDown := GetKeyState(VK) and $8000 <> 0;
end;

procedure Form1.OnkeyDown(...)
begin
if Not H_MenuOpen then
if IsKeyDown(vk_Control) and IskeyDown(vk_Shift) and IsKeyDown(vk_H) then
begin
//Some Boolean in the form
H_MenuOpen:=True;
//Will probably need to invalidate some parameters here so that
//no control tries to process the key
exit;
end;

if H_MenuOpen then
begin
if key=vk_X then
begin
//x has been pressed
*Your code here*
//possibly invalidate some of the params again
exit;
end;
//Nothing valid
H_MenuOpen:=False;
end;

结束;

关于delphi - 如何使用 ToolsApi 将按键绑定(bind) Shift+Ctrl+H X 添加到 Delphi IDE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com