[Qt] Good progress on TBitmap

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Sat Jan 27 21:43:49 CET 2007


I was trying to get this code running:

procedure TPainter.Paint;
var
  bmpDisplay, bmpOutput: TBitmap;
  ScreenDC: HDC;
begin
  bmpDisplay := TBitmap.Create;
  bmpOutput := TBitmap.Create;
  try
    bmpOutput.Width := 500;
    bmpOutput.Height := 500;

    bmpOutput.Canvas.Rectangle(Form2.RectX, Form2.RectY, 100, 100);

    Canvas.Draw(0, 0, bmpOutput);
  finally
    bmpDisplay.Free;
    bmpOutput.Free;
  end;

  inherited Paint;
end;

Where TPainter is a TCustomControl descendent created on a form.

So I added this function (read the comments on it to understand what I
was thinking when I wrote it):

{------------------------------------------------------------------------------
  Function: TQtDeviceContext.setImage
  Params:  None
  Returns: Nothing

  This function will destroy the previous DC handle and generate
 a new one based on an image. This is necessary because when painting
 is being done to a TBitmap, LCL will create a completely abstract DC,
 using GetDC(0), and latter use SelectObject to associate that DC
 with the Image.
 ------------------------------------------------------------------------------}
procedure TQtDeviceContext.setImage(AImage: TQtImage);
begin
  vImage := AImage.Handle;

  QPainter_destroy(Widget);

  Widget := QPainter_Create(vImage);
end;

Maybe this function is the cause?

More debugging and thinking is necessary ...

Is there any regression on the functionality? Your app seams to work
here ... and without a console I don't see error messages.

> What you think about going yet one step further and use
> DebugLn('msg',[vars]); as standard syntax for logging?

If it produces the same hex output for handles sure, but we need
someone to go througth all the code and change this ...

-- 
Felipe Monteiro de Carvalho



More information about the Qt mailing list