Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проигрывание MIDI файлов средствами mci [D7, WinXP]


AlexFV ©   (2005-12-01 17:02:00) 

Приветствую Вас друзья-делфисты. Не подскажите мне?
Есть Форма для проигрывания midi файла средствами mci. На ней 4 кнопки и editbox. Кнопки: Выбор файла, Воспроизведение, Пауза, Стоп.

Вот полный код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, mmsystem;

type
 TForm1 = class(TForm)
   btnPlay: TButton;
   btnStop: TButton;
   btnPause: TButton;
   btnOpenFile: TButton;
   edtFileName: TEdit;
   OpenDialog1: TOpenDialog;
   procedure btnPlayClick(Sender: TObject);
   procedure btnPauseClick(Sender: TObject);
   procedure btnStopClick(Sender: TObject);
   procedure btnOpenFileClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

const
 DeviceName='WaveAudio';
var
 Form1: TForm1;
 FileName:String;
 lPause:Boolean;

implementation

{$R *.dfm}

procedure SendMCICommand(Cmd: string);
 var RetVal: Integer;
     ErrMsg: array[0..254] of char;
begin
 RetVal := mciSendString(PChar(Cmd), nil, 0, 0);
 if RetVal <> 0 then
   begin
     mciGetErrorString(RetVal, ErrMsg, 255);
     MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0);
   end;
end;

procedure TForm1.btnPlayClick(Sender: TObject);
begin
 btnPause.Visible := True;
 btnPlay.Visible := False;

 if lPause=False then begin
   SendMCICommand('Open '+DeviceName);
   SendMCICommand('Play '+FileName);
   end
 else
    SendMCICommand('Resume '+DeviceName);
 SendMCICommand('Close '+DeviceName);
end;

procedure TForm1.btnPauseClick(Sender: TObject);
begin
 btnPause.Visible := False;
 btnPlay.Visible := True;
 lPause := True;
 SendMCICommand('Pause '+FileName);
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
 btnPause.Visible := False;
 btnPlay.Visible := True;

 SendMCICommand('Stop '+FileName);

end;

procedure TForm1.btnOpenFileClick(Sender: TObject);
begin
 btnPlay.Enabled := False;
 btnStop.Enabled := False;
  if OpenDialog1.Execute then begin
    FileName := OpenDialog1.FileName;
    edtFileName.Text := ExtractFileName(FileName);
    btnPlay.Enabled := True;
    btnStop.Enabled := True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    lPause := False;
end;

end.


Проблема в том, что ни как не пойму как реализовать воспроизведение после нажатия паузы, т.е. чтоб файл играл не с начала, а с того фрагмента как была нажата пауза.
Ошибка возникае на строке:
SendMCICommand('Resume '+DeviceName);

"Используемое устройство mci не поддерживает указанную команду"
Не подскажите как изменить код?


Digitman   (2005-12-02 08:37:00) [1]

а в чем прелесть изобретения очередного велосипеда ?

стандартный компонент TMediaPlayer как раз и использует mci ..

либо задействуй этот готовыйкомпонент либо посмотри в его исходниках как это правильно делается


Наверх

Титульная страница Поиск, карта сайта Написать письмо