방법1> widestring타입으로 복사하여 Copy함수를 쓰시는 방법
여기서 s가 '하나두울셋'일때 결과는 '하나두'입니다.
procedure TForm1.Button1Click(Sender: TObject);
var
s :widestring;
begin
s := edit1.text;
edit1.text := Copy(s,1,3);
end;
방법2> 이건 일일이 해당 바이트가 영문인지 한글앞자리인지 뒷자리 인지 확인하는 방법입니다.
procedure TForm1.Button2Click(Sender: TObject);
begin
case ByteType(edit1.text, 2) of
mbSingleByte : Label1.Caption := '이것은 single Byte!';
mbLeadByte : Label1.Caption := '이것은 한글 앞자리!';
mbTrailByte : Label1.Caption := '이것은 한글 뒷자리!';
end;
end;
{ 주소를 분리
i := Get_KoreanCharPos(Query1.FieldByName('ADDR').AsString, 30);
if i = -1 then
begin
QRL_addr1.Caption := Query1.FieldByName('ADDR').AsString;
QRL_addr2.Caption := '';
end
else
begin
QRL_addr1.Caption := Copy(Query1.FieldByName('ADDR').AsString,1,i);
QRL_addr2.Caption := Copy(Query1.FieldByName('ADDR').AsString,i+1,40);
end;
}
function Get_KoreanCharPos(letter: string; WishCnt: Integer): Integer;
var
i, msb: integer;
begin
if System.Length(letter) < WishCnt then
begin
Get_KoreanCharPos := -1;
System.Exit;
end;
msb := 0;
for i := 1 to WishCnt do
if (Integer(letter[i]) and Integer($80)) = Integer($80) then
Inc(msb);
if (msb mod 2) = 0 then {'$80'인것이 짝수개이면 완성된 한글문장}
Get_KoreanCharPos := WishCnt
else
Get_KoreanCharPos := WishCnt - 1;
end;