将新的ShortCut添加到Delphi IDE并不困难,因为Open Tools API为此提供了一项服务.我正在尝试一些显然更复杂的东西:像其他ShortCut一样添加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;
Run Code Online (Sandbox Code Playgroud)
所以,如果我设置ShiftState:= [ssCtrl]按
按Ctrl + HX
调用我的TwoKeyBindingHandler方法.
但是用ShiftState:= [ssShift,ssCtrl]按下
SHIFT + CTRL + HX
什么也没做.
奇怪的是,当指定ShiftState:= [ssShift,ssCtrl](这应该只影响第一个键)时按
Shift + Ctrl + H Shift + …
在Delphi 2007中,我可以使用以下ToolsAPI调用轻松获取当前项目的版本信息:
procedure Test;
var
ProjectOptions: IOTAProjectOptions;
Project: IOTAProject;
Major: Variant;
Minor: Variant;
Release: Variant;
Build: Variant;
begin
// GxOtaGetCurrentProject is a function in GExpert's GX_OTAUtils unit that returns the current IOTAProject
Project := GxOtaGetCurrentProject;
if Assigned(Project) then begin
ProjectOptions := Project.ProjectOptions;
if Assigned(ProjectOptions) then begin
Major := ProjectOptions.Values['MajorVersion'];
Minor := ProjectOptions.Values['MinorVersion'];
Release := ProjectOptions.Values['Release'];
Build := ProjectOptions.Values['Build'];
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在Delphi 10.2.3中,无论实际版本号如何,它都将始终返回版本1.0.0.0.这是"简单"的案例:VCL应用程序.
我还尝试了"Keys"值,它返回一个TStrings指针.在那里我也得到了FileVersion字符串,但它总是"1.0.0.0".
我想这与各种平台和配置的支持有关,但我找不到任何关于它现在应该如何工作的文档.我还搜索了ToolsAPI.pas中的"版本"和"发布",但没有出现任何可疑的内容.
有关如何在Delphi 10.2中获取版本信息的任何提示?