Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MediaPlayer wieder Freigeben (https://www.delphipraxis.net/87055-mediaplayer-wieder-freigeben.html)

Flom 22. Feb 2007 17:13


MediaPlayer wieder Freigeben
 
Hallo,
Wie kann ich den MediaPlayer für Dateien wenn er nicht gebraucht wird wieder Freigeben?
Folgendes Problem beim ändern der ID3v1 / v2 Einträge kann ich jedoch nicht wieder die Änderungen neu Speichern.
Ich benutze folgendes:
Delphi-Quellcode:
      MediaPlayer1.FileName := playdir + playfile;
      MediaPlayer1.Open;
      MediaPlayer1.Stop;
      MediaPlayer1.EnabledButtons:=[btPlay, btPause, btStop];
Ich denke das es am Media Player liegen sollte.

Gausi 22. Feb 2007 17:57

Re: MediaPlayer wieder Freigeben
 
Schon mal Close probiert?

Und bei nem kurzen Blick in die Delphi-Hilfe bin ich auf die Eigenschaft Shareable gestoßen, die standardmäßig false ist. Evtl. kann man ja schreibend auf die Datei zugreifen, wenn man das auf True setzt...

Flom 22. Feb 2007 17:59

Re: MediaPlayer wieder Freigeben
 
bei Close kommt eine meldung von wegen kein PCI Midi Gerät ausgewählt

Gausi 22. Feb 2007 18:03

Re: MediaPlayer wieder Freigeben
 
Open öffnet ein Gerät, Close schließt es wieder. Abspielen geht dann natürlich nicht mehr. Daher mein Hinweis auf Shareable, bei dem ich aber nicht weiß, ob das was bringt, weil ich mit dem TMediaplayer keine Erfahrung habe.

Flom 22. Feb 2007 18:34

Re: MediaPlayer wieder Freigeben
 
okay ich hab mir jetzt gedacht ich schmeiße das Close auf den Button "Eintrag Ändern" rein, jedoch speichert er immer noch nicht die Dateien und ich weiß nicht wieso!

Sunlight7 23. Feb 2007 04:41

Re: MediaPlayer wieder Freigeben
 
Moin!

Eine Möglichkeit:
Delphi-Quellcode:
If MediaPlayer1.FileName<>'' then begin
   MediaPlayer1.Close;
   MediaPlayer1.FileName:='';
end;
Alternativ kannst Du Delphi-Referenz durchsuchenTMediaPlayer.Mode verwenden und prüfen, ob der MP geöffnet ist und ihn nur dann schließen.

Delphi-Quellcode:
Case Medialayer1.Mode of
   mpNotReady,
   mpStopped,
   mpPlaying,
   mpRecording,
   mpSeeking,
   mpPaused,
   mpOpen: Medialayer1.Close;
   else ShowMessage('Der MP hatte nix geöffnet.');
end;
@Gausi: Delphi-Referenz durchsuchenShareable ist dazu da, das ein MCI-Gerät (zb CD), von mehreren Instanzen benutzt werden kann.

Grüßle!

Gausi 23. Feb 2007 09:13

Re: MediaPlayer wieder Freigeben
 
Hmm. Dann ist das mit dem Shareable wohl ne Sackgasse. Ich kenn ja seinen Code, weil er mich mal per ICQ angesprochen hat. Sein Problem ist ja eigentlich "nur", dass das Schreiben des ID3-Tags schiefläuft. Knackpunkt ist diese Zeile aus meiner ID3-Unit:
Delphi-Quellcode:
Stream := TFileStream.Create(Filename, fmOpenReadWrite or fmShareDenyWrite);
die fehlschlägt, wenn die Datei vom Mediaplayer benutzt wird. Ich hatte mal den Mediaplayer-Kram auskommentiert, und dann lief das durch. Meine Idee war, dass der Mediaplayer durch das Open generell einen Schreibzugriff auf die Datei unterbindet und die Property Shareable sah da ganz gut aus. Näher hab ich mich damit nicht beschäftigt.

Flom 23. Feb 2007 10:25

Re: MediaPlayer wieder Freigeben
 
also am MediaPlayer kann es nicht liegen Gausi mit dem Tipp von Sunlight7 geht's auch nicht! ich werde es jetzt mal als einzel Projekt nachbauen und gucken ob der Fehler auch auftritt wenn ja dann muss ein Logik Fehler da sein bei mir.

Melde mich über Edit ^^

Edit: Scheint ein prinzipielles Denk problem meiner Seite zu seien! Ich hab dir mal meine Unit per E-Mail geschickt

Gausi 23. Feb 2007 11:20

Re: MediaPlayer wieder Freigeben
 
Ich glaube, ich klinke mich jetzt an dieser Stelle aus. ;-) Ich halte es für unsinnig, sowohl per ICQ und Mail, als auch hier im Forum zu diskutieren. Ich denke, das Forum sollte die primäre Anlaufstelle sein.

Habe dein Projekt per Mail bekommen, compiliert und ID3-Tags erfolgreich geändert. Das einzige unsinnige, was mir noch aufgefallen ist, ist das:
Delphi-Quellcode:
if Id3v1Tag.TagExists = CheckBox1.Checked then
Wenn man Felder für den ID3v2 oder v1 Tag ausfüllt und speichern klickt, dann erwarte ich als User, dass das auch gespeichert wird.
Hinweis: Die WriteToFile-Routinen überprüfen natürlich vorher, ob in der Datei bereits ein Tag vorhanden ist. Wenn ja, wird der alte überschrieben, wenn nein wird einer erstellt.

Und zum Mediaplayer. Fakt ist doch: Wenn du das Mediaplayer-Gedöns aus dem anderen Projekt auskommentierst, dann werden die Tags geändert - hab ich grad nochmal ausprobiert. Wie du jetzt auf die Idee kommst, dass dein Problem nicht am Mediaplayer liegt, ist mir schleierhaft.

Flom 23. Feb 2007 11:27

Re: MediaPlayer wieder Freigeben
 
so gausi klar ist die zeile quatsch ^^

Nur ich habe gerade raus gefunden durch rum fummeln das er die ID3V1 Einträge Speichert! Nur nicht die ID3v2 Einträge... nur warum?
Folgendes Benutze ich zum Speichern:
Delphi-Quellcode:
procedure TForm4.Button3Click(Sender: TObject);
begin

if Id3v1Tag.Tagexists = True then
begin
  Id3v1Tag.Title  := Edit_Titel.Text;
  Id3v1Tag.Artist := Edit_Artist.Text;
  Id3v1Tag.Album  := Edit_Album.Text;
  //Id3v1Tag.Comment := Edit_Comment.Text;
  Id3v1Tag.Genre  := Edit_Genre.Text;
  Id3v1Tag.Track  := Edit_ID.Text;
  Id3v1Tag.Year   := Edit_Jahr.Text;
  // Tag in die Datei schreiben
  id3v1Tag.WriteToFile(Edit1.Text);
end;
///////////////////////////////////////////
if Id3v2Tag.exists = True then
begin
  Id3v2Tag.Title  := Edit2_Titel.Text;
  Id3v2Tag.Artist := Edit2_Artist.Text;
  Id3v2Tag.Album  := Edit2_Album.Text;
  //Id3v2Tag.Comment := Edit2_Comment.Text;
  Id3v2Tag.Genre  := Edit2_Genre.Text;
  Id3v2Tag.Track  := Edit2_ID.Text;
  Id3v2Tag.Year   := Edit2_Jahr.Text;
  // Weitere Textframes setzen
  ID3v2Tag.Copyright       := Edit2_Copyright.Text;
  ID3v2Tag.OriginalArtist  := Edit2_OriginalArtist.Text;

  id3v2Tag.WriteToFile(Edit1.Text);
end;
close;
end;
zwecks media player: ich habs so gemacht das wenn jetzt auf Eintrag ändern geklickt wird automatisch der MP geschloßen wird also kanns so gesehen nicht mehr an ihm liegen.

Edit: bins WE über nicht da :/


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.
Seite 1 von 2  1 2      

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