|
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
:
|