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
[751] [Forms] MDI폼 배경넣기 4
장성호 [nasilso] 8547 읽음    2008-03-06 11:56
이런 방법이 있는줄 오늘 처음 알았습니다.

이방법은 MDI폼에만 배경넣는 방법만이 아니라
TCustomForm을 상속받은 모든폼에 배경넣는 방법입니다.

참조
http://www.delphitricks.com/source-code/forms/use_image_as_backgroung_of_form.html

위주소에 내용입니다.
procedure TForm1.FormCreate(Sender: TObject); 
var 
  MyBitmap: TBitmap; 
begin 
  MyBitmap:=TBitmap.Create; 
  MyBitmap.LoadFromFile('bg.bmp'); 
  Form1.Brush.Bitmap:=MyBitmap; 
end;


CBuilder 로 바꾸면?
void __fastcall TForm1::FormCreate(TObject *Sender)
{
      Graphics::TBitmap *MyBitmap=new Graphics::TBitmap;
      MyBitmap->LoadFromFile("bg.bmp");
      Brush->Bitmap=MyBitmap;
}


이미지가 CilentRect보다 작으면 바둑판식으로 정렬됩니다.
간단히 작은 이미지를 폼의 배경에 바둑판식으로 정렬해 넣고 싶을때는 이방법이 아주 간편하며 유용할것 같습니다.

다른 TWinControl 은 안되고 폼만 되는 이유는
TCustomForm에서 WM_ERASEBKGND 메세지에 배경을 그려주는 루틴이 있어서 그런것 같습니다.

VCL TCustomForm.ClientWndProc  소스 일부분..
//--------------------------
      WM_ERASEBKGND:
        begin
          FillRect(TWMEraseBkGnd(Message).DC, ClientRect, Brush.Handle);
          { Erase the background at the location of an MDI client window }
          if (FormStyle = fsMDIForm) and (FClientHandle <> 0) then
          begin
            Windows.GetClientRect(FClientHandle, R);
            FillRect(TWMEraseBkGnd(Message).DC, R, Brush.Handle);
          end;
          Result := 1;
        end;
//--------------------------


응용1.  폼위에 TImage가 하나 올려져있을경우..
void __fastcall TForm1::FormCreate(TObject *Sender)
{
      Brush->Bitmap=Image1->Picture->Bitmap;
}


응용2.  특정 Color로 패턴을 만들어서..
Graphics.hpp 에  AllocPatternBitmap 라는 함수가 있네요..

Brush->Bitmap =AllocPatternBitmap(clWhite, clRed);


추신 . MDI폼에 배경 넣기 다른방법들...

방법1. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=357
방법2. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=647
방법3. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=746


그럼..
허정주 [tinydew4]   2008-03-08 01:33 X
Brush.Bitmap := TBitmap.Create;
Brush.Bitmap.LoadFromFile('bg.bmp');
일케 쓰면 되네요.
그리고 소멸자에서
if Assigned(Brush.Bitmap) then Brush.Bitmap.Free;
를 해주셔야~~

+ -

관련 글 리스트
751 [Forms] MDI폼 배경넣기 4 장성호 8547 2008/03/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.