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