2011-06-17 1 views
4

MyCanvas.FreeReleaseDCが発生することを期待していますが、このコードは正常に実行されます。
TCanvas自身のDCはどうなりますか?キャンバスを空けると、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; 

答えて

8

TCanvasは、独自のDCを持っていないため、DCを取得も解放もしません。その子孫はTControlCanvasです。

TCanvas.Handle Propertyから

のTCanvasは、HDCを所有していません。 アプリケーションでHDCを作成し、 にHandleプロパティを設定する必要があります。アプリケーション は、キャンバス が不要になったときにHDCを解放する必要があります。

関連する問題