2013-10-23 2 views
1

Delphi XE5에서는 FormKeyUp 또는 KeyDown Method를 사용할 때 스페이스 바를 trig 할 수 없습니다.Delphi XE5는 스페이스 바를 울릴 수 없습니다

키 값은 스페이스 바를 입력하면 0 (32 대신)입니다. 이것은 XE2에서 일하고있었습니다.

procedure TfrmMaster.KeyDown(var Key: Word; var KeyChar: Char; 
    Shift: TShiftState); 
begin 
    if Key = vkSpace then 
    begin 
    //custom handling 
    //if SomeTest then Exit; //don't do default handling 
    end; 
    inherited; //do default handling 
end; 

유형 데스크탑 HD 대상 윈도우 32/64 비트 및 Mac OS

+0

편집 해 주셔서 감사합니다. 그것은 질문을 훨씬 더 분명하게 만듭니다. 가까운 투표를 삭제하고 답변을 올렸습니다. :) –

답변

1

나는 새로운 FMX HD 응용 프로그램에서 문제를 재현 할 수 있습니다. 빠른 테스트는 vkSpace이 절대로 전송되지 않는다는 것을 보여줍니다.

  • 새로운 Firemonkey HD 데스크톱 응용 프로그램 오브젝트 인스펙터에서 Events 탭에서
  • 를 만듭니다 OnKeyDown 이벤트를 두 번 클릭 한 다음 코드를 추가합니다 :
 
    procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; 
     Shift: TShiftState); 
    begin 
     { 
     if KeyChar = #32 then 
     begin 
     ShowMessage('Got space bar'); 
     KeyChar := #0; 
     end; 
     } 
     if Key = vkSpace then 
     begin 
     ShowMessage('Got space bar'); 
     Key := 0; 
     end 
     else 
     ShowMessage('Received key ' + IntToStr(Key)); 
    end; 
  • 실행 응용 프로그램을 선택하고 Space을 누릅니다.
  • 두 번째 ShowMessage이 실행되어 Received key 0을 나타냅니다.

간단한 해결 방법이 있습니다. 나는 다음과 같은 코드를 사용하여 테스트 :

 
    procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; 
     Shift: TShiftState); 
    begin 
     if KeyChar = #32 then 
     begin 
     ShowMessage('Got space bar'); // Display message 
     KeyChar := #0;     // Discard keystroke 
     end; 
    end; 

단순히 KeyChar := #0;를 제거 ShowMessage 호출 후 키 입력의 기본 처리를 허용하려면.

+0

고마워, 내 설정도 Key 매개 변수 대신 KeyChar를 사용하여 작업하고있다. XE2에서 핵심 매개 변수를 확인하지 않고 작동 중이 었는데 XE5에서 프로젝트를 종결했을 때 핵심 매개 변수가 더 이상 작동하지 않는 것 같습니다. –

관련 문제