AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Direct Draw in einem geschlossenen Bereich

Ein Thema von Dannyboy · begonnen am 13. Aug 2004 · letzter Beitrag vom 6. Sep 2004
 
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#9

Re: Direct Draw in einem geschlossenen Bereich

  Alt 24. Aug 2004, 08:14
Zitat von dizzy:
Und wie sie das können

Nimm mal nen TMediaPlayer und nen Button. Dann wähle den Button als Display, und ab dafür. --> GEHT!
Ein Button ist nämlich ein WinControl, genau so wie ein Fenster, genau so wie ein Panel!
Oh, wow, das habe ich gar nicht gewusst.
Zitat von memphis:
mir fällt gerade noch was ein? hast du das Flag für den exclusiven Modus gesetzt? Heißt glaub ich DDSCL_EXCLUSIVE oder so in der Art. Wenn ja, lösch es einfach mal... man kann nämlich wenn ich mich nicht ganz iree DirectDraw nur bei Fullscreen in den exclusiven Modus setzte.

Vieleicht hilfts...
Yo, <DDSLC_EXCLUSIVE> und <DDSCL_FULLSCREEN> müssen immer zusammen verwendet werden. Ich habe Euch jetzt mal die wichtigen Passagen meines Sourcecodes gepostet. Die Methode <init_DirectX> schlägt bei <SetCooperativeLevel> jedes Mal fehl. Übergeben wird in <display> ein TPanel-Objekt. Wie ihr sehen könnt, habe ich mit den Flags bereits herumgespielt, aber irgendwie komm' ich nicht auf die richtige Kombination. Der Fullscreen-Modus soll NICHT gesetzt werden, ergo darf auch das <DDSCL_EXCLUSIVE>-Flag nicht gesetzt sein. Sorry, ich dokumentiere meinen Source immer in englisch. So, wie unten gepostet, funktioniert es leider NICHT.
Seht's Euch mal bitte an.
Delphi-Quellcode:
type
  TLevelMap = class
  private
  // Display (panel, form, whatever) to be used as canvas for level
    display : HWND;
  // Direct Draw Object
    IDD : IDirectDraw;
  // front buffer surface for Direct-X
    Primary : IDirectDrawSurface;
  // back buffer for Direct-X
    Back : IDirectDrawSurface;
  public
    constructor create(const display : THandle);
    function Init_DirectX : boolean;
  end;

implementation

constructor TLevelMap.create;
begin
  inherited create;
  self.display:= display;
  IDD:= NIL;
  Primary:= NIL;
  Back:= NIL;
end;

function TLevelMap.Init_DirectX;
var ddsd: TDDSurfaceDesc;
    ddscaps: TDDSCaps;
begin
  result:=false;
// Try to initialize direct draw object
  if not (DirectDrawCreate(nil,IDD,nil)=DD_OK) then exit;
// Set Cooperative Level to flags mentioned below
{  if not (IDD.SetCooperativeLevel(Display,DDSCL_ALLOWREBOOT or
                                          DDSCL_EXCLUSIVE or
                                          DDSCL_FULLSCREEN or
                                          DDSCL_ALLOWMODEX)=DD_OK) then exit;
}

if not (IDD.SetCooperativeLevel(Display, //DDSCL_ALLOWREBOOT or
                                      // DDSCL_EXCLUSIVE or
                                       // DDSCL_FULLSCREEN { or
                                       DDSCL_NORMAL or
                                       DDSCL_NOWINDOWCHANGES or
                                         DDSCL_ALLOWMODEX)=DD_OK) then exit;
// initialize surfaceDesc
  with ddsd do
  begin
    dwSize:=sizeof(ddsd);
    dwFlags:=DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
    ddsCaps.dwCaps:=DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
    dwBackBufferCount:=1;
  end;
// create front suface and attach back surface to it
  if not (IDD.CreateSurface(ddsd,Primary,nil)=DD_OK) then exit;
  ddscaps.dwCaps:=DDSCAPS_BACKBUFFER or DDSCAPS_VIDEOMEMORY;
  if not (Primary.GetAttachedSurface(ddscaps,Back)=DD_OK) then exit;
  result:=true;
end;
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz