자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi TComboBoxEX 의 한글 자동완성 버그 문의
2016.10.31 18:17
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
델파이 7에 윈도우7을 사용중인 초보자입니다.
델파이7에 Win32에보면 TComboBoxEX 라는 컴포넌트가 있는데
이 컴퍼넌트의 자동완성기능 (AutoCompleteOptions) 의 버그에 대한 문의입니다.
AutoCompleteOptions 속성의
-acoAutoSuggest
-acoAutoAppend
-acoSearch
-acoFilterPrefixes
-acoUseTab
-acoUpDownKeyDropsList
-acoRtReading 옵션들은 모두 True로 주었스빈다.
제 DB에 있는 테이블의 모든 칼럼데이터들을 아이템으로 넣어준뒤
자동완성기능을 테스트해보면
영어는 잘되지만
한글의 경우는 버그가 있습니다.
첫째로 ComboboxEx Text창에 현대 를 입력하면
'현' 까지밖에인식을 못합니다. 현대 에서 대 부분에 포커스가 가 있지만 아직 완성된건지 아닌지를 파악을 못하니
아이템리스트에 현으로 시작하는 모든 데이터를 보여주고있네요.
원래라면 현대 로 시작하는 자료를 보여주어야 하는데 말이죠.
이런 버그를 해결하기위해 인터넷에서 구한 한글자동완성 소스를 추가해주었습니다..
private FlastKey: integer;
procedure TForm1.ComboBoxEx1Change(Sender: TObject);
var
i: integer;
begin
if (FLastKey <> -1) AND (FLastKey <> VK_BACK) then
begin
i := (Sender as TComboboxEx).Perform(
CB_FINDSTRING, -1, LongInt(PChar((Sender as TComboboxEx).Text)));
if i <> -1 then
PostKeyEx32(VK_PROCESSKEY, [], False);
end;
FLastKey := 0;
end;
--------------------------------------------------------------------------------
procedure TForm1.PostKeyEx32(key: Word; const shift: TShiftState;
specialkey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { end for }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { end for }
end;
-------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
FLastKey := -1;
end;
이건 TCombobox의 한글자동완성이 제대로 동작하게 해주는 소스인데
Tcomboboxex에 사용하니 다른문제가 생겼습니다.
한글이 쪼개지는 현상입니다,
현대건설을 입력하면
'ㅎㅕㄴㄷㅐㄱㅓㅅㅓㄹ' 이렇게됩니다.
몇일재 아무리 헤매봐도 해결이 안되는 문제인데
ㅇ아시는 방법이 있다면 답변좀 부탁드리겠습니다. 감사합니다.
댓글 0
Delphi TComboBoxEX 의 한글 자동완성 버그 문의
2016.10.31 18:17
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
델파이 7에 윈도우7을 사용중인 초보자입니다.
델파이7에 Win32에보면 TComboBoxEX 라는 컴포넌트가 있는데
이 컴퍼넌트의 자동완성기능 (AutoCompleteOptions) 의 버그에 대한 문의입니다.
AutoCompleteOptions 속성의
-acoAutoSuggest
-acoAutoAppend
-acoSearch
-acoFilterPrefixes
-acoUseTab
-acoUpDownKeyDropsList
-acoRtReading 옵션들은 모두 True로 주었스빈다.
제 DB에 있는 테이블의 모든 칼럼데이터들을 아이템으로 넣어준뒤
자동완성기능을 테스트해보면
영어는 잘되지만
한글의 경우는 버그가 있습니다.
첫째로 ComboboxEx Text창에 현대 를 입력하면
'현' 까지밖에인식을 못합니다. 현대 에서 대 부분에 포커스가 가 있지만 아직 완성된건지 아닌지를 파악을 못하니
아이템리스트에 현으로 시작하는 모든 데이터를 보여주고있네요.
원래라면 현대 로 시작하는 자료를 보여주어야 하는데 말이죠.
이런 버그를 해결하기위해 인터넷에서 구한 한글자동완성 소스를 추가해주었습니다..
private FlastKey: integer;
procedure TForm1.ComboBoxEx1Change(Sender: TObject);
var
i: integer;
begin
if (FLastKey <> -1) AND (FLastKey <> VK_BACK) then
begin
i := (Sender as TComboboxEx).Perform(
CB_FINDSTRING, -1, LongInt(PChar((Sender as TComboboxEx).Text)));
if i <> -1 then
PostKeyEx32(VK_PROCESSKEY, [], False);
end;
FLastKey := 0;
end;
--------------------------------------------------------------------------------
procedure TForm1.PostKeyEx32(key: Word; const shift: TShiftState;
specialkey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { end for }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { end for }
end;
-------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
FLastKey := -1;
end;
이건 TCombobox의 한글자동완성이 제대로 동작하게 해주는 소스인데
Tcomboboxex에 사용하니 다른문제가 생겼습니다.
한글이 쪼개지는 현상입니다,
현대건설을 입력하면
'ㅎㅕㄴㄷㅐㄱㅓㅅㅓㄹ' 이렇게됩니다.
몇일재 아무리 헤매봐도 해결이 안되는 문제인데
ㅇ아시는 방법이 있다면 답변좀 부탁드리겠습니다. 감사합니다.