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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[59] MDI main form의 배경을 image로 그리기
박정모 [] 5309 읽음    2001-12-22 13:21

MDI main form 인 TForm1의 WM_ERASEBKGND, WM_VSCROLL, WM_HSCROLL를 받아서 배경을
image로 그리는 예제 입니다.

type
  TForm1 = class( TForm )
  ...
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ClientWndProc( var Message : TMessage );
    procedure DrawImage;

  protected
    procedure CreateWnd; override;

  end;

var
  Form1 : TForm1;
  NewClient,
  OldClient : TFarProc;
  MyDC : hDC;

implementation

uses
  unit2;

{$R *.DFM}

procedure TForm1.CreateWnd;
begin
  inherited CreateWnd;

// 메시지 처리를 위해 WndProc을 교체한다
  NewClient := MakeObjectInstance( ClientWndProc );
  OldClient := Pointer( GetWindowLong( ClientHandle, GWL_WNDPROC ) );
  SetWindowLong( ClientHandle, GWL_WNDPROC, LongInt( NewClient ) );
end;

// MDI main form에 Image를 그려주는 함수
//   - 이 함수에서 사용하는 Image1이 Form위에 올려져 있어야 한다
procedure TForm1.DrawImage;
var
  i,
  j : Integer;
  Rows,
  Cols : Integer;
  WndRect,
  ImageRect : TRect;
begin
  GetWindowRect( ClientHandle, WndRect );
  ImageRect := Image1.ClientRect;
  Rows := WndRect.Bottom div ImageRect.Bottom;
  Cols := WndRect.Right div ImageRect.Right;

  with Image1 do
     for i := 0 to Rows + 1 do
        for j := 0 to Cols + 1  do
           BitBlt( MyDC, j * Picture.Width,i * Picture.Height,Picture.Width,
                   Picture.Height,Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY );
end;

procedure TForm1.ClientWndProc( var Message : TMessage );
begin
  case Message.Msg of
     WM_ERASEBKGND :
     begin
        CallWindowProc( OldClient, ClientHandle, Message.Msg, Message.wParam, Message.lParam );
        MyDC := TWMEraseBkGnd( Message ).DC;
        DrawImage;
        Message.Result := 1;
     end;

     WM_VSCROLL,
     WM_HSCROLL:
     begin
        Message.Result := CallWindowProc( OldClient, ClientHandle, Message.Msg, Message.wParam,
                                          Message.lParam );
        InvalidateRect( ClientHandle, nil, True );
     end;

     else
        Message.Result := CallWindowProc( OldClient, ClientHandle, Message.Msg, Message.wParam,
                                          Message.lParam );
  end;
end;


+ -

관련 글 리스트
59 MDI main form의 배경을 image로 그리기 박정모 5309 2001/12/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.