ドラゴンクエストクローンを作ろう

1dq
垢版 |
03/03/01 02:44ID:A/IG49Gl
ドラゴンクエストクローンを作ろう
03/03/03 07:04ID:pxhSxl9y
>>15
DirectDrawでのTCanvasの使い方がなっていない。
WindowsAPIを使うなどとは・・・。
以下のようなクラスを作って

interface
uses
  Windows, Graphics, DirectX;
type
  TDirectDrawCanvas = class(TCanvas)
  protected
    FSurface: IDirectDrawSurface;
    FDeviceContext: HDC;
    FEnabled: Boolean;
    procedure CreateHandle; override;
  public
    constructor Create(ASurface: IDirectDrawSurface);
    destructor Destroy; override;

    procedure Release;
    property Enabled: Boolean read FEnabled;
  end;

implementation

03/03/03 07:05ID:pxhSxl9y
開業多すぎうざい。連投規制に引っかかるかも知れんので続きは後になるかも
{ 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;
03/03/03 07:08ID:pxhSxl9y
procedure TDirectDrawCanvas.CreateHandle;
begin
  if FDeviceContext = 0 then begin
    FEnabled := FSurface.GetDC(FDeviceContext) = DD_OK;
    if FEnabled then
      Handle := FDeviceContext
    else begin
      Handle := 0;
      FDeviceContext := 0;
    end;
  end;
end;

使い方は
 Canvas := TCanvas.Create(BackBufferSurface);
しておいて
 with Canvas do
  if Enabled then try
   Pen.Style := psSolid;
   :
  finally
   Release;
  end;
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況