긴 문자열을 lable 에 나누어서 보여주려 합니다..
40Byte가 넘을때는 다음 레이블에 표시 하려고 하는데,
한글이 깨질때가 있는데 어떻게 해결해야 할가요?
-------------------------------------
var sString;
if Length(sString) > 40 then
lable1.Caption := Copy(sString,1,40);
lable2.Caption := Copy(sString,41, Length(sString)-40 );
end;
델파이에서 했던 내용이고,
아래는 오라클에서 했던 내용입니다..
select substr(memo,1,40), substr(memo,41, length(memo)-40)
from tblMemo
where length(memo) > 40;
----------------------------------------
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;
if Length(sString) > 40 then
lable1.Caption := Copy(sString, 1, Get_KoreanCharPos(sString, 40));
대략 위와 같은 샘플 형태로 사용하시면 됩니다.
위 함수는 한글이 잘리는 경우 바로 전 길이를 구합니다.
필요하시면 함수를 적당히 수정하시면 바로 결과를 가져올 수 있게 수정할 수 있겠네요...
출처 : 아주 오래전 사이트 어딘가에서...