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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[794] 멀티라인 캡션 표시 TButton.
김태선 [cppbuilder] 7204 읽음    2008-08-17 02:20
TButton 버턴에 멀티라인이 표시되었으면 할때가 가끔 있는데
그런 간단한 동작을 위해 컴포넌트를 새로 설치하기도 그렇고
새로 버턴을 만들기도 그렇고, 간단히 속성을 바꾸는 코드를 모든 버턴에
적용하려니 조금 귀잖기도 하고,
이럴때 가장 간편하게 문제를 해결하는 방법은 이겁니다.
물론 빌더2007은 WordWrap 속성이 있으니 이게 전혀 필요없지만 빌더6는  가끔 필요할 때도 있을 겁니다.

그런데 똑 같은 방법을 TBitBtn에 적용하면 전혀 먹지 않습니다.
이건 너무 당연한 현상으로, TButton과는 달리 TBitBtn은 버턴 모양을 OS에 맡기지 않고 직접 그리기
때문입니다. 그러므로 TBitBtn의 캡션을 멀티라인으로 표시하고 싶으면 직접 그려주는 방법을
써야 합니다.
윈도 메시지 핸들러를 아래처럼 만들어서
    MESSAGE void __fastcall CNDrawItem(Messages::TWMDrawItem &Message);
처리해주면됩니다.
자세한 방법은 VCL의 Buttons.pas 소스 안을 보시면 확실히 아실 수 있습니다.
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
// 멀티라인 캡션 표시 TButton.

class TButton : public Stdctrls::TButton
{
    typedef Stdctrls::TButton inherited;
protected:
    virtual void __fastcall CreateParams(Controls::TCreateParams &Params)
    {
        inherited::CreateParams(Params);
        Params.Style |= BS_MULTILINE;
    }
};
#define TButton                ::TButton
//---------------------------------------------------------------------------
class TForm4 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall Memo1Change(TObject *Sender);
    void __fastcall SpeedButton1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm4(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm4 *Form4;
//---------------------------------------------------------------------------
#endif

이런거 신경쓰기 싫으면 빌더2007로 가시면 됩니다.

-,.-; 잠이 안와서 아주 간단한거 하나 올렸습니다.
그럼
장성호 [nasilso]   2009-05-12 17:37 X
기냥 간단히 다음과 같이 해도...

SetWindowLong(Button1->Handle,GWL_STYLE, GetWindowLong(Button1->Handle,GWL_STYLE) | BS_MULTILINE);

아루스 [tinydew4]   2010-07-20 10:51 X
버튼의 수가 어마어마 할 경우 글 내용이 간단한 경우겠고,
버튼이 한두개 정도면 댓글이 더 간단한 경우겠네요.

+ -

관련 글 리스트
794 멀티라인 캡션 표시 TButton. 김태선 7204 2008/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.