TMediaPlayer - Ungültiges Fensterhandle



  • Sobald ich eine Datei öffnen lassen möchte, sagt mir der TMediaPlayer "Ungültiges Fensterhandle".
    Wenn ich ErrorMessage Auslesen lasse kommt heraus:
    "Ungültige MCI-Gerätekennung. Benutzen Sie die zurückgegebene ID, wenn sie das MCI-Gerät öffnen."

    Hier noch ein paar Infos:
    1. die Zeiger auf TMediaPlayer ist in einer Klasse von mir deklariert, nicht in einer Form(klasse), hat daher auch keine Oberfläche
    2. Code:

    void SimplePlayer::OpenFromPlaylist(int Index)
    {
    	try
    	{
    		ShowMessage ( Playlist->Strings[Index]);
    		//Player->
    		Player->FileName = Playlist->Strings[Index];
    	    Player->Open();
    	}
    	catch(...)
    	{
            ShowMessage(Player->ErrorMessage);  // Hier ausgabe der 2. Fehlermeldung
        }
    }
    
    class SimplePlayer
    {
    	private:
    		TStringList* Playlist;
    		bool plays;
    		unsigned int Position;
    		TMediaPlayer* Player;
    		int ID;
    	public:
    		inline void Initialise()
    		{
    			Player = new TMediaPlayer(this);
    			Player->TimeFormat = tfMilliseconds;
    			Player->DeviceType = dtAutoSelect;
    			Playlist = new TStringList;
    			plays = false;
    			Position = 0;
    		}
    		void AddtoPlaylist(String FileName);
    		void OpenFromPlaylist(int Index);
    		void Play();
    		void Pause();
    		void Stop();
    		void SetPosition(unsigned int Posi);
    		void SetDisplayRect(TRect rect);
    		void VideoPanel(TPanel* Panel);
    		TStringList* GetPlaylist();
    };
    

    Ich hoffe ich bin demnächts nicht mehr so ratlos 😉



  • Player = new TMediaPlayer(this);

    Als Owner des MediaPlayers solltest du eine Form-Klasse angeben (SimplePlayer ist ja keine). Du könntest auch versuchen einfach den Standardkonstruktor zu verwenden:

    Player = new TMediaPlayer();
    

    Oder eben den Owner als Parameter zu übergeben...



  • inline void Initialise(TForm* Parent)
    {
    	Player = new TMediaPlayer(Parent);
    	Player->TimeFormat = tfMilliseconds;
    	Player->DeviceType = dtAutoSelect;
    	Playlist = new TStringList;
    	plays = false;
    	Position = 0;
    }
    

    oder:

    inline void Initialise(TForm* Parent)
    {
    	Player = new TMediaPlayer(Parent->Owner);
    	Player->TimeFormat = tfMilliseconds;
    	Player->DeviceType = dtAutoSelect;
    	Playlist = new TStringList;
    	plays = false;
    	Position = 0;
    }
    

    hat die Folge das: "Element hat kein übergeordnetes Fenster" ausgegeben wird.
    Kann es sein, dass das nichts wird ? - Ich TMediaPlayer auf einer Form haben MUSS?



  • Du solltest zusätzlich auch noch den Parent setzen:

    Player->Parent = Parent;
    

Anmelden zum Antworten