Q&A

  • 현재 커서가 아닌 edit의 가장 끝에 붙여넣기..
edit의 가장 끝에 문자열을 추가 하려고 합니다.



많은 분들이 아래와 같이 하시는 걸로 알 고 있는데...



ex) edit1.Text := edit1.Text + '문자열';



위와 같이 하면 커서의 포인터가 첫칼럼으로 이동 합니다.



그래서 다음과 같이 해보았습니다.



ex) // 현재 커서의 위치를 아는 함수(ColNum) 사용..

edit1.Text := edit1.Text + '문자열';

Edit1.SelStart := ColNum;



로 했더니 문제점이 ...



edit에 한글을 쓰로 있을 때 만약, '국'자를 쓴다고 하면



'구'까지
3  COMMENTS
  • Profile
    구창민 1999.09.03 04:46
    이대선 께서 말씀하시기를...

    > edit의 가장 끝에 문자열을 추가 하려고 합니다.

    >

    > 많은 분들이 아래와 같이 하시는 걸로 알 고 있는데...

    >

    > ex) edit1.Text := edit1.Text + '문자열';

    >

    > 위와 같이 하면 커서의 포인터가 첫칼럼으로 이동 합니다.

    >

    > 그래서 다음과 같이 해보았습니다.

    >

    > ex) // 현재 커서의 위치를 아는 함수(ColNum) 사용..

    > edit1.Text := edit1.Text + '문자열';

    > Edit1.SelStart := ColNum;

    >

    > 로 했더니 문제점이 ...

    >

    > edit에 한글을 쓰로 있을 때 만약, '국'자를 쓴다고 하면

    >

    > '구'까지
  • Profile
    이대선 1999.09.03 05:58
    구창민 께서 말씀하시기를...

    > 이대선 께서 말씀하시기를...

    > > edit의 가장 끝에 문자열을 추가 하려고 합니다.

    > >

    > > 많은 분들이 아래와 같이 하시는 걸로 알 고 있는데...

    > >

    > > ex) edit1.Text := edit1.Text + '문자열';

    > >

    > > 위와 같이 하면 커서의 포인터가 첫칼럼으로 이동 합니다.

    > >

    > > 그래서 다음과 같이 해보았습니다.

    > >

    > > ex) // 현재 커서의 위치를 아는 함수(ColNum) 사용..

    > > edit1.Text := edit1.Text + '문자열';

    > > Edit1.SelStart := ColNum;

    > >

    > > 로 했더니 문제점이 ...

    > >

    > > edit에 한글을 쓰로 있을 때 만약, '국'자를 쓴다고 하면

    > >

    > > '구'까지
  • Profile
    구창민 1999.09.03 06:55
    음.. 말씀하신 내용을 보면 한글이 완성되었나

    확인 하는 루틴이 먼저 여야 할거 같은데..

    아래 내용을 이용하면 가능할 같습니다..^^;

    영대님의 팁을 퍼서 올려드립니다.

    참조 되시길~





    만약 70바이트 짜리 주소필드의 내용을 하나는 30바이트 나머지

    하나는 40바이트로 분리하여 주소를 2줄로 인쇄할경우가 있습니다

    그런데 copy() 를 써서 문자열의 앞부분 30바이트를 자르면

    영문은 상관없지만 한글의 경우는 30번째가 한글의 반쪽이면

    깨지게 됩니다

    아래 Get_KoreanCharPos 가 이를 판단하는 함수이며 예제를 포함

    했습니다





    function Get_KoreanCharPos(letter: string; WishCnt: Integer): Integer;

    var

    i, k, 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;





    이를 호출하여 사용하는 예제입니다



    {주소를 분리}

    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;









    이대선 께서 말씀하시기를...

    > 구창민 께서 말씀하시기를...

    > > 이대선 께서 말씀하시기를...

    > > > edit의 가장 끝에 문자열을 추가 하려고 합니다.

    > > >

    > > > 많은 분들이 아래와 같이 하시는 걸로 알 고 있는데...

    > > >

    > > > ex) edit1.Text := edit1.Text + '문자열';

    > > >

    > > > 위와 같이 하면 커서의 포인터가 첫칼럼으로 이동 합니다.

    > > >

    > > > 그래서 다음과 같이 해보았습니다.

    > > >

    > > > ex) // 현재 커서의 위치를 아는 함수(ColNum) 사용..

    > > > edit1.Text := edit1.Text + '문자열';

    > > > Edit1.SelStart := ColNum;

    > > >

    > > > 로 했더니 문제점이 ...

    > > >

    > > > edit에 한글을 쓰로 있을 때 만약, '국'자를 쓴다고 하면

    > > >

    > > > '구'까지