2014-12-12 4 views
0

일부 TEdit가 배치 된 TFrame이 있습니다. 이 편집은 문자가 입력되었을 때 입력 포커스가 하나의 편집 상자에서 다음 입력 상자로 점프하는 사용자 경험을 설정하려고 할 때 직렬 키 입력을위한 상자입니다. 즉, 사용자는 탭 을 누르거나 다음 편집을 클릭하여 진행할 필요가 없습니다.VCL TFrame에서 컨트롤 포커스 향상

"시뮬레이션"은 편집에서 탭 언론과 같이 작동하도록 press를 입력하고 동일한 기술을 사용하려고 시도하는 방법에 대한 C++ Builder HowTo 책 (훌륭한 책)에서 예제를 발견했습니다. 그러나, 내 애플의 무언가가 그 예제에서와 같이 작동하지 않습니다.

프레임에서

에게 키를 누를 경우, 나는 코드

void __fastcall TAboutFrame::Edit1KeyPress(TObject *Sender, 
System::WideChar &Key) 
{ 
TEdit* theEdit = dynamic_cast<TEdit*>(Sender); 
if(!theEdit) 
{ 
    return; 
} 

if(theEdit->Text.Length() >= 6) 
{ 
    //jump to next edit 
    Perform(WM_NEXTDLGCTL, 0, 0); 
... 

그러나 발생하지 않습니다 다음 컨트롤로 '점프'를 가지고있다.

기본 폼 프레임 부모는 키 미리보기 == true를 가지고 있으며 은 수행 호출이 실제로 실행되는지 확인하기 위해 중단 점을 설정할 수 있습니다.

편집시 탭 순서는 1,2,3,4,5입니다.

TFrame 메시징 또는 todo가 필요한지 궁금합니다.

+4

2 가지 : 1) OnChange 이벤트를 사용하면 (OnKeyPress가 아니라) 다소 쉬워집니다. 2) 'Perform'를 사용할 필요가 없으며 메시지를 보낼 수 있습니다. 'theEdit-> SelectNext (theEdit, True, True)'와 같은'TWinControl.SelectNext'를 사용하면됩니다. (C++ 빌더보다 델파이를 더 많이 사용하기 때문에 말합니다.) VCL로 모든 당신을 위해 일합니다. 그것은 올바르게 탭 순서를 처리합니다. –

+0

완벽하게 작동했습니다! 빌더에서 편집 멤버 함수 인 SelectNext는 private이므로 호출 할 수 없지만 작업을 수행하는 전역 함수 인 SelectNext가 있습니다. 감사합니다. –

답변

0

사용중인 컨트롤이 TWinControl에서 파생 된 경우 (스톡 VCL 컨트롤을 사용하는 경우), TWinControl-> SetFocus()를 사용하여 포커스를 명시 적으로 원하는 컨트롤로 설정할 수도 있습니다.