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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2011, 21:38   #1
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию Bass.dll WM_USER + 101

В демке самого bass.dll есть проект, который проигрывает поток радио-интернета. Там объявляется константа:
Код:
const
  WM_INFO_UPDATE = WM_USER + 101;
которой потом присваивается значения. Далее считываются эти значения и, в зависимости от них, выводится результат:
Код:
procedure TForm1.WndProc(var Msg: TMessage);
// to be threadsave we are passing all Canvas Stuff(e.g. Labels) to this messages
begin
  inherited;
  if Msg.Msg = WM_INFO_UPDATE then
    case msg.WParam of
      0:
        begin
          Label4.Caption := 'connecting...';
          Label3.Caption := '';
          Label5.Caption := '';
        end;
      1:
        begin
          Label4.Caption := 'not playing';...............
Моя проблема заключается в том, что у меня Msg.Msg не равен WM_INFO_UPDATE. Хотя все процедуры и функции скопировал под чистую, но уже в существовавший ранее проект.
Посему вопрос: что означает присвоение константе значений (при ее объявлении) WM_USER + 101. Откуда, в частности, берется цифра 101.
Помогите кто, чем может, пожалуйста.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 01.04.2011, 04:06   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> которой потом присваивается значения

только присваиваются не константе, а параметру wParam у события.

> Msg.Msg не равен WM_INFO_UPDATE

так это общий обработчик всех событий, которые ловит окно. Их там тысячи приходит. А WM_INFO_UPDATE вы посылаете сами себе. Вот типичный код из демки:

Код:
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  if (buffer <> nil) and (len = 0) then
    SendMessage(win, WM_INFO_UPDATE, 8, DWORD(PAnsiChar(buffer)));
end;
(обычный подход, чтобы из дополнительного потока передать данные в главный поток (т.к. VCL не из главного потока лучше не трогать)).

Если вы это событие не посылаете, оно и не приходит.


> Откуда, в частности, берется цифра 101.

из головы, конкретное число ничего особо не значит, могло быть 202 с таким же успехом. Все события с номерами большими, чем WM_USER, виндой никак не обрабатываются, и передаются как есть.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.04.2011, 19:40   #3
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Вот я и сделал точно так же как и в демке. И процедуру:
Код:
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  if (buffer <> nil) and (len = 0) then
    SendMessage(win, WM_INFO_UPDATE, 8, DWORD(PAnsiChar(buffer)));
end;
тоже вставлял в свой код. Но также как и в демке, не нашел где она вызывается. В демке явного обращения к ней нет, но тем не менее, все работает. У меня все в точности переписано с демки, но работать отказывается (это уже в готовом рабочем проекте). Когда делаю новый проект исключительно с тем, что собираюсь вставлять в готовый проект, все работает.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 02.04.2011, 04:36   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> не нашел где она вызывается

она вызывается изнутри басс, вот передаётся её адрес при создании потока:

Код:
  chan := BASS_StreamCreateURL(url, 0, BASS_STREAM_STATUS, @StatusProc, 0);
> работать отказывается

так а что именно не работает, басс аудио не играет, или только WM_INFO_UPDATE не приходит, а звук идёт?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 02.04.2011, 16:34   #5
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Не приходит только WM_INFO_UPDATE, а басс отлично все воспроизводит. Т.е. я визуально не могу отобразить проигрываемое.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll larry Общие вопросы C/C++ 1 09.11.2009 13:23
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36
bass.dll Elem Мультимедиа в Delphi 18 19.07.2009 11:04