TMediaPlayer in DLL auslagern
-
Hallo Leute,
ich wollte in einer Funktion eine Instanz von TMediaplayer erzeugen, was leider nicht so ganz funktioniert. Wenn ich den folgenden Code ausführe, bekomme ich immer die Fehlermeldung "Element hat kein übergeordnetes Fenster"
TMediaPlayer *media = new TMediaPlayer(Application); if(media != NULL) { media->FileName = "C:\\temp\\test.wav"; media->DeviceType = dtAutoSelect; media->Open(); media->Play(); delete media; }
Im voraus besten Dank ... Mit der Suchfunktion habe ich zwar einiges gefunden, aber leider keine Hilfe für mein Problem!
Gruß Skay
-
Skay schrieb:
"Element hat kein übergeordnetes Fenster"
Nicht klar? Du musst media->Parent ein TWinControl-Objekt zuordnen. Da du das Ganze aber in einer DLL hast (in der du sicher keine Form definiert hast???), hast du 2 Möglichkeiten. Entweder du erstellst in deinem Prozess ein Global-Memory-Objekt (z.B. ein FileMapping-Objekt), in das du den Inhalt eines TWinControl (z.B. einer Form) schreibst. Darauf kannst du dann in der DLL zugreifen. Ist aber etwas kompliziert. Etwas darüber lesen kannst du in der FAQ unter "MouseHook". Eine andere Variante erschließt du dir, indem du in der DLL einfach eine Dummy-TForm erstellst:
TForm* form = new TForm((TComponent*)NULL);
Diese kannst du dann dem MediaPlayer als Parent mitgeben.
-
Hallo WebFritzi,
ich habe es jetzt anders gelöst. Und zwar habe ich im Konstruktor anstatt "Application" das Handle meines Hauptformulars übergeben.
Gruß Skay