Einzelnen Beitrag anzeigen

Ironarrow

Registriert seit: 23. Mär 2004
Ort: Kerpen
16 Beiträge
 
Delphi 7 Professional
 
#1

Eigene Komponente die TMediaplayer beinhaltet

  Alt 1. Sep 2007, 10:51
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
  Mit Zitat antworten Zitat