C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[4023] Re:Re:Re:Re:Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요...
pulyip [] 3772 읽음    2000-09-02 00:00
걍 편법 입니다.

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "WrapTest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
/* soft line break문자(열:\r\r\n)을 라인에 삽입해서 wordwrap을
구현 한다고 나와있긴한데...
EM_GETHANDLE메시지에 의해서 반환되는 버퍼에만 영향을 끼치고,
실제 텍스트 출력에는 영향을 끼치지 않는다고 나와있네요...

실제로 "\r\r\n"을 WordWrap모드에서 삽입하면 한 라인만 다운(?:아래로 이동)
되지만 WordWrap모두를 해제하면 2라인... 다운. hard line break는 "\r\n"
이라는 군요...
*/

//    RichEdit1->SelText = "\r\r\n";
    static bool bInsert = true;
    ::SendMessage(RichEdit1->Handle, EM_FMTLINES, bInsert, 0);
    bInsert != bInsert;
    RichEdit1->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    RichEdit1->WordWrap = !RichEdit1->WordWrap;
    if(RichEdit1->WordWrap) {
        Button2->Caption ="Off WordWrap";
        Button3Click(NULL);
    }
    else {
        Button2->Caption ="On WordWrap";
        TRect RT;
        SendMessage(RichEdit1->Handle, EM_GETRECT, 0, (long)(&RT));
        RT.Left = 10;
        RT.Right = RichEdit1->Left+ RichEdit1->Width;
        SendMessage(RichEdit1->Handle, EM_SETRECT, 0, (long)(&RT));
    }
    // WordWrap구현도 soft line-break문자와 EM_SETRECT로 구현 했는지
    //( 아시는분...왜이렇게 돼죠? )
    // WordWrap을 호출하면... 기존에 설정해 놓은 Rect이 무효화 되더군요..
    // TRichEdit구현 소스를 보니, DT_LINEBREAK문자등과 어떤 연산을해서
    // DrawText로 출력 하는것 같더군요...소스가 pascal이라...잘 이해는
    // 못했지만...
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1KeyPress(TObject *Sender, char &Key)
{
    if( Key == '\r')
        RichEdit1->SelText="@";
}
//---------------------------------------------------------------------------
/*문자열이 출력되는 영역을 설정하더군요... WordWrap과 조합해서
사용하면... 80컬럼 wordwrap구현도 가능할 듯.
물론 80컬럼 워드랩을 해제하면 원래대로 영역을 복구해 줘야 할꺼구요...
*/
void __fastcall TForm1::Button3Click(TObject *Sender)
{
#define    COLUMN_WIDTH(col)    (iCharWidth*col)
    static const int iLeftMargin = 10;
    int iCharWidth = 7;

    TRect RT;
    SendMessage(RichEdit1->Handle, EM_GETRECT, 0, (long)(&RT));
    RT.Left += iLeftMargin;
    RT.Right = RT.Left + COLUMN_WIDTH(80);
    SendMessage(RichEdit1->Handle, EM_SETRECT, 0, (long)(&RT));
}
//---------------------------------------------------------------------------

/*
실제는 soft linebreak문자를 사용해서 wordwrap을 구현 하는것 같은데...
건 잘 모르겠습다..

걍 작성하는데 참고만 하세요..

참 혹시 에디터 구현 중이라면... 매크로 기능 구현 해 보셨나요??? 구현법???

* 이 글을 읽는 모든분께:글구... 틀린부분 있으면 지적바랍니다.
*/

+ -

관련 글 리스트
4013 [질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... 이영수 3360 2000/09/01
4015     Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... pulyip 3388 2000/09/01
4016         Re:Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... 이영수 3787 2000/09/01
4019             Re:Re:Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... pulyip 3309 2000/09/02
4020                 Re:Re:Re:Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... 이영수 3435 2000/09/02
4023                     Re:Re:Re:Re:Re:[질문]리치에디트에서 현재 캐럿 위치에 원하는 문자 삽입하는 방법좀 알켜 주세요... pulyip 3772 2000/09/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.