Was passiert mit dem DC, wenn ich eine Leinwand freigebe?
-
29-10-2019 - |
Frage
In diesem Code würde ich erwarten, dass ein Aufruf von ReleaseDC
in MyCanvas.Free
erfolgt, aber dieser Code läuft einwandfrei, wie kommt es?
Und was passiert mit TCanvas 'eigenem DC?
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;
Lösung
TCanvas
hat keinen eigenen DC, er erwirbt oder gibt keinen DC frei.Sein nachkommender TControlCanvas
tut dies.
Von TCanvas.Handle Property /a>
TCanvas besitzt den HDC nicht. Anwendungen müssen einen HDC erstellen und Legen Sie die Handle-Eigenschaft fest.Anwendungen muss den HDC freigeben, wenn die Leinwand braucht es nicht mehr.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow