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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.10.2007, 12:22
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию Ошибка после воспроизведения 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  
Старый 06.10.2007, 12:28
Аватар для moo2k
moo2k moo2k вне форума
Активный
 
Регистрация: 05.12.2006
Адрес: где-то там...
Сообщения: 321
Репутация: 35
По умолчанию

Ты хоть сделал инициализацию всего этого? Там написано, - Ошибка времени выполнения.
__________________
Программирование - это искусство и наш смысл жизни.
Ответить с цитированием
  #3  
Старый 06.10.2007, 12:56
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

Как это сделать?
Ответить с цитированием
  #4  
Старый 06.10.2007, 13:02
Аватар для moo2k
moo2k moo2k вне форума
Активный
 
Регистрация: 05.12.2006
Адрес: где-то там...
Сообщения: 321
Репутация: 35
По умолчанию

Ну например, WMP_Music.Open или Create. Я сам с данным активексом не работал, так что точно утверждать не могу.
__________________
Программирование - это искусство и наш смысл жизни.
Ответить с цитированием
  #5  
Старый 06.10.2007, 14:39
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

А музыка то сама проигрывается? Если да, то не парься и юзай try ... except , если нет, то смотри выше сообщение от moo2k'а
__________________

Ответить с цитированием
  #6  
Старый 06.10.2007, 16:01
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

Инициализации никакой не нашел

Мелодии воспроизводяться нормально.

try except не поможет, т.к. сообщения об ошибке после завершения программы
Ответить с цитированием
  #7  
Старый 06.10.2007, 17:19
Аватар для Winny
Winny Winny вне форума
Продвинутый
 
Регистрация: 26.05.2007
Адрес: Планета земля, Россия, Москва
Сообщения: 620
Репутация: 30
По умолчанию

Что то непонятно, кинь исходник.
__________________

Ответить с цитированием
  #8  
Старый 06.10.2007, 17:54
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

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  
Старый 08.10.2007, 02:58
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Попробуй в событите формы OnClose добавить код:
FreeAndNil(WMP_Music);
Ответить с цитированием
  #10  
Старый 10.10.2007, 13:00
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Karsh
Попробуй в событите формы OnClose добавить код:
FreeAndNil(WMP_Music);

FreeAndNil не помог.
Ответить с цитированием
  #11  
Старый 10.10.2007, 13:06
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

Ошибка оказывается возникает в модуле 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  
Старый 21.10.2007, 11:32
Митяй2 Митяй2 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 7
Репутация: 10
По умолчанию

Вся проблема была оказывается в:

Всегда было: 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
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter