Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.12.2012, 19:22
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию Обработать ошибку

Пожалуйста помогите обработать ошибку, создал небольшой радиоплеер на TBassSimple. Все работает отлично, но иногда когда плеер не может загрузить ссылку. Выскакивает ошибка: "Не удалось создать поток BASS_ERROR_HANDLE (5)". Иногда просто достает эта ошибка. Можно ее как нибудь обработать чтобы она не выскакивала, а например в Label1 писалось что то вроде "не могу загрузить ссылку." Весь инет облазил но так ничего не нашел. Может кто сможет помочь.
Исходник прилагаю.
Вложения
Тип файла: rar radioplayer.rar (273.8 Кбайт, 18 просмотров)
Ответить с цитированием
  #2  
Старый 05.12.2012, 19:41
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от HMR
Пожалуйста помогите обработать ошибку, создал небольшой радиоплеер на TBassSimple. Все работает отлично, но иногда когда плеер не может загрузить ссылку. Выскакивает ошибка: "Не удалось создать поток BASS_ERROR_HANDLE (5)". Иногда просто достает эта ошибка. Можно ее как нибудь обработать чтобы она не выскакивала, а например в Label1 писалось что то вроде "не могу загрузить ссылку." Весь инет облазил но так ничего не нашел. Может кто сможет помочь.
Исходник прилагаю.
Если эта ошибка - исключение, то подавить отображение ошибки можно заключив код (который вызывает исключение) в блок try..except.
Пример:
Код:
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    bs.Play(url);
  except
    // В случае исключения ничего не делаем
  end;
end;
Ответить с цитированием
  #3  
Старый 05.12.2012, 19:48
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Пробовал уже try..except ноль эмоций, то есть ошибка все равно выскакивает. Может есть еще предложения.
Ответить с цитированием
  #4  
Старый 05.12.2012, 19:54
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от HMR
Пробовал уже try..except ноль эмоций, то есть ошибка все равно выскакивает. Может есть еще предложения.
Не могу проверить твой исходник из-за отсутствующего файла bass_simple.pas (и заодно и bass.pas), а тот который у меня есть - почему-то несовместим по параметрам.
Ответить с цитированием
  #5  
Старый 05.12.2012, 20:01
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

И вот ещё что. Когда ты заключаешь в блок try..except, ты уверен что ошибку выдаёт именно приложение, а не отладчик Delphi? Попробуй запустить приложение не из под Delphi, а проводником.
Ответить с цитированием
  #6  
Старый 05.12.2012, 20:06
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Пробывал через проводник ошибка всеравно.
Вот файлы bass_simple.pas и bass.pas которые у меня.
Вложения
Тип файла: rar Bass.rar (36.9 Кбайт, 22 просмотров)
Ответить с цитированием
  #7  
Старый 05.12.2012, 20:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от HMR
Пробывал через проводник ошибка всеравно.
Вот файлы bass_simple.pas и bass.pas которые у меня.
Всё понятно. У тебя какая-то совершенно другая реализация модуля bass_simple.pas. У меня реализация от alexpac26 которая >>здесь<<.
Чтобы в той версии которую ты выложил не появлялось никаких сообщений закоментируй MessageBox в модуле bass_simple здесь:
Код:
1
2
3
4
procedure winmessage(h: HWND; text,caption: string; messtype: integer);
begin
  MessageBox(h,PChar(text),PChar(caption),messtype);
end;
Или чтобы конкретно это сообщение не появлялось - закоментируй вызов winmessage вот здесь:
Код:
1
2
3
4
5
// запуск завершен
if (stream = 0) then begin
   winmessage(Handle,b_mess_error[b_mess_lang,2]+BassErrorString,'Error BASS_StreamCreateFile');
   busy:=false; exit;
end;
Ну или же используй bass_simple.pas из ссылки которую я выше привёл - там сообщения об ошибках сделаны через исключения, которые можно подавлять (или обрабатывать) с помощью try..except.
Ответить с цитированием
  #8  
Старый 05.12.2012, 21:04
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Спасибо, помогли. Скачал версию по старее и обработал через try..except.
только вот теперь не компилируется останавливается на строке: bs.OnTitleChange:=BassTitle; и пишет :Incompatible types: 'Parameter lists differ'. не могли бы еще помочь с этим.
Ответить с цитированием
  #9  
Старый 05.12.2012, 21:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотри внимательно описание типа обработчика события OnTitleChange.
Сигнатуры этого типа и твоей процедуры BassTitle различаются (кол-во и/или тип параметров скорее всего).
Ответить с цитированием
  #10  
Старый 05.12.2012, 21:44
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Чего же так париться? Зачем использовать сторонние классы? С библиотекой BASS очень легко работать
Ответить с цитированием
  #11  
Старый 06.12.2012, 01:46
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от HMR
Спасибо, помогли. Скачал версию по старее и обработал через try..except.
только вот теперь не компилируется останавливается на строке: bs.OnTitleChange:=BassTitle; и пишет :Incompatible types: 'Parameter lists differ'. не могли бы еще помочь с этим.
Ну да. Это же то о чём я писал - несовместимость по параметрам. Посмотри список параметров у своего метода BassTitle и список параметров типа TBassEvent свойства OnTitleChange, и тебе (надеюсь) станет ясно, что нужно изменить.

Сейчас посмотрел более внимательно - действительно, эти два модуля bass_simple.pas от одного и того же разработчика, но твоя версия поновее моей.
Из истории изменений:
Цитата:
Версия 1.7 Октябрь 2012
.....
- Убраны исключения Exceptions и заменены на MessageBox
.....
Вот здесь "собака и порылась"... Какое-то деградационное нововведение...
Ответить с цитированием
  #12  
Старый 06.12.2012, 07:30
Аватар для alexpac26
alexpac26 alexpac26 вне форума
Прохожий
 
Регистрация: 23.08.2011
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Не удалось создать поток BASS_ERROR_HANDLE (5)

1) тексты сообщений валяются в массиве

Код:
1
2
3
4
5
6
7
8
9
10
b_mess_error : array[0..1,0..3] of string =
  ( ('Unknown file type'#13#10// eng 0
      'File is not exists'#13#10,
     'Stream is not created'#13#10,
     'Play the Stream Error'#13#10 ),
     ('Неизвестный формат файла'#13#10// rus 1
      'Файл не найден'#13#10,
     'Не удалось создать поток'#13#10,
     'Не удалось запустить воспроизведение'#13#10 )
  );

2) по коду ошибки в фукнции

Код:
1
2
3
4
5
6
7
8
9
procedure TBassSimple.Load;
 
// ...
 
// запуск завершен
if (stream = 0) then begin
   winmessage(Handle,b_mess_error[b_mess_lang,2]+BassErrorString,'Error BASS_StreamCreateFile');
   busy:=false; exit;
end;

вот тут допишите свой обработчик типа

Код:
1
2
if bassRadio and (BASS_ErrorGetCode = 5) then
winmessage(Handle,'Не найдена радио станция','Ошибка');

насчет исключений да, не думал что может быть так, подумаю ...

насчет кодов ошибок тоже.



могу еще предложить в BassSimple ввести событие ошибки OnBassError : TBassErrorEvent = procedure (Sender: TObject; Text: string; Code: integer) of object;

и если оно не назначено то будут выдаваться messagebox как раньше, а если назначено то вызываеться событие и там сам как хочешь обрабатывай

и где такие радио станции нарыл что 90% не работают?

Последний раз редактировалось alexpac26, 06.12.2012 в 07:55.
Ответить с цитированием
  #13  
Старый 06.12.2012, 11:23
HMR HMR вне форума
Прохожий
 
Регистрация: 25.11.2011
Сообщения: 26
Репутация: 10
По умолчанию

Спасибо всем что откликнулись. Проблема решена. Насчет радиостанций там специально ошибки есть чтобы ошибку показать.
Ответить с цитированием
  #14  
Старый 06.12.2012, 13:27
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от alexpac26
могу еще предложить в BassSimple ввести событие ошибки OnBassError : TBassErrorEvent = procedure (Sender: TObject; Text: string; Code: integer) of object;

и если оно не назначено то будут выдаваться messagebox как раньше, а если назначено то вызываеться событие и там сам как хочешь обрабатывай
Тоже хороший вариант - в стандартном VCL часто используется такой приём что когда обработчик события не назначен, то выполняются совершенно другие действия. В любом случае всё же лучше, чем не давать возможность подавить/обработать ошибки иначе, кроме как править исходники bass_simple.pas
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025