Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Vollbild mit DirectX (https://www.delphipraxis.net/18372-vollbild-mit-directx.html)

wsks 17. Mär 2004 15:41


Vollbild mit DirectX
 
Hallo,
ich habe einen MPPlayer auf DirectX-Basis geschrieben. Das Viedeo wir bei mir in einem
eigenen Fenster ausgegeben nun möchte ich gerne mit klick auf das Fenster in den Vollbildmodus
wechseln bzw. wieder zurück. ABER: ONCLICK wird nicht ausgewertet.
Hat jemand eine Idee woran das liegt?

Hier ein wenig Code:

Delphi-Quellcode:
VW  : IVideoWindow = nil; //DirectShow

procedure TVideoout.vollbild;
var fs:longbool;
begin
  vw.get_FullScreenMode(fs);
  if fs then
       vw.put_FullScreenMode(false)
  else vw.put_FullScreenMode(true);
  end;

procedure TVideoout.FormClick(Sender: TObject);
begin
  Vollbild;
end;
Noch eine Frage in diesem Zusammenhang. Ich würde gerne mit Graphedit meine Graphen
mit Remote-Connect ansehen im Graphedit sehe ich aber meine Application nicht. In der
Hilfe von Graphedit steht Zitat:'The application must register the filter graph
instance in the Running Object Table (ROT).'
Wer kann mir helfen, wo muss die Application registriert werden.
Vielen Dank! :-D

OregonGhost 17. Mär 2004 15:57

Re: Vollbild mit DirectX
 
Woher bekommst du dein IVideoWindow? Möglicherweise liegt da der Hase begraben:
Zitat:

Zitat von Microsoft
Both the Video Renderer Filter and the Filter Graph Manager expose this interface. Applications should use the Filter Graph Manager's version of this interface. The Filter Graph Manager forwards all method calls to the Video Renderer. It also forwards certain window messages, such as WM_DISPLAYCHANGE, that the Video Renderer requires in order to update itself. If you make the video window into a child window, the window no longer receives these messages directly. Thus, it relies on the Filter Graph Manager to forward them.

Du musst also dein IVideoWindow vom Filter Graph Manager bekommen und nicht etwa vom Video Renderer. Wenn du es schon vom Filter Graph Manager bekommst, dann ist das nicht der Fehler ;c)

Probier das Umschalten doch mal in einem Timer. Wenn die Umschaltung dann funktioniert, stehen die Chancen gut, dass das da oben der Fehler ist. Ansonsten wäre es ganz praktisch, wenn du deinen Initialisierungscode zeigen würdest.

Die Antwort auf die zweite Frage lautet meines Wissens wie folgt:
In GraphEdit kannst du nur DirectShow-Filter anschauen. Wenn du es geschafft hast, einen eigenen DirectShow-Filter zu schreiben und zum Laufen zu bekommen, sollte seine Registrierung für dich trivial sein. Du kannst GraphEdit NICHT verwenden, um den Graph innerhalb deiner Anwendung zu begutachten, du kannst ihn nur nachbauen.

[EDIT]
Oh, da habe ich das mit dem RemoteConnect bei dir überlesen. Du hast aber offenbar dafür in der Hilfe von GraphEdit überlesen, dass das DirectX SDK dafür den Artikel "Loading a Graph From an External Process" bereithält, in dem genau dein Problem beschrieben wird.
[/EDIT]

wsks 17. Mär 2004 16:08

Re: Vollbild mit DirectX
 
Hallo nochmal,
habe mich da wohl unglücklich ausgedrückt. Also in den Vollbildmodus kann ich wechseln z.Zt. mit Hotkey auch jederzeit und immer hin und her. ABER: nicht mit der Maus.
ONCLICK wird nicht ausgewertet.
Danke

OregonGhost 17. Mär 2004 16:14

Re: Vollbild mit DirectX
 
Ja, dann gibt es eine realistische Chance, dass dein IVideoWindow dein VideoRenderer ist. Damit dein Fenster Nachrichten auswerten kann (gesetzt den Fall, das VideoWindow ist ein Child), musst du aber den Filter Graph Manager als IVideoWindow nehmen.

Skiron 17. Mär 2004 17:14

Re: Vollbild mit DirectX
 
wenn du directX verwendest:
benutzt du die komponenten?
denn dann wird onClick der Komponente ausgeführt!

wsks 18. Mär 2004 16:03

Re: Vollbild mit DirectX
 
Hallo, Komponenten habe ich bisher nicht genutzt. Die ganze Geschichte findet aus bestimmten Gründen unter win95 und Delphi 5- gibt es da Komponenten?
Der Click das weiss ich nun wird nicht ausgewertet weil natürlich das AKTIV MOVIE WINDOW davor liegt. Kann ich irgendwie von diesem Fenster Botschaften empfangen?
Wer weiss Rat?
DANKE vor allen an die, die sich schon meiner Sache angenommen haben. :-D

OregonGhost 18. Mär 2004 17:02

Re: Vollbild mit DirectX
 
Hörst du mir überhaupt zu? :roll:
Natürlich liegt das Videofenster vor deinem. Deshalb musst du auch unbedingt das IVideoWindow-Interface vom FilterGraphManager verwenden und nicht vom Videorenderer. Das ist mit ziemlicher Sicherheit dein Fehler, denn der FilterGraphManager leitet Nachrichten im Gegensatz zum VideoRenderer weiter. Also zeige doch mal den Code, in dem du die IVideoWindow-Schnittstelle besorgst.

wsks 19. Mär 2004 14:26

Re: Vollbild mit DirectX
 
@Oregon Ghost
Sorry, aber ich war ein wenig Konfus.
Aber ich habe eigentlich alles richtig gemacht aber folgendes vergessen:

Delphi-Quellcode:
vw.put_MessageDrain(videoout.Handle);
und
die Abfrage über

Delphi-Quellcode:
procedure TVideoout.maus_clickL(var Maus_msg: TWMMouse);
begin
   if maus_msg.Msg=WM_LButtonDown then Vollbild;
end;
Für Deine Hinweise möchte ich mich recht herzlich bedanken und wünsche ein schönes Wochenende.
DANKE
wsks


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz