Q&A

  • 한글문제입니다.
한글코드문제입니다.

한글을 입력하는 것에 따라서 검색하는 프로그램을 짜고 있습니다.

헌데, 너무 어렵군요.

계속 어떤 글자를 입력받아도 가령(예:미 -> 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;

//제가 짠 소스가 아닙니다. 부디 간단한 설명도.....



0  COMMENTS