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;