Q&A

  • String을 짜를때 한글을 안 깨지게 하는 방법 없을까요?
긴 문자열을 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;

----------------------------------------



3  COMMENTS
  • Profile
    ♡러브히나™ 2010.01.15 05:45

    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));

    대략 위와 같은 샘플 형태로 사용하시면 됩니다.
    위 함수는 한글이 잘리는 경우 바로 전 길이를 구합니다.
    필요하시면 함수를 적당히 수정하시면 바로 결과를 가져올 수 있게 수정할 수 있겠네요...

    출처 : 아주 오래전 사이트 어딘가에서...
  • Profile
    최용일 2010.01.15 20:08
    ByteType이란 함수를 쓰시면 쉽게 할 수 있습니다.

    if Length(sString) > 40 then
    L := 40;
    If ByteType(sString, L) = mbTrailByte then
    Dec(L);

    lable1.Caption := Copy(sString, 1, L);
    lable2.Caption := Copy(sString, L+1, Length(sString) - L );
    end;
  • Profile
    이의성 2010.01.16 03:52
    감사합니다~~

    그런데,

    If ByteType(sString, L) = mbTrailByte then
    Dec(L);

    에서 '=' 를 '<>' 해야 되는거 같습니다...

    덕분에 야근시간이 단축되었습니다.. (__);;;

    두분 즐거운 하루 되세요...

    • 이건희
    • 2010.01.23 02:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2010.01.23 09:19
      꼭 델파이랑 그래픽 카드라고 할 수는 없는듯해요, 사용하는 함수나 컴포넌트중 그래픽카드의 특정 부분...
    • 아이에스
      2010.01.23 02:46
      UserName = SYSDBA Password = masterkey
    • 이용벽
    • 2010.01.22 19:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장성호
      2010.01.22 20:10
      메뉴에서 1) "File"->"New"->"Frame"을 클릭하세요 2) 그러면 폼과 같은 디자인 화면이 나옵니...
    • 이강석
      2010.01.20 18:16
      30일 밖에 못 쓰는게 맞는거 같은데요~~아니면 돈 주고 사시던가해야 할꺼예요~~물론 어둠의 경로로 까시...
    • 엄마미안
      2010.01.20 20:03
      학습목적인데 정품을 구매하긴 아무래도 부담이 가실겁니다. 어둠의 경로에서 델20XX 시리즈를 제외한 하...
    • 뉴비
      2010.01.21 06:07
      감사합니다. ㅠ 어둠의 경로를 뒤져야 겠군영
    • 띵아
      2010.01.30 02:15
      아 어둠의 경로 ^^ 쩝
    • 아르스
      2010.01.20 23:37
      var result : array[0..15] of Char; StrM : String; I : Integer; 이 부분을 아래처럼 바꿔...
    • 극상초보
    • 2010.01.19 19:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2010.01.19 20:58
      영어가 짧아서...원하시는 기능을 한글로 써주세요..
    • 혀노
    • 2010.01.19 02:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2010.03.08 23:13
      영상사이즈가 크다면 CPU문제가 생길수있습니다. 일단 제가보기에는 비디오 믹서를 사용해서 작업을 ...
    • 박상윤
      2010.03.08 23:15
      필요하시면 spy7111@naver.com 메일주세요. 자세히 설명해드릴께요.^^
    • 최진영
    • 2010.01.18 08:56
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 언제나초보
      2010.01.18 18:32
      GROUP BY C_NAME, TEL, (Addr_dong+Addr_bungi+Addr_Hosu+Addr_bild)
    • 이용벽
      2010.01.18 22:24
      where 와 Group by는 동시에 작동이 안됩니다. 그리고 참고로 Group by 나 Order by가 있으면 Query 수...
    • 엄마미안
      2010.01.20 20:07
      무저건 where절과 group by가 동시 작동이 안되는게 아니라. where 전에 체크하는 컬럼이 그룹바이에 엮...
    • 이용벽
      2010.01.22 18:17
      몇년 전에 비슷한 문제로 고생하다가 겨우 해결하고 넘어간 기억이 있습니다. 그때 더 이상 자세히 뜯어...
    • 이강석
      2010.01.16 03:11
      sTemp := Format( '%.2d', [Result[16]] ); 이라네요..검색했더니..^^
    • 홍성락
      2010.01.16 03:18
      도움말보시면 x형에서는 자릿수가 남으면 0으로 자동 처리됩니다. '%.2x'로하세요. Format('%.2x', [re...
    • 극상초보
      2010.01.19 18:31
      이강석님,홍성락님 정말로 감사드립니다. 덕분에 문제가 잘 해결
    • 극상초보
      2010.01.16 00:14
      result[0],result[1],result[2],result[3]에 들어 가 있는 데이터를 따로따로 String 타입으로 변경하고 ...
    • 홍성락
      2010.01.16 00:52
      Edit2.Text := String(@result); 이렇게해보세요 배열중 아스키 코드를 넣었으면 문자로 될겁니다. 배열...
    • 극상초보
      2010.01.16 01:14
      홍성락님 정말 감사합니다. 많은 도움이 되었습니다..^0^ 복받으실꺼예요!!!
    • 이강석
    • 2010.01.15 20:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이강석
      2010.01.18 22:38
      CPU 100%-_-;;;;;;;
    • 박성훈
    • 2010.01.15 07:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      2010.01.15 07:41
      해결했습니다.
    • 이의성
    • 2010.01.15 03:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • ♡러브히나™
      2010.01.15 05:45
      Function Get_KoreanCharPos(letter: String; WishCnt: Integer): Integer; Var i, msb ...
    • 최용일
      2010.01.15 20:08
      ByteType이란 함수를 쓰시면 쉽게 할 수 있습니다. if Length(sString) > 40 then L := 40; If ...
    • 이의성
      2010.01.16 03:52
      감사합니다~~ 그런데, If ByteType(sString, L) = mbTrailByte then Dec(L); 에서 '='...
    • 장덕곤
    • 2010.01.15 01:43
    • 0 COMMENTS
    • /
    • 0 LIKES
    • delpia
    • 2010.01.14 18:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2010.01.15 02:03
      이미지에 보니... LoginPrompt 가 true인데요.. false이면 안 물어보지 않을까요? ^^
    • phono
      2010.01.14 18:20
      부팅시 실행시키고자 하는 본인 프로그램을 서비스 형태로 등록시켜놓되.. 실행금지목록 리스트 또는 ...
    • 이강석
      2010.01.14 20:59
      네..한 이틀 고민했는데..방법이 그것 밖에 없네요..^^감사~~