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
[40164] Re:Re:Re:프로그램 실행 시에 Paint 수행에 문제가 있어요
수야!╋ [sooya23] 854 읽음    2005-05-13 17:13
방법은 여러가지가 있습니다.

WM_PAINT 메시지를 가로채어 작업하시는것을 기본으로 많은 방법들이 존재하겠지요

빌더에 익숙하지 않으신건지 아님 프로그램에 익숙치 않으신건지 판단이 서지 않아서 답변드리기가 조심스럽군요

void __fastcall TForm1::WndProc(TMessage &msg)
{
    switch( msg.Msg )
    {
        case WM_PAINT :
            Refresh();
            u_SetBtn();
            break;

        default :
            TForm::WndProc( msg );
    }
}

메시지를 가로체어 폼 그린후 u_SetBtn() 함수를 호출하였습니다.

Refresh는 TForm에 있는 함수이며 이는 자식들까지 모두 그리게 됩니다.

이런 방법을 사용하면 원하시는 작업을 하실수 있습니다.

컴포넌트들을 다시 만드셔서 원하시는 작업이 수월하도록 하시는것이 더 좋을거 같습니다.

수고하세요

김명구 님이 쓰신 글 :
: 제가 아직 익숙치 않아서 그러는데...
: 그러면 프로그램 시작시 어떤 이벤트에 그리기 루틴을 넣어줘야 하나요?
:
:
: 수야!╋ 님이 쓰신 글 :
: : 이벤트가 발생되는 시점을 확인 안하셔서 발생된 오류라 판단되네요
: :
: : OnPaint 이벤트는 객체 자신을 그리고 난후에 호출됩니다.
: :
: : TForm을 모두 그리고 난후에 호출 된 이후 자식들을 그리기 시작합니다.
: :
: : 그럼으로 이미 그려진 이후에 다시 자식들이 그려지기 때문에 그려지지 않은것 처럼 보여지는것이지요
: :
: : 그려지지 않은것은 아닙니다.
: :
: :
: : 김명구 님이 쓰신 글 :
: : : 빌더를 사용한지 얼마 안되는 초보자입니다.
: : :
: : : 프로그램을 실행하고 메뉴에서 해당 폼을 실행하면 폼에 있는 버튼들에 색을 입히는 프로그램을 만들고 있습니다.
: : : 폼이 호출되면 버튼에 색을 칠하는 루틴을 FormPaint에 코딩해주고 실행시켰는데 버튼색이 주어진 색으로 안바뀌고 그대로네요 무슨 문제가 있는 것인지......
: : :
: : : 관련된 소스를 올립니다.
: : : ========================================================
: : : void __fastcall TfrmWatch::u_BtnStyle(TButton* Button, AnsiString* Title, TColor color)
: : : {
: : :     tagSIZE btnTag;
: : :     int txtWidth, txtHeight;
: : :
: : :     TCanvas *btncan = new TCanvas();
: : :
: : :     btncan->Handle = GetDC(Button->Handle);
: : :     btncan->Brush->Style = bsSolid;
: : :     btncan->Brush->Color = color;
: : :     btncan->Pen->Color = clWhite;
: : :     btncan->Font->Color = clWhite;
: : :     btncan->Font->Size = -btncan->Font->Height * 100 / btncan->Font->PixelsPerInch;
: : :     btncan->Rectangle(Button->ClientRect);
: : :     txtWidth = btncan->TextWidth(Title[1]);
: : :     txtHeight = btncan->TextHeight(Title[1]);
: : :     btncan->TextOutA(Button->Width/2 - txtWidth/2,
: : :                                  Button->Height/2 - txtHeight/2, Title[1]);
: : :     ReleaseDC(Button->Handle, btncan->Handle);
: : :     delete btncan;
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TfrmWatch::u_SetBtn()
: : : {
: : :      for( int i=0 ; i < this->ControlCount ; i++ )
: : :      {
: : :        if(this->Controls[i]->ClassNameIs("TGroupBox"))
: : :        {
: : :          TGroupBox * GBox = dynamic_cast<TGroupBox *>(this->Controls[i]);
: : :
: : :          for( int j=0 ; j < GBox->ControlCount ; j++)
: : :          {
: : :             if(GBox->Controls[j]->ClassNameIs("TButton"))
: : :             {
: : :                u_BtnStyle(dynamic_cast<TButton *>(GBox->Controls[j]),BTNTITLE, UNTRIP);
: : :             }
: : :          }
: : :        }
: : :      }
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TfrmWatch::FormPaint(TObject *Sender)
: : : {
: : :         u_SetBtn();
: : : }
: : : //---------------------------------------------------------------------------

+ -

관련 글 리스트
40154 프로그램 실행 시에 Paint 수행에 문제가 있어요 김명구 732 2005/05/13
40156     Re:프로그램 실행 시에 Paint 수행에 문제가 있어요 수야!╋ 772 2005/05/13
40162         Re:Re:프로그램 실행 시에 Paint 수행에 문제가 있어요 김명구 732 2005/05/13
40164             Re:Re:Re:프로그램 실행 시에 Paint 수행에 문제가 있어요 수야!╋ 854 2005/05/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.