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

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

mciSendCommand что неправильно?


Max_one ©   (2003-10-13 17:27:00) 

Имеется вот такой участок кода
var
Form1: TForm1;
lpOpen:MCI_WAVE_OPEN_PARMS;
dwFlags:Dword;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
AllocMem(SizeOf(lpOpen));
lpOpen.dwCallback := 0;
lpOpen.wDeviceID := 0;
lpOpen.lpstrDeviceType := "waveaudio" ;
lpOpen.lpstrElementName := "C:\1.wav";
lpOpen.lpstrAlias :=nil;
lpOpen.dwBufferSeconds:=256;

dwFlags:= MCI_OPEN_TYPE or MCI_OPEN_ELEMENT or MCI_WAIT or MCI_WAVE_OPEN_BUFFER ;
mciSendCommand(0,MCI_OPEN, dwFlags ,@@lpOpen);

end;
всё это удовольствие выдаёт ошибку :"Variable required"
Может я структуру параметров неправильно задаю?
Тогда как в delphi определять эту структуру?
У меня примеры использования этой функции только на Visual C, там всё работает а тут нет...


Max_one   (2003-10-16 21:51:00) [1]

Ладно разобрался сам, так что если у кто столкнулся с такоё же проблемой, ошибка была в размере буффера, почему-то нельзя задавать его более 10 секунд. А mciGetErrorString()так и не возвратила текстовое описание ошибки, поэтому пришлось открыть модуль и просто смотреть по коду возвращаемого значения от SendCommand.


Max_one   (2003-10-14 14:44:00) [2]

Спрашиваю таким образом

dwError:Dword;
………...
dwError:=mciSendCommand(lpOpen.wDeviceID,MCI_PLAY, MCI_WAIT ,cardinal(@lpPlay));
if mciGetErrorString(dwError,Buff_1,128)=True
then Edit1.Text:=string(Buff_1)
else Edit1.Text:="oblom";
и получаю постоянно облом... код ошибки не распознаётся?


clickmaker   (2003-10-14 13:32:00) [3]

Спроси mciGetErrorString(mciSendCommand


Max_one   (2003-10-14 13:27:00) [4]

Рано радовался, ошибку-то перестало выдавать, а играть не играет...
теперь это выглядит вот так:var
Form1: TForm1;
lpOpen:MCI_WAVE_OPEN_PARMS;
lpPlay:MCI_PLAY_PARMS;
lpSet:MCI_SET_PARMS;
dwFlags:Dword;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

lpOpen.wDeviceID := 0;
lpOpen.lpstrDeviceType := "waveaudio" ;
lpOpen.lpstrElementName := "C:\1.wav";
lpOpen.lpstrAlias :=nil;
lpOpen.dwBufferSeconds:=256;

lpPlay.dwFrom:=0;
lpPlay.dwTo:=300;

lpSet.dwTimeFormat:=MCI_FORMAT_MILLISECONDS;
lpSet.dwAudio:=2;

dwFlags:= MCI_OPEN_TYPE or MCI_OPEN_ELEMENT or MCI_WAVE_OPEN_BUFFER ;
mciSendCommand(0,MCI_OPEN, dwFlags ,cardinal(@lpOpen));
mciSendCommand(lpOpen.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,cardinal(@lpSet));
mciSendCommand(lpOpen.wDeviceID,MCI_PLAY, MCI_WAIT ,cardinal(@lpPlay));

end;

помоему dwFrom и dwTo в данномслучае нет необходимости...
но всё равно не играет...

> видать все взорвалось =)))))))))

Потушить успели...


Е-Моё имя   (2003-10-13 18:48:00) [5]


> [5] Max_one © (13.10.03 18:40)
> Thanks зделал cardinal(@plOpen) зарабо

видать все взорвалось =)))))))))


Max_one   (2003-10-13 18:40:00) [6]

Thanks зделал cardinal(@plOpen) зарабо


Е-Моё имя   (2003-10-13 18:22:00) [7]


> а зачем 2 собаки @@lpOpen? Одной бы хватило

евреи, не жалейте заварки! =)


Е-Моё имя   (2003-10-13 18:22:00) [8]


> [2] Max_one © (13.10.03 18:19)

a:cardinal
b:pointer

b:=pointer(a);


Max_one   (2003-10-13 18:19:00) [9]

тогда он выдаёт ошибку
[Error] Unit13.pas(42): Incompatible types: "Cardinal" and "Pointer"
Понятно почему Cardinal она указана в описании функции, а причём тут Pointer?


clickmaker   (2003-10-13 18:08:00) [10]

а зачем 2 собаки @@lpOpen? Одной бы хватило


Наверх

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