![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пожалуйста помогите обработать ошибку, создал небольшой радиоплеер на TBassSimple. Все работает отлично, но иногда когда плеер не может загрузить ссылку. Выскакивает ошибка: "Не удалось создать поток BASS_ERROR_HANDLE (5)". Иногда просто достает эта ошибка. Можно ее как нибудь обработать чтобы она не выскакивала, а например в Label1 писалось что то вроде "не могу загрузить ссылку." Весь инет облазил но так ничего не нашел. Может кто сможет помочь. 
		
	
		
		
			Исходник прилагаю.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Пример: Код: 
	procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    bs.Play(url);
  except
    // В случае исключения ничего не делаем
  end;
end; | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пробовал уже try..except ноль эмоций, то есть ошибка все равно выскакивает. Может есть еще предложения. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 И вот ещё что. Когда ты заключаешь в блок try..except, ты уверен что ошибку выдаёт именно приложение, а не отладчик Delphi? Попробуй запустить приложение не из под Delphi, а проводником. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пробывал через проводник ошибка всеравно. 
		
	
		
		
			Вот файлы bass_simple.pas и bass.pas которые у меня.  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Чтобы в той версии которую ты выложил не появлялось никаких сообщений закоментируй MessageBox в модуле bass_simple здесь: Код: 
	procedure winmessage(h: HWND; text,caption: string; messtype: integer); begin MessageBox(h,PChar(text),PChar(caption),messtype); end; Код: 
	// запуск завершен if (stream = 0) then begin winmessage(Handle,b_mess_error[b_mess_lang,2]+BassErrorString,'Error BASS_StreamCreateFile'); busy:=false; exit; end;  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо, помогли. Скачал версию по старее и обработал через try..except. 
		
	
		
		
		
		
		
	
		
		
	
	
	только вот теперь не компилируется останавливается на строке: bs.OnTitleChange:=BassTitle; и пишет :Incompatible types: 'Parameter lists differ'. не могли бы еще помочь с этим.  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Смотри внимательно описание типа обработчика события OnTitleChange. 
		
	
		
		
		
		
		
	
		
		
	
	
	Сигнатуры этого типа и твоей процедуры BassTitle различаются (кол-во и/или тип параметров скорее всего).  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Чего же так париться? Зачем использовать сторонние классы? С библиотекой BASS очень легко работать  
		
	
		
		
		
		
		
	
		
		
	
	
	![]()  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Сейчас посмотрел более внимательно - действительно, эти два модуля bass_simple.pas от одного и того же разработчика, но твоя версия поновее моей. Из истории изменений: Цитата: 
	
 ![]()  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 1) тексты сообщений валяются в массиве Код: 
	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) по коду ошибки в фукнции Код: 
	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; вот тут допишите свой обработчик типа Код: 
	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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо всем что откликнулись. Проблема решена. Насчет радиостанций там специально ошибки есть чтобы ошибку показать. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  |