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
[18507] Re:richedit 또 질문입니다.
유영인 [Chris] [cuperido] 1606 읽음    2002-05-15 10:45
EM_FORMATRANGE 메세지를 이용하시면 됩니다. 프린터 할때도 유용하게 쓰이는 놈입니다..

아래 예제는 버튼을 클릭하면 RichEdit1의 Height를 텍스트 크기에 맞게 조정하는 예제입니다. 만약 Width 도 필요하시면 아래 return 값만 right - left 로 고쳐주시면 됩니다.


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{

RichEdit1->Height = GetRicheditSize(RichEdit1);

}

//---------------------------------------------------------------------------

int __fastcall TForm1::GetRicheditSize(TRichEdit *RICHEDIT)
{

int               itPixelSize = Screen->PixelsPerInch;
TFormatRange      frRange;


frRange.hdc        = Canvas->Handle;
frRange.hdcTarget  = Canvas->Handle;
frRange.rc         = Rect(0, 0, 200 * 1440 / itPixelSize, 600 * 1440 / itPixelSize);
frRange.rcPage     = Rect(0, 0, ClientWidth * 1440 / itPixelSize, ClientHeight * 1440 / itPixelSize);
frRange.chrg.cpMin = 0;
frRange.chrg.cpMax = RICHEDIT->GetTextLen() - 1;

RICHEDIT->Perform(EM_FORMATRANGE, 0, LPARAM(&frRange));
RICHEDIT->Perform(EM_FORMATRANGE, 0, 0);  // Free 루틴


return((frRange.rc.bottom * itPixelSize / 1440) - (frRange.rc.top * itPixelSize / 1440));

}
//---------------------------------------------------------------------------


송득보 님이 쓰신 글 :
: 리치에디트로 사용자가 값(텍스트 문서)등을 입력하게 하고..
: 그 내용 모두가 나오도록 richedit의 크기를 조정하고 싶습니다.
: 제가 생각했을 때 단점은, 리치에디트는 rtf기 때문에
: 각 문자마다 제각각 글자크기등을 달리할 수 있어서
: 총 라인수는 알 수 있더라도.. 그 라인만큼의 텍스트를 찍기 위해
: 필요한 total height를 알지 못하기 때문에..
: 사용자가 입력한 문서내용에 맞게 richedit의 크기를 조절하는 방법을
: 모르겠네요..
:
: 쉽게말해서..richedit의 현재 height가 100인데
: 사용자가 입력한 문자열(height==150)들이 모두 화면에 보이게 하려면
: richedit의 height를 150으로 맞춰서 딱 그 내용까지만 나오게끔..
: 조정하는 방법이 없을까요? 여기서 참고사항은..각 줄단위
: height는 제각각 다를 수 있다는 겁니다.
:
: 제 나름대로 문제를 해결할 수 있는 힌트를 몇가지 찾아봤는데요..
:
: 1) richedit의 내부에서 자동으로 생성되는 vertical scrollbar 객체의 method를 참조하는 방법
: ->요놈은 display해야될 logical height를 다 알고있을테니..이것만 참조해도..될듯..근데 방법은?
:
: 2) ...?
:
: 산너머 산이네요.. -_-;
:
: 도와주십시오..
:
: -locke
:

+ -

관련 글 리스트
18483 richedit 또 질문입니다. 송득보 1261 2002/05/14
18507     Re:richedit 또 질문입니다. 유영인 [Chris] 1606 2002/05/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.