![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет!
В программе часто вызываю: 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 |