Pergunta

Nesse código, eu esperaria que uma chamada para ReleaseDC acontecesse em MyCanvas.Free, mas esse código funciona bem, por que?
E o que acontece com o próprio DC do TCanvas?

var GlobalDC: THandle;

procedure TForm1.FormCreate(Sender: TObject);
begin
   GlobalDC:= GetDC(0);
end;

function LoopMeOften(const X, Y: Integer): TColor;
var
  MyCanvas: TCanvas;
begin
  MyCanvas := TCanvas.Create;
  MyCanvas.Handle := GlobalDC;
  Result := GetPixel(MyCanvas.Handle, X, Y);
  MyCanvas.Free;
end;
Foi útil?

Solução

TCanvas não tem seu próprio DC, ele não adquire nem libera um DC.Seu TControlCanvas descendente sim.

De Propriedade TCanvas.Handle

TCanvas não possui o HDC. Os aplicativos devem criar um HDC e defina a propriedade Handle.Formulários deve liberar o HDC quando a tela não precisa mais disso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top