Hallo zusammen,
ich habe ein Problem. Ich will mir eine eigene nichtsichtbare Komponente erstellen.
Delphi-Quellcode:
unit Jukebox;
interface
uses
SysUtils, Classes, MPlayer;
type
TJukebox =
class(TComponent)
private
{ Private-Deklarationen }
FMediaPlayer : TMediaPlayer;
FFilename :
String;
FVolume : byte;
procedure SetVolume ( iValue : integer );
function GetVolume : integer;
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
Constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
procedure Play;
procedure Stop;
published
{ Published-Deklarationen }
property Filename :
String read FFilename
write FFilename;
property Volume : integer
read GetVolume
write SetVolume;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Beispiele', [TJukebox]);
end;
constructor TJukebox.Create (AOwner: TComponent);
begin
inherited;
FMediaPlayer := TMediaplayer.Create(self);
end;
destructor TJukebox.Destroy;
begin
fMediaPlayer.Destroy;
inherited Destroy;
end;
procedure TJukebox.SetVolume(iValue : integer);
begin
if iValue < 0
then { Lautstärke kleiner 0 }
iValue := 0
{ Lautstärke auf 0 korrigieren }
else if iValue > 100
then { Lautstärke größer 100 }
iValue := 100;
{ Lautstärke auf 100 korrigieren }
FVolume := iValue;
{ Lautstärke abspeichern }
end;
function TJukebox.GetVolume : integer;
begin
Result := FVolume;
end;
procedure TJukebox.Play;
begin
FMediaPlayer.FileName := FFileName;
FMediaPlayer.Open;
FMediaPlayer.Play;
end;
procedure TJukebox.Stop;
begin
FMediaPlayer.Stop;
FMediaPlayer.Close;
end;
end.
Füge ich diese Komponente nun in ein Formular ein, weise Filename einen Dateinamen zu und rufe die Procedure Play auf erhalte ich folgende Fehlermeldung:
Zitat:
Im Projekt Project1.exe ist eine
Exception der Klasse EIvalidOperation aufgetreten. Meldung: 'Element '' hat kein übergeordnetes Fenster'. Prozess wurde angehalten. Mit Einzelanweisung oder Start fortsetzen.
Die Komponente soll später nur WAVs und MP3s abspielen und bei MP3-Dateien noch die Tags auslesen (ist aber noch nicht im Code oben enthalten). Der Fehler liegt meiner Meinung nach im Constructor beim Create des Mediaplayers. Füge ich nach
Delphi-Quellcode:
inherited;
FMediaPlayer := TMediaplayer.Create(self);
noch ein
FMediaPlayer.Parent := Self;
ein, so bekomme ich beim Compilieren die Fehlermeldung:
Inkompatible Typen: 'TWinControl' und 'TJukeBox'
Hat jemand eine Idee wie man es schafft eine TMediaplayer-Komponente in eine Nicht-Sichtbare Komponente einbinden kann ??
Gruß,
Rainer