|
Label의 경우에는 조금 틀리게 결과값이 나오는듯 합니다. 아마도, 글자대로 자르셔서 작업을 해야하지 않을까 생각되네요.
직접 자르는 루틴을 만들어 보시는건 어떠실지요. 한 글자가 얼마나 Width를 갖는지는 이전에 써놓은 게시물이 있습니다. ^^;
꾸벅
초짜 님이 쓰신 글 :
: 아래 글을 보면 Width도 가능하다고 하셨는데 안되더라구요..
:
: int itPixelSize = Screen->PixelsPerInch;
:
: 이것도 폭에 맞겠금 다시 고쳐서 넣어보기도 하였구요..
:
: 엉뚱한 값이 나오더군요.. ^^
:
: 답변 좀 부탁드립니다.
:
: 음.. 원래 제가 하려고 하는 것은..
:
: 아래 예처럼 RichEdit로 구현하는 것이 아니구요..
:
: 원래는 Label로 구현하려고 하거든요..
:
: 이유인 즉은 배경이미지때문에 그렇습니다.
:
: Memo컴포넌트나 RichEdit를 사용하면 배경때문에 골치 아파서 그냥 Label로 정리하려고 하는데..
:
: 단순 WordWrap만을 사용하면 정렬도 이상하고 Caption의 내용이 길어지고 짧아지는거에 따라서 모습이 지저분하더라구요..
:
: 그래서 문자의 길이(숫자도 있고 한글도 있구 영어도 있고.. ^^;;)을 알아서 그것에 맞게 내용을 잘라
:
: Label을 동적 생성해서 정렬을 해주려고 하거든요.. ^^;;
:
: 그런데 쉽지가 않군요..
:
: 음~ 아이디어 좀 주세용.. ^0^
:
: 좋은 하루 되시기 바랍니다.
:
: ////////////////////////////////////////////////////////////////////////////////////////
: 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));
:
: }
: //---------------------------------------------------------------------------
:
|