2012-10-30 5 views
4

방금 ​​Delphi의 TAction의 SecondaryShortCuts-Feature를 사용했습니다. 그러나 바로 가기는 "F5"또는 "Shift + F5"와 같이 문자열로 정의됩니다. 이제 문제는 : 독일어 Windows에서 "Shift"키가 "Umsch"라는 독일어로되어 있기 때문에 작업이 실행되지 않습니다! 누구도 디자인 타임에 SecondaryShortCuts-Property가 전혀 쓸모가 없다는 것을 의미합니까? 왜냐하면 아무도 국제적으로 작동하는 응용 프로그램을 만들 수 없기 때문입니까?TAction.SecondaryShortCuts는 특정 언어입니다. 올바르게 설정하는 방법?

런타임시 VK_SHIFT를 올바른 이름으로 변환하여 키를 설정할 수 있습니다. 나는 GetKeyNameText을 통해 그것을 시도했다. 그러나 이것은 "Umschalt"가 아닌 "Umschalt"라는 긴 형태를 주었기 때문에 효과가 없었다. 키 이름의 짧은 버전을 가져 오는 기능을 아는 사람이 있습니까?

답변

5

당신이 시도 할 수 : 바로 가기에서 바로 가기 텍스트를 생성합니다

var 
    s: TShortCut; 
begin 
    s := ShortCut(Ord('A'), [ssShift]); 
    Action1.SecondaryShortCuts.Add(ShortCutToText(s)); 

을 그건 그렇고,이 값은 다음 상수에 의해 결정된다. 그걸 번역 했니? 그렇다면 다음과 같이해야합니까? :

SmkcShift = 'Shift+'; 
SmkcCtrl = 'Ctrl+'; 
SmkcAlt = 'Alt+'; 
+1

추신 : Shift + A는 텍스트를 입력 할 수 있어야하는 경우 가장 적합한 단축키가 아닐 수도 있습니다. ;-) – GolezTrol

+1

이 방향으로 나를 암시 해 주셔서 감사합니다. 나는 이제 창문 문제가 아니라 순수한 vcl을 보았다. 상수 (SmkcShift 등)는 resourcestrings이며 독일어 델파이를 사용하는 경우 사전 변환됩니다. SecondaryShortCuts의 사용은 매우 위험합니다. 왜냐하면 사용 된 델파이 버전의 언어와 실행 시간에 resourcestrings을 번역하고 있기 때문입니다. –

+0

실제로, 코드에서 SecondaryShortcuts를 설정하면 TShiftState가 그 순간에로드 한 상수 값을 사용하여 문자열 표현으로 변환되므로 안전해야합니다. 아직도, 나는 그 값들을 번역 가능한 문자열로 저장하는 것이 이상하다는 것에 동의한다. – GolezTrol

관련 문제