Hi Leutz,
wollt' mich noch mal explizit bei Euch für Eure Hilfe bei diesem Thema bedanken. Es funktiniert jetzt ohne Probleme.
Bissi doof ist, dass
DirectX im Fenstermodus scheinbar immer direkt auf den Desktop zeichnet
und zwar uabhängig davon, ob man das
Handle eines Panels übergibt, das
Handle des Fenters
oder einfach das
Handle 0 (Null). Habe nun 2 Methoden: Zum Ereugen von Front - und
Backsurface.
Hier der Quelltext:
Delphi-Quellcode:
function TGraphicInterface.Init_DirectX;
var DDSurfaceDesc : TDDSurfaceDesc2;
Clipper : IDirectDrawClipper;
res : HRESULT;
begin
result:=false;
res:= DirectDrawCreateEx(nil, DD7, IID_IDirectDraw7, nil);
if res <> DD_OK then
begin
self.SetLastError(DDErrorString(res));
exit;
end;
res:= DD7.SetCooperativeLevel(0, DDSCL_NORMAL );
if res <> DD_OK then
begin
self.SetLastError(DDErrorString(res));
exit;
end;
fillchar(DDSurfaceDesc, sizeof(DDSurfaceDesc), 0);
with DDSurfaceDesc do
begin
dwSize:=sizeof(DDSurfaceDesc);
dwFlags:= DDSD_CAPS;
ddsCaps.dwCaps:=DDSCAPS_PRIMARYSURFACE;
end;
res:= DD7.CreateSurface( DDSurfaceDesc,Primary,nil);
if res <> DD_OK then
begin
self.SetLastError(DDErrorString(res));
exit;
end;
if not self.CreateBackgroundSurface(self.Back, width, height) then
begin
self.SetLastError('<CreateSurface> returned FALSE');
exit;
end;
res:= DD7.CreateClipper(0, Clipper, nil);
if res <> DD_OK then
begin
self.SetLastError('<Create Clipper> returned FALSE');
exit;
end;
result:= res = DD_OK
end;
Function TGraphicInterface.CreateBackgroundSurface;
Var Desc : TDDSurfaceDesc2;
Begin
ZeroMemory(@Desc,SizeOf(Desc));
Desc.dwSize:= SizeOf(Desc);
Desc.dwFlags := DDSD_CAPS OR DDSD_WIDTH OR DDSD_HEIGHT;
Desc.dwWidth := width;
Desc.dwHeight:= height;
Desc.ddsCaps.dwCaps:= DDSCAPS_OFFSCREENPLAIN;
Result:= DD7.CreateSurface(Desc, Surface, nil) = DD_OK;
end;