|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка после воспроизведения mp3-мелодий
Всем привет!
В программе часто вызываю: WMP_Music.URL:=<полный путь к mp3-песне>; WMP_Music.controls.play; WMP_Music - ActiveX компонент Windowa Media Player Почему при выходе из программы почти всегда выводяться сообщения об ошибке (иногда почему то нет): Access violation at address 00469E29 in module 'MobileCollection.exe'. Read of address 00000484 закрываю это окно, несколько раз появляется такоеже, потом: Инструкция по адресу "0x004812e2" обратилась к памяти по адресу "0x00bf4a5d". Память не может быть "read" закрываю это сообщение и появляется следующее: Runtime error 216 at 0041FC4E В чем может быть проблема? |
#2
|
||||
|
||||
Ты хоть сделал инициализацию всего этого? Там написано, - Ошибка времени выполнения.
Программирование - это искусство и наш смысл жизни. |
#3
|
|||
|
|||
Как это сделать?
|
#4
|
||||
|
||||
Ну например, WMP_Music.Open или Create. Я сам с данным активексом не работал, так что точно утверждать не могу.
Программирование - это искусство и наш смысл жизни. |
#5
|
||||
|
||||
А музыка то сама проигрывается? Если да, то не парься и юзай try ... except , если нет, то смотри выше сообщение от moo2k'а
|
#6
|
|||
|
|||
Инициализации никакой не нашел
Мелодии воспроизводяться нормально. try except не поможет, т.к. сообщения об ошибке после завершения программы |
#7
|
||||
|
||||
Что то непонятно, кинь исходник.
|
#8
|
|||
|
|||
http://slil.ru/24943624 - исходник
функция: procedure TFmMelody.LbMelodyClick(Sender: TObject); место с: if ((MultimediaType=midi) or (MultimediaType=mp3) or (MultimediaType=wav) or (MultimediaType=mp3full) or (MultimediaType=wavfull)) then |
#9
|
||||
|
||||
Попробуй в событите формы OnClose добавить код:
FreeAndNil(WMP_Music); |
#10
|
|||
|
|||
Цитата:
FreeAndNil не помог. |
#11
|
|||
|
|||
Ошибка оказывается возникает в модуле Forms.pas !!!!:
ЗДЕСЬ: if FControl.FAutoScroll then Код:
procedure TControlScrollBar.CalcAutoRange; var I: Integer; NewRange, AlignMargin: Integer; procedure ProcessHorz(Control: TControl); begin if Control.Visible then case Control.Align of alLeft, alNone: if (Control.Align = alLeft) or (Control.Anchors * [akLeft, akRight] = [akLeft]) then NewRange := Max(NewRange, Position + Control.Left + Control.Width); alRight: Inc(AlignMargin, Control.Width); end; end; procedure ProcessVert(Control: TControl); begin if Control.Visible then case Control.Align of alTop, alNone: if (Control.Align = alTop) or (Control.Anchors * [akTop, akBottom] = [akTop]) then NewRange := Max(NewRange, Position + Control.Top + Control.Height); alBottom: Inc(AlignMargin, Control.Height); end; end; begin if FControl.FAutoScroll then begin if FControl.AutoScrollEnabled then begin NewRange := 0; AlignMargin := 0; for I := 0 to FControl.ControlCount - 1 do if Kind = sbHorizontal then ProcessHorz(FControl.Controls[i]) else ProcessVert(FControl.Controls[i]); DoSetRange(NewRange + AlignMargin + Margin); end else DoSetRange(0); end; end; TControlScrollBar.CalcAutoRange вызывается в: Код:
procedure TScrollingWinControl.WMSize(var Message: TWMSize); var NewState: TWindowState; begin Inc(FAutoRangeCount); try inherited; NewState := wsNormal; case Message.SizeType of SIZENORMAL: NewState := wsNormal; SIZEICONIC: NewState := wsMinimized; SIZEFULLSCREEN: NewState := wsMaximized; end; Resizing(NewState); finally Dec(FAutoRangeCount); end; FUpdatingScrollBars := True; try CalcAutoRange; finally FUpdatingScrollBars := False; end; if FHorzScrollBar.Visible or FVertScrollBar.Visible then UpdateScrollBars; end; |
#12
|
|||
|
|||
Вся проблема была оказывается в:
Всегда было: TimerEstimate.enabled=true Код:
procedure TFmMelody.TimerEstimateTimer(Sender: TObject); begin if LbMelody.Count*(LbMelody.ItemIndex+1)<>0 then Begin TimeOfPreListen:=TimeOfPreListen+Round(TimerEstimate.Interval/1000); // Увеличиваем время затраченное на просмотр. LbEstimate.Caption:='Просмотрено '+IntToStr(Round((LbMelody.ItemIndex+1)*100/LbMelody.Count))+'% мелодий. Вы ещё будете просматривать и прослушивать '+GetLengthOfMelodyInMinSec(Round(TimeOfPreListen*LbMelody.Count/(LbMelody.ItemIndex+1)-TimeOfPreListen))+' (оценочно), прослушиваете: '+GetLengthOfMelodyInMinSec(TimeOfPreListen); End; end; теперь оценку времени оставшегося до окончания прослушивания списка мелодий включаю только при Form.Activate, а выключаю при Form.FormCloseQuery |