Q&A

  • 주화면의 바탕에 그림입히기 ??


메인화면이 회색으로 되어 있어 밋밋하네요

그림을 입히는 방법을 알고십습니다.



웹브라우즈의 배경화면 처럼 조그마한 그림을 붙여도

반복적으로 전화면에 표시되어 화면이 확대되어도

문제없는 방법을 아시는 분은 도움을 부탁드립니다



참고서적이라도 추천부탁....

2  COMMENTS
  • Profile
    redhead 1999.05.20 01:38
    초보자 wrote:

    >

    > 메인화면이 회색으로 되어 있어 밋밋하네요

    > 그림을 입히는 방법을 알고십습니다.

    >

    > 웹브라우즈의 배경화면 처럼 조그마한 그림을 붙여도

    > 반복적으로 전화면에 표시되어 화면이 확대되어도

    > 문제없는 방법을 아시는 분은 도움을 부탁드립니다

    >

    > 참고서적이라도 추천부탁....



    unit untMain;



    interface



    uses

    ....



    type

    TfrmMain = class(TForm)

    ..중간생략...



    private

    { Private declarations }

    FClientInstance:TFarProc; <- 추가

    FPrevClientProc:TFarProc; <- 추가

    procedure ClientWndProc(Var Message:TMessage); <- 추가

    public

    { Public declarations }

    end;



    var

    frmMain: TfrmMain;



    implementation



    {$R *.DFM}



    { 아래 procedure 추가 }

    procedure TfrmMain.ClientWndProc(Var Message:TMessage);

    var

    Mydc : hDC;

    ro,co:Word;

    begin

    with Message do

    case Msg of

    WM_ERASEBKGND :

    begin

    MyDC := TWMEraseBKGND(Message).DC;

    BitBlt(MyDC, 0, 0, frmMain.ClientWidth, frmMain.ClientHeight,

    Image1.Picture.BitMap.Canvas.Handle, 0, 0, SRC

    COPY);

    Result := 1;

    end;

    else

    Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam

    , lParam);

    end;

    end;



    { 아래 FormCreate이벤트에 추가 }

    procedure TfrmMain.FormCreate(Sender: TObject);

    begin

    FClientInstance := MakeObjectInstance(ClientWndProc);

    FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));

    SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));

    end;



    end.







  • Profile
    초보자 1999.05.20 02:47
    답장을 주셔서 감사드립니다.

    헌데 아래의 코딩을 복사하여 실행을 시켰는데

    에라는 나지않고 컴파일이 되었는데

    그리고 그다음에는 아무런 변화가 없습니다.(T_T)



    물론 아래의 코딩과 더불어 메임폼에 이미지는 하나가져다 두고

    bmp그림을 올린 상태에서 테스트 런을 했습니다.



    디버깅창에 procedure TfrmMain.ClientWndProc 에서

    정의한 ro,co: Word; 변수가 사용이 안되었다고

    나와 있느데 혹시 이때문인지 ....



    한번더 부탁드립니다 /////











    redhead wrote:

    > 초보자 wrote:

    > >

    > > 메인화면이 회색으로 되어 있어 밋밋하네요

    > > 그림을 입히는 방법을 알고십습니다.

    > >

    > > 웹브라우즈의 배경화면 처럼 조그마한 그림을 붙여도

    > > 반복적으로 전화면에 표시되어 화면이 확대되어도

    > > 문제없는 방법을 아시는 분은 도움을 부탁드립니다

    > >

    > > 참고서적이라도 추천부탁....

    >

    > unit untMain;

    >

    > interface

    >

    > uses

    > ....

    >

    > type

    > TfrmMain = class(TForm)

    > ..중간생략...

    >

    > private

    > { Private declarations }

    > FClientInstance:TFarProc; <- 추가

    > FPrevClientProc:TFarProc; <- 추가

    > procedure ClientWndProc(Var Message:TMessage); <- 추가

    > public

    > { Public declarations }

    > end;

    >

    > var

    > frmMain: TfrmMain;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > { 아래 procedure 추가 }

    > procedure TfrmMain.ClientWndProc(Var Message:TMessage);

    > var

    > Mydc : hDC;

    > ro,co:Word;

    > begin

    > with Message do

    > case Msg of

    > WM_ERASEBKGND :

    > begin

    > MyDC := TWMEraseBKGND(Message).DC;

    > BitBlt(MyDC, 0, 0, frmMain.ClientWidth, frmMain.ClientHeight,

    > Image1.Picture.BitMap.Canvas.Handle, 0, 0, SRC

    > COPY);

    > Result := 1;

    > end;

    > else

    > Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam

    > , lParam);

    > end;

    > end;

    >

    > { 아래 FormCreate이벤트에 추가 }

    > procedure TfrmMain.FormCreate(Sender: TObject);

    > begin

    > FClientInstance := MakeObjectInstance(ClientWndProc);

    > FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));

    > SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));

    > end;

    >

    > end.

    >

    >

    >