Einzelnen Beitrag anzeigen

Drahcir

Registriert seit: 13. Jun 2012
34 Beiträge
 
Delphi 6 Personal
 
#1

Kein Sound vom TMediaPlayer

  Alt 26. Jul 2012, 16:21
Ja ich weiß die frage nach dem Media-Player zum Abspielen von .wav-Dateien gab es schon hunderte male, aber da mein Programm nicht funktioniert, obwohl ich es nach diversen Tutorials nachgemacht und verglichen habe, möchte ich hier mal fragen ob wer den fehler findet.

Das Programm ist eigentlich eine normale Eieruhr, die stündlich nen Sound (Plinfa.wav) ausgeben soll. Dazu ne nette Animation, nen Bild (Image2) das sich auf und ab bewegt, dazu der Hintergrund (Image1). Ausserdem soll das ganze in die systemTray (wenn man das so nennt) minimierbar sein.

Das Programm funktioniert einwandfrei (Timer, Animation, minimieren und wiederherstellen) aber der MediaPlayer macht mir Probleme. Die .wav-Datei liegt im Ordner wo das Programm ist und wird (anscheinend) ordnungsgemäß geladen, nur das wenn ich dann erst auf den button und dann im MediaPlayer auf "Play" drücke passiert nichts, ich höre zumindest keinen Sound. Weiß wer warum?

Delphi-Quellcode:
unit mPinguTimer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls, ShellAPI, Menus, mmSystem, Buttons,
  MPlayer, ShlObj;

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    Image2: TImage;
    Image1: TImage;
    btReset: TButton;
    Timer2: TTimer;
    SpeedButton1: TSpeedButton;
    Label2: TLabel;
    SpeedButton2: TSpeedButton;
    Button1: TButton;
    MediaPlayer1: TMediaPlayer;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure btResetClick(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    h, Minuten, Sekunden : Integer;
    t : Real;
    Lautlos : Boolean;
    TaskBarNewReg : DWORD;
    IconData: TNotifyIconData;
  public
    procedure WndProc(var Msg: TMessage); override;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  frmMain: TfrmMain;

implementation {$R *.dfm}

procedure TfrmMain.WndProc(var Msg: TMessage);
var Point: TPoint;
begin
  // WM_USER + 20 ist unsere TNA Icon Nachricht
  if Msg.Msg = WM_USER + 20 then
  begin
    // im lParam steht die Nachricht
    case Msg.lParam of
      // linke Taste
      WM_RBUTTONDOWN:
        begin
           MessageDLG('Restzeit: ' + Formatfloat('00', Minuten) + ':'
                    + Formatfloat('00', Sekunden), mtInformation, [mbOk], 0);
        end;
      // Doppelklick
      WM_LBUTTONDBLCLK:
        begin
          // Fenster anzeigen
          frmMain.Show;
          // Icon entfernen
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end
  // Taskbar wurde im System registriert, Icon einfügen
  else if Msg.Msg = TaskBarNewReg then
  begin
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end;
  inherited;
end;


procedure TfrmMain.WMSysCommand(var Message: TWMSysCommand);
begin
  // Fenster wurde minimiert
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // Icon in der TNA anzeigen
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end
  else
    inherited;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;

//*****************************************************************************

procedure TfrmMain.Timer1Timer(Sender: TObject);
var Faktor : Integer;
begin
  Faktor := 10;

  if t >= (Faktor*2) then t := 0;

  t := t + 0.5;
  h := round( -( (t-Faktor)*(t-Faktor) ) + Faktor*Faktor);

  Image2.Top := 150 - h;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  frmMain.DoubleBuffered := True;

  //*******************************
  // Message ID für Message merken, die gesendet wird, wenn die Taskbar im
  // System registriert wird.
  TaskBarNewReg := RegisterWindowMessage('TaskbarCreated');
  // IconData Struktur füllen
  IconData.cbSize := SizeOf(IconData);
  IconData.Wnd := Handle;
  IconData.uID := 100;
  IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
  IconData.uCallBackMessage := WM_USER + 20;
  IconData.hIcon := Application.Icon.Handle;
  IconData.szTip := 'Pingu-Timer';
  // Icon einfügen. Bei Bedarf sofort
  //Shell_NotifyIcon(NIM_ADD, @IconData);
end;

procedure TfrmMain.Image2Click(Sender: TObject);
begin
  t := 0;
  Minuten := 60; Sekunden := 00;
  Timer2.Enabled := true;
  Timer1.Enabled := true;
  Image2.Enabled := false;
  btReset.Enabled := true;
end;

procedure TfrmMain.btResetClick(Sender: TObject);
begin
  btReset.Enabled := false;
  Label1.Caption := 'Klick auf den Pingu zum Starten';
  Image2.Enabled := true;
  Timer1.Enabled := false;
  Timer2.Enabled := false;
  Image2.Top := 150;
end;

procedure TfrmMain.Timer2Timer(Sender: TObject);
begin
  if Sekunden <> 0
  then Sekunden := Sekunden - 1
  else begin

    if Minuten <> 0
    then begin
      Minuten := Minuten - 1;
      Sekunden := 59;
    end
    else begin
      Minuten := 59; Sekunden := 59;
      if Lautlos = false then MessageBeep(MB_ICONEXCLAMATION);
    end;
  end;

  Label1.Caption := 'Verbleibende Zeit: ' + Formatfloat('00', Minuten) + ':' + Formatfloat('00', Sekunden);
end;

procedure TfrmMain.SpeedButton1Click(Sender: TObject);
begin
  if Lautlos = true
  then begin
    Lautlos := false;
    SpeedButton1.Caption := 'Ton ist an'
  end
  else begin
    Lautlos := true;
    SpeedButton1.Caption := 'Ton ist aus'
  end;
end;

procedure TfrmMain.SpeedButton2Click(Sender: TObject);
begin
  Messagedlg('Musik: Pokémon Plinfa'#13'Bilder sind dem Spiel NosTale.de entnommen', mtInformation, [mbOk], 0);
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  MediaPlayer1.Close;
  mediaplayer1.Open;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  mediaplayer1.Close;
end;

end.
Ja ich weiß, es ist wie immer durcheinander und hat sicher noch hunderte Fehler ...
Der ObjektInspektor zur MediaPlayer findet ihr HIER
Es gibt nur 10 Arten von Menschen - die die Binärzahlen lesen können und den Rest
  Mit Zitat antworten Zitat