한글코드문제입니다.
한글을 입력하는 것에 따라서 검색하는 프로그램을 짜고 있습니다.
헌데, 너무 어렵군요.
계속 어떤 글자를 입력받아도 가령(예:미 -> 2Byte, 밀 -> 2byte)
이런 식으로 되니 검색이 안됩니다.
아시는 분은 부탁드립니다.
화면은 Edit 1개 , StringGrid 1개입니다.
function TF_search.HanDiv(const Han: PChar; Han3: PChar): Boolean;
var
UniCode : Integer;
ChoSung : Integer;
const
ChoSungTbl : PChar = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';
UniCodeHangeulBase = $AC00;
UniCodeHangeulLast = $D79F;
begin
Result := False;
UniCode := 0;
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Han, 2, @UniCode, 1);
if (UniCode < UniCodeHangeulBase) or
(UniCode > UniCodeHangeulLast) then Exit;
UniCode := UniCode - UniCodeHangeulBase;
ChoSung := UniCode div (21 * 28);
StrLCopy(Han3, ChoSungTbl + ChoSung * 2, 2);
Result := True;
end;
procedure TF_search.ed_jusikKeyPress(Sender: TObject; var Key: Char);
var
HanOut : array[0..9] of Char;
TempStr : string;
TempLen : Integer;
begin
FirstChar := '';
FirstChar := ed_jusik.Text;
TempStr := FirstChar;
TempLen := Length(ed_jusik.Text);
if Key = #13 then
begin
if (FirstChar = '') or (FirstChar = 'A') or (FirstChar = 'a') then
begin
ShGrid.Row := 1;
Exit;
end
else begin //찾으려는 글자가 한글일 경우 실행.
if HanDiv(PChar(TempStr),@HanOut) then//한글이면 True;
begin
for i := 0 to ShGrid.RowCount-1 do
begin
if IsDBCSLeadByte(Byte(ChoSungTbl)) then
begin
//여기서 바보같이 검색을 못합니다.
if Copy(ShGrid.Cells[1,i],1,TempLen) >= TempStr then
begin
ShGrid.Row := i+4;
ShGrid.Row := i;
exit;
end;
end;
end;
end;
end;
end;
end;
//제가 짠 소스가 아닙니다. 부디 간단한 설명도.....