Hallo, inherited.
Also ich habe eine Klasse namens TSgGame, die sich um die Erstellung und Verwaltung des AdDraw-Objekts kümmert. Das Fenster, auf das gezeichnet werden soll, wird als Parameter Parent übergeben.
Delphi-Quellcode:
constructor TSgGame.Create(const Parent: tWinControl);
begin
inherited Create;
fPerformanceCounter := tAdPerformanceCounter.Create;
AdDraw := TAdDraw.Create(parent);
AdDraw.DllName := 'AndorraDX93D.dll';
{...}
// Setup(parent.width,parent.height); <-- hab ich testweise in's OnCreate der Form verschoben. weiß nicht mehr wieso >.<
adDraw.Initialize;
end;
Meine Mainform erzeugt im OnCreate eine Instanz von TSgGame:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
{...}
pDrawScreen.Align := alClient; // pDrawScreen ist das TPanel auf das gezichnet werden soll
pDrawScreen.Caption := '...';
{...}
game := tsggame.Create(pDrawScreen);
game.setup(pdrawscreen.width,pdrawscreen.height);
{...}
windowstate := wsmaximized;
{...}
end;
TSgGame.Setup sieht so aus:
Delphi-Quellcode:
procedure TSgGame.setup(width, height: integer);
begin
{...}
if AdDraw.Initialized then
AdDraw.Setup2DScene;
end;
Der Vollständigkeit halber noch der Code aus dem OnResize des Panels:
Delphi-Quellcode:
procedure TfrmMain.pDrawScreenResize(Sender: TObject);
begin
if assigned(game) then // <-- Die Prüfung ist wegen dem doofen Bug, dass OnResize auch nach dem OnDestroy noch aufgerufen wurde oder so...
game.setup(pdrawscreen.width,pdrawscreen.height);
end;