• Startseite
  •  » Delphi
  •  » Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

#1 05.08.2008 13:57:04

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

Hi an alle Delphi-Devler,

ich habe folgendes Problem: Ich möchte gerne die Komponente TMediaPlayer in einer Unit (zum Sound abspielen etc.) benutzen. Dazu habe ich also jetzt folgenden Code Deklariert:

Code:

var MediaPlayer:TMediaPlayer;
begin
 MediaPlayer:=TMediaPlayer.create(Application);
 MediaPlayer.FileName:='Musik.mp3';
 Mediaplayer.open;
 Mediaplayer.play;
end;

Erste Frage bei TMediaPlayer.create(AOwner: TComponent) gibt es dieses AOwner, was genau ist das warum muss ich das bei der Erstellung angeben?

Zweite Frage: Warum bekomme ich folgenden Fehler(siehe Bild), wenn ich den obigen Code ausführe?

Vielen Dank und Mfg DfoG

Beitrag geändert von DragonFlyOfGold (05.08.2008 13:57:25)


Attachments:
Attachment Icon Fehler.JPG, Größe: 22,136 bytes, Downloads: 486

Offline

 

#2 05.08.2008 14:01:13

Back in Time
ProMember
Registriert: 08.04.2005
Beiträge: 130

Re: Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

TMediaPlayer braucht zwingend ein Fensterhandle...

Warum hast Du kein Fenster? Um Application zu verwenden hast Du doch ohnehin Forms in deiner USES-Klausel...

MP3 abspielen über DirectShow/DirectSound?!?


If we would understand it we wouldn't call it code.

Offline

 

#3 05.08.2008 14:11:31

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

OK und wie bekomme ich jetzt das Fensterhandle mit dem TMediaPlayer zufrieden ist?
Warum ich kein Fenster habe? Ich möchte die Komponente in einer Unit benutzen und diese besitzt nun mal kein Form. Und Application kann man doch immer benutzen, auch außerhalb der Unit von Form1 etc?!

MP3 über DirectShow/DirectSound abspielen würde ich wirklich gerne, aber wie???

Offline

 

#4 05.08.2008 19:52:51

Lotipats
UltraMember
Registriert: 17.05.2005
Beiträge: 395

Re: Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

[quote=DragonFlyOfGold]Erste Frage bei TMediaPlayer.create(AOwner: TComponent) gibt es dieses AOwner, was genau ist das warum muss ich das bei der Erstellung angeben?

Prinzipiell ist für Windows alles nur ein Fenster (nach einem C-Buch, oder war es Assembler?). Buttons etc. sind dann nur "Unterfenster", die ein Teil des Großen ist.
Wenn du Unterfenster hast, ist es sinnlos diese zu behalten, wenn das Hauptfenster zerstört wird, ergo werden alle dem untergeordneten Fenster mit zerstört. Gleiches gilt für das Minimieren von Fenster etc.
Dies macht das AOwner, du sagst damit, dass die Komponente ein Teil dieses Fensters/Überkomponente ist, wird diese "Überkomponenter" AOwner zerstört, werden alle Unterkomponenten mit zerstört.
Du kannst dir ja mal den http://delphi.about.com/od/adptips2005/qt/aowner.htm ansehen.

Dann gibt es auch noch Parent. Im Parent wird die aktuelle Komponente angezeigt. Wird der Parent versteckt, so wird auch die aktuelle Komponente mit versteckt.

Grob gesagt: Owner für die Ressourcen, Parent für die Sichtbarkeit.

PS: Du kannst auch "nil" als AOwner angeben, aber das würde ich dir nicht empfehlen. Wenn du das bei Parent versuchst (oder unverändert lässt/vergisst), so kann es häßliche Fehler geben, ich spreche da aus Erfahrung. wink

[quote=DragonFlyOfGold]Zweite Frage: Warum bekomme ich folgenden Fehler(siehe Bild), wenn ich den obigen Code ausführe?

Hmm, da habe ich eine Vermutung:
Du hast kein Parent angegeben, deshalb kann er beim Ausführen keine Bildänderungen vornehmen.

[quote=DragonFlyOfGold]OK und wie bekomme ich jetzt das Fensterhandle mit dem TMediaPlayer zufrieden ist?

Parent zuweisen?
Bei einem kleinen Test verschwand der Fehler und es kam die nächste Fehlermeldung (Datei fehlt wink ).

[quote=DragonFlyOfGold]Warum ich kein Fenster habe? Ich möchte die Komponente in einer Unit benutzen und diese besitzt nun mal kein Form. Und Application kann man doch immer benutzen, auch außerhalb der Unit von Form1 etc?!

Wenn du ein Formular hast, so könntest du dieses übergeben, als Parameter. Sollte das nicht gehen, tja, dann kann ich dir erstmal nicht helfen.

Application gilt wirklich als Fenster (stammt von TComponent). Nur mal am Rande, Windows heißt nicht umsonst so, alles nur Fenster, wohin man schaut und auch nicht schaut ;P

[quote=DragonFlyOfGold]MP3 über DirectShow/DirectSound abspielen würde ich wirklich gerne, aber wie???

Tja, auch da müssen dir andere Personen helfen, das gehört wohl auch eher unter DirectX.

LOTIPATS

Offline

 

#5 05.08.2008 21:24:09

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Delphi Komponente ohne Form benutzen (speziell TMediaPlayer)

Vielen Dank für den Thread, warum ich jetzt AOwner brauche habe ich verstanden und nach dem ich auch der Eigenschaft Parent einen Wert zugewiesen habe, funktioniert alles soweit erstmal. smile

Jetzt kommt aber zum nächsten Problem: sad

Die TMediaPlayer-Komponente spielt viele MP3 Dateien ohne Probleme ab, aber nicht alle, es gibt also einzelne Dateien die einfach stumm bleiben. Man lädt sie, kein Fehler, spielt sie ab, keine Fehler, aber zu hören nichts... Wie gesagt bei anderen Datei funktionierts tadellos.
Was mich am meisten wundert: Die Dateien kommen aus dem gleichen Album, wurden also mit den gleichen Einstellungen codiert.

An sich würde ich aber gerne bei der TMediaPlayer Kompnente bleiben, da sie schon sehr Komfortable ist und man keine Probleme mit irgendwelchen Lizenzen bekommt (oder?).

Beitrag geändert von DragonFlyOfGold (05.08.2008 21:30:06)

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson