![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проигрывание 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 ..
либо задействуй этот готовыйкомпонент либо посмотри в его исходниках как это правильно делается