Form - Bitmap em Mdiform |
Top Previous Next |
|
Sugestões on-line e real-time extremamente rápidas:
mude a linha para: FOriginalProc := SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FClientInstance));
Não se esqueça: FreeObjectInstance( FDefClientInstance ); SetWindowLong(ClientHandle, GWL_WNDPROC, Longint( FOriginalProc ) ); no evento OnDestroy (melhor seria sobreescrever o método DestroyWnd).
Teria outras coisas pra deixar isso melhor, mas ainda estamos testando.
Sabia que mudança de determinadas propriedades do formulário pode acarretar em destruição de um exemplar de janela Windows e alocação de uma outra nova? Assim, na verdade, o melhor lugar pra fazer as coisas que cê fez no evento OnCreate seria sobreescrever os métodos CreateWnd e DestroyWnd.
-----------------------
Vc so precisa usar o ClientHandle, que contem o hWND da area cliente do MDIForm. O exemplo abaixo preenche a area cliente do MDI com o bitmap contido em Image1.
procedure TMainForm.FormPaint(Sender: TObject); var ii,jj : integer; IntCanvas : TCanvas; begin IntCanvas := TCanvas.Create; IntCanvas.Handle := GetDC (ClientHandle); for ii := 0 to (Width div Image1.Width) do begin for jj := 0 to (Height div Image2.Height) do IntCanvas.Draw (ii*Image1.Width,jj*Image1.Height,Image1.Picture.Bitmap); end; IntCanvas.Free; end;
Inclua tambem um Invalidate no evento OnResize, como no exemplo abaixo, para que a atualizacao do fundo ocorra tambem quando o form eh reduzido ou restaurado.
procedure TMainForm.FormResize(Sender: TObject); begin Invalidate; end;
|