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
[21428] 유영인님! 예전에 글 올리신거에 질문이 있습니다.
초짜 [chqh] 686 읽음    2002-09-13 15:23
아래 글을 보면 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));

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

+ -

관련 글 리스트
21428 유영인님! 예전에 글 올리신거에 질문이 있습니다. 초짜 686 2002/09/13
21437     Re:유영인님! 예전에 글 올리신거에 질문이 있습니다. 유영인.Chris 738 2002/09/13
21444         Re:Re: 역시 그 방법밖에는 없는건가용.. 초짜 834 2002/09/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.