Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Komponente die TMediaplayer beinhaltet (https://www.delphipraxis.net/98783-eigene-komponente-die-tmediaplayer-beinhaltet.html)

Ironarrow 1. Sep 2007 10:51


Eigene Komponente die TMediaplayer beinhaltet
 
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
Delphi-Quellcode:
   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

mkinzler 1. Sep 2007 11:01

Re: Eigene Komponente die TMediaplayer beinhaltet
 
Versuche Sie mal self.parent zuzuordnen.

Bernhard Geyer 1. Sep 2007 13:32

Re: Eigene Komponente die TMediaplayer beinhaltet
 
TJukeBox von TWinControl ableiten oder eine Hilfsfenster als Parent des Mediaplayers erzeugen. Irgendwohin will der Mediaplayer seine ausgaben ja bringen.

Ironarrow 1. Sep 2007 13:49

Re: Eigene Komponente die TMediaplayer beinhaltet
 
Danke für die Infos. Werde es mal ausprobieren.

Sollte es nicht klappen werde ich wohl den Mediaplayer außen vor lassen und es selbst über mciSendCommand machen.

Wegen mir kann hier geschlossen werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz