Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ZV bei Benutzung von Windows Media Player 9 (https://www.delphipraxis.net/13959-zv-bei-benutzung-von-windows-media-player-9-a.html)

franz 29. Dez 2003 22:20


ZV bei Benutzung von Windows Media Player 9
 
Ich habe folgendes Problem:
Ich habe in mein Programm den Windows Media Player 9 integriert (als ActiveX Element). Wenn der Benutzer diesen verwendet hat und das Programm beendet wird, treten zwei Zugriffsverletzungen auf. Selbst wenn ich den Programmcode für OnCloseQuery und OnClose mit try execpt Blöcken umschließe, erhält der Benutzer beide Fehlermeldungen. Auch wenn ich das Mediaplayer Objekt mit

Delphi-Quellcode:
If Assigned(MSMediaPlayer9) then
prüfe und es, falls erforderlich, neu einrichte, hilft dies nichts.

Wenn der Benutzer den Windows Media Player nicht verwendet, tritt dieses Problem auch nicht auf.

Vielleicht liegt es auch an meinem Betriebssystem. Ich arbeite noch mit Windows 98.

SleepyMaster 29. Dez 2003 23:22

Re: ZV bei Benutzung von Windows Media Player 9
 
Gib mal en bissel wad an Code ;)

franz 29. Dez 2003 23:29

Re: ZV bei Benutzung von Windows Media Player 9
 
Code für OnCloseQuery:

Delphi-Quellcode:
procedure TfrmMainform.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if MediaPlayerUsed then
     FJFMsgDlgA('Windows Media Player hat ein Problem festgestellt!' + #13#13 +
                'Überspielen Sie die neueste Aktualisierung aus dem ' +
                'Internet, um dieses Problem zu beheben!',
                'Windows Media Player 9-Reihe',
                mbfInfOK);
  CanClose := true;
end;
Code für OnFormClose:
Delphi-Quellcode:
procedure TfrmMainform.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  try
    // DropTarget freigeben
    DropFileTarget1.Unregister;

    // Hilfe schließen, wenn Sie noch angezeigt wird
    Application.HelpCommand(HELP_QUIT,0);

    // Temporäre Dateien löschen
    if FileExists(LMDSysInfo1.WinPath + '\Temp\DiskManSQL.txt') then
       begin
         FileSetAttr(LMDSysInfo1.WinPath + '\Temp\DiskManSQL.txt',0000);
         DeleteFile(LMDSysInfo1.WinPath + '\Temp\DiskManSQL.txt');
       end;

    // Veränderungen am Hauptfenster speichern
    SaveDisplay;
  except
    // nichts tun
  end;
end;

franz 30. Dez 2003 23:30

Re: ZV bei Benutzung von Windows Media Player 9
 
:oops: Nachtrag:

Der abgebildete Code enthält nur noch die Teile, die vor Verwendung des Windows Media Players 9, bereits vorhanden waren. Der Assigned Teil ist nicht mehr vorhanden. Was nichts hilft muss auch nicht unbedingt drinstehen.

Nach nochmaliger sehr genauer Fehlersuche (2 Stunden), bin ich zum Entschluss gekommen, dass der Fehler weder im OnCloseQuery noch im OnFormClose Teil auftritt. Er muss also später eintreten.

Vielleicht hat jemand eine Idee.

franz 2. Jan 2004 23:24

Re: ZV bei Benutzung von Windows Media Player 9
 
Habe folgendes geschrieben:

Delphi-Quellcode:
procedure TfrmMainform.FormDestroy(Sender: TObject);
begin
  try
    TimerUpdate.Enabled := false;
    TimerTotalSize.Enabled := false;
    inherited;
  except
    // nichts tun
  end;
end;
Dadurch tritt nur noch eine Zugriffsverletzung auf. Sicherheitshalber habe ich die 2 Timer noch einmal deaktiviert, obwohl diese beim Beenden des Programms nicht mehr aktiv sein sollten.

franz 9. Jan 2004 08:00

Re: ZV bei Benutzung von Windows Media Player 9
 
Eine weniger gute Lösung!

Ich habe jetzt den Code für FormDestroy wieder gelöscht und eine Prozedur für MSMedisPlayer9.OnError geschrieben:

Delphi-Quellcode:
try
  inherited;
except
  // nichts tun
end;
Jetzt treten zwar wieder 2 Zugriffsverletzungen auf. Allerdings werden diese dem Benutzer nicht mehr angezeigt.

luwo 12. Jan 2004 15:11

Re: ZV bei Benutzung von Windows Media Player 9
 
Hallo Franz,

ich hatte auch schon öfter Probleme bei Benutzung vom MediaPlayer(ocx).
Fehlerfreier wurde es erst mit Benutzung des COM-Objekts bei "später Bindung".
Also erst zur Laufzeit COM-Klasse instanziieren und bei Beendigung des
Programms wieder vernichten.

Vielleicht hilft´s ja :)

luwo


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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 by Thomas Breitkreuz