2013-05-02 4 views
1

사용자가 다른 언어로 된 데이터를 TcxGrid에 입력하는 응용 프로그램을 작성하고 있습니다. 일반 키보드 (á 또는 ¿)가 아닌 키 입력을 용이하게하기 위해 사용자가 버튼을 추가 할 수있는 기능을 추가하기로 결정했습니다. 버튼을 누르면 문자를 그리드로 직접 보냅니다.구성 요소에 키 보내기

기본적으로 버튼을 누르면 버튼의 캡션이 그리드로 전송할 문자가됩니다. 지금 당장이 작업을 수행하는 유일한 방법은 활성 격자 셀을 가져 와서 거기에 텍스트를 복사하고 문자를 추가하여 그리드 값을 새 문자열로 설정하는 것입니다. 이것은 이상적인 것 같지 않습니다.

깨끗한 방법으로 아이디어를 얻으려고하십니까?

+0

Windows에는 이미이 기능이 있습니다. 왜 바퀴를 다시 발명합니까? –

+1

사용자가 이미 빈도로 입력 한 언어 인 경우 사용자는 OS에서 해당 키보드 레이아웃으로 간단히 전환하여 "키"가 중복 될 수 있습니다. 사용자가 일반적으로 입력하지 않는 언어 인 경우 사용자가 제공하는 "키"도 사용되지 않습니다. 대신 사용자는 원하는 텍스트, 복사 및 붙여 넣기로 웹 사이트 또는 문서를 찾습니다. 사용자가 제품에 실제로 요청한 내용입니까 아니면 문제를 찾아 솔루션을 구성하고 있습니까? –

+0

OS에서 키보드 레이아웃을 전환하는 것이 지루합니다. 사용자가 영어로 구문을 입력 한 다음 동일한 구문을 다른 언어로 번역 할 수 있습니다. 복사와 붙이기는 아마도 프레이즈를 위해 꽤 많이 쓰이 겠지만, 외래 문자를 추가하는 빠른 방법은 나에게 좋은 생각 인 것 같습니다. @DavidHeffernan : 화면상의 가상 키보드 이외의 것을 의미합니까? – Sentient

답변

4

컨트롤의 핸들을 얻을 수 있으면 입력하는 컨트롤에 메시지를 게시 할 수 있습니다.

PostMessage(Edit1.Handle, WM_CHAR, Ord('A'), 0); 

내가 할 수있는 야바위꾼 방법이있을거야,하지만 난 당신의 문자 "문자지도"를 사용하여 오프이 일을 가지고 : 가상 스캔 코드가 필요한 경우

const 
    testchar1 = 'Á'; 
    testchar2 = '¿'; 
begin 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar1), 0); 
    PostMessage(Edit1.Handle, WM_CHAR, Ord(testchar2), 0); 
end; 

을 WM_KEYDOWN을 사용 및 WM_KEYUP 메시지.

+0

그리드를 사용해 보았습니다. 기대하지 않고 많은 노력을 기울이지 않았습니다. 활성 편집 항목을 찾는 방법을 찾고 있는데 핸들을 사용하지만 아직 찾지 못했습니다. PostMessage 팁을 주셔서 감사합니다, 마치 핸들을 얻을 수 있으면 작동하는 것처럼 보입니다. – Sentient

+0

나는 그것을 작동시키는 방법을 발견했다. 해결책이 여전히 변칙적으로 보이기 때문에 나는 아무것도 표시하지 않으면 답으로 표시 할 것입니다. TcxGridBandedTableView 개체의 OnInitEdit 이벤트를 사용하여 마지막 편집 항목을 추적 한 다음 해당 핸들로 PostMessage를 사용합니다. – Sentient

관련 문제