Delphi IDE'ye yeni bir ShortCut eklemek, Open Tools API'si bunun için bir hizmet sağladığından çok zor değildir. Görünüşe göre daha karmaşık bir şey çalışıyorum: Ek kısayol gibi WordStar ekleyin: kullanıcı tek tuş X izlediToolsApi kullanarak Shift + Ctrl + H X tuşlarını Delphi IDE'ye nasıl eklerim?
Shift + Ctrl + H tuşuna bastığında
ben ne bir şey istiyorum
buradaki X gerektiği Shift tuşunun durumuna bakmaksızın çalışın. Ben ShiftState ayarlarsanız
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;
Yani,: = [ssCtrl]
benim TwoKeyBindingHandler yöntemini çağıran
Ctrl + H X tuşuna basarak
Bu benim kodudur.
Ancak ShiftState ile
: = [ssShift, ssCtrl] tuşunaShift + Ctrl + H x
hiçbir şey yapmaz. ShiftState belirtirken Garip
: = [ssShift, ssCtrl]
Shift + Ctrl + H Shift tuşuna (ki sadece birinci anahtar etkilemelidir) + X
bile, benim TwoKeyBindingHandler yöntemini çağırdığında ikinci ShortCut bir değiştirici anahtarı olmadan eklenir.
Herhangi bir fikrin var mı? Bu, Delphi IDE/Open Tools API'sinin bilinen bir sınırlaması/hatası mı? Bilinen bir çözüm var mı?
Delphi 2007 ve Delphi 10 Seattle'da denedim, fark yok.
Teşekkürler, bu, Hotkey'leri genel olarak denetlemek için bir çözümdür, ancak OnKeyDown ile başa çıkmak için bir formum bulunmayan özel durumum için geçerli değildir. (Bunun dışında: IsKeyDown'ı birden çok kez çağırmak iyi bir performans değildir, muhtemelen GetKeyState'i yalnızca bir kez çağırır ve tuş birleşimini kontrol ederim.) – dummzeuch
Yine de uygulama için wm_keydown mesajını işleyebilirsiniz. –
Evet, yapabilirim. Ve muhtemelen Açık Araçlar API'sini kullanarak bir çözüm bulamazsam tam olarak yapacağım. Ne yazık ki, IDE'nin bazı ek kodlar gerektirebilecek anahtarı bile görmesini engellemek zorunda kalacağım. Ama oraya vardığımda o köprüyü geçeceğim. – dummzeuch