Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2012, 21:35   #1
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию [DCC Error] Unit1.pas(1286): E2036 Variable required

Выдает такую ошибку [DCC Error] Unit1.pas(1286): E2036 Variable required

на этой строке PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);

а именно где @ChannelEndSync
хотя я создал процедуру ChannelEndSync
у меня Delphi XE2
digital-stream вне форума Ответить с цитированием
Старый 07.07.2012, 21:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вероятно там не нужна @.
прототипа к сожалению не помню чтоб точно сказать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.07.2012, 22:53   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,770
По умолчанию

Нужна там она.

Функция видна в этой области видимости?
p51x вне форума Ответить с цитированием
Старый 07.07.2012, 23:31   #4
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Нужна там она.

Функция видна в этой области видимости?
если честно вопрос не понял. если зажатый кнопкой контрол щелкнут по названию процедуры то делфи переходит на эту функцию. это значит видна ?
digital-stream вне форума Ответить с цитированием
Старый 07.07.2012, 23:53   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

---удалено---

надо весь код смотреть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.07.2012, 12:06   #6
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
---удалено---

надо весь код смотреть.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Channel: DWORD;
  PlaySync: HSYNC;

implementation

{$R *.dfm}

// Процедура которая будет вызвана по окончанию проигривания файла
procedure ChannelEndSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); stdcall;
begin
  // Вот здесь обрабатывайте окончание!
  // Когда Channel доиграет до конца, то будет вызвана эта процедура
  // Например освободим этот поток который проигрался
  // Сперва удалим обработку
  BASS_ChannelRemoveSync(Stream, Handle);
  // Освободим поток
  BASS_StreamFree(Stream);

  // Очистим переменные
  Channel := 0;
  PlaySync := 0;

  // Покажем пользователю что файл проигран до конца...
  ShowMessage('Файл проигран!');
end;

// Просто процедура которая открывает файл и проигривает его
procedure BASS_PlayFile(FileName: PChar);
begin
  if Channel <> 0 then
  begin
    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end else
  begin
    // Если файл уже играет, то отключаем его
    BASS_ChannelRemoveSync(Channel, PlaySync);
    BASS_StreamFree(Channel);

    // Открываем файл...
    Channel := BASS_StreamCreateFile(False, FileName, 0, 0, 0);

    // Начинаем его воспроизведение
    BASS_ChannelPlay(Channel, False);

    // А вот здесь используем флаг BASS_SYNC_END и указываем на нашу процедуру
    // ChannelEndSync котора будет запущена по окончанию проигривания файла
    PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @ChannelEndSync, nil);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  BASS_PlayFile(PChar(OpenDialog1.FileName));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Channel := 0;
  PlaySync := 0;
  BASS_Init(-1, 44100, 0, 0, nil);
  BASS_Start;
end;

end.
digital-stream вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[DCC Error] Unit2.pas(54): E2034 Too many actual parameters pavellyba Общие вопросы Delphi 3 30.03.2011 03:02
[Error] Unit1.pas(179): '(' expected but '[' found divwond Общие вопросы Delphi 8 15.02.2011 19:38
Выдает ошибку [Warning] Unit1.pas(225): FOR-Loop variable Neroaz Общие вопросы Delphi 8 26.03.2010 02:20
Ошибка в делфи DCC Error Unit1.pas(340): E2003 Undeclared identifier: 'Visual' Яр|/||< (^_^) Общие вопросы Delphi 7 19.02.2010 09:11