Domanda

In questo codice mi aspetto che una chiamata a ReleaseDC avvenga in MyCanvas.Free, ma questo codice funziona bene, come mai?
E cosa succede al CD di 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;
È stato utile?

Soluzione

TCanvas non ha un proprio controller di dominio, non acquisisce né rilascia un controller di dominio.Il suo discendente TControlCanvas lo fa.

Da TCanvas.Handlea>

TCanvas non possiede l'HDC. Le applicazioni devono creare un HDC e impostare la proprietà Handle.Applicazioni deve rilasciare l'HDC quando il canvas non ne ha più bisogno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top