開業多すぎうざい。連投規制に引っかかるかも知れんので続きは後になるかも
{ TDirectDrawCanvas }
constructor TDirectDrawCanvas.Create(ASurface: IDirectDrawSurface);
begin
  inherited Create;
  FSurface := ASurface;
  FDeviceContext := 0;
  FEnabled := ASurface.IsLost = DD_OK;
end;

destructor TDirectDrawCanvas.Destroy;
begin
  Release;
  inherited;
end;

procedure TDirectDrawCanvas.Release;
begin
 if FDeviceContext <> 0 then begin
    Handle := 0;
    FSurface.ReleaseDC(FDeviceContext);
    FDeviceContext := 0;
  end;
end;