Zitat von
Nils_13:
1. Das MUSS in OnDestroy trotzdem stehen, da ich sonst eine
AV beim Beenden des Programms bekomme.
2. Wo soll dann der Freigabecode in Doppelklick hin ?
Wenn ich noch
Delphi-Quellcode:
with frmVideo do
begin
if Filtergraph.Active then
begin
FilterGraph.ClearGraph;
FilterGraph.Free;
VideoWindow.Free;
end;
end;
vor den Abspielcode setze, wird eine
AV bei der markierten Zeile hervorgerufen:
Delphi-Quellcode:
frmVideo.Show;
with frmVideo do
begin
if not FilterGraph.Active then
begin
--> if not FilterGraph.Active then <--
FilterGraph.Active := true;
FilterGraph.Stop;
FilterGraph.ClearGraph;
FilterGraph.RenderFile(fFiles[playindex].pfad);
FilterGraph.play;
pause := True;
end;
end;
Nee hast mich falsch verstanden!
Ein
AV bekommst du deshalb weil du den FilterGraph neu initialisierst und er noch nicht freigegeben ist
Bei jeden Film wird eine neue Instanz von FilterGraph gebildet was bedeutet
wird diese nicht vorher beendet bekommst du einen
AV.
Du kannst if not FilterGraph.Active nicht aufrufen wenn du einen doppelklick auf die Liste machst
FilterGraph dürfte dann schon nicht mehr existieren.
Mache doch eine Public oder Globale Variable welche dir ermöglicht
den status unabhängig von FilterGraph zu überprüfen.
Beispiel:
ISVIdeoPlaying : Boolean;
Das einfügen nachdem ein Video spielt logischer weise auf True setzen
Wenn du nun auf die Liste klickst dieses Variable abfragen
Wenn True dann FilterGraph beenden, neu initialisieren und fertig.
PS: Am besten nicht im Doppelklick event sondern im Mouseup Event
Die Liste darf nicht mehr den Focus habe wenn du FilterGraph neu initialisierst.
Und noch was FilterGraph.Free; muss immer ausgeführt werden bevor du ein
neues Video abspielst.
VideoWindow.Free; nicht unbedingt .. wenn du es mit einer PIcBox(Canvas) verbunden hast.
Aber auf jedenfall wenn du dein Projekt beendest.
Gruß