Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2007, 13:00   #11
Митяй2
 
Регистрация: 06.10.2007
Сообщений: 8
По умолчанию

Ошибка оказывается возникает в модуле 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;
Митяй2 вне форума Ответить с цитированием
Старый 10.10.2007, 22:39   #12
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Цитата:
место с:

if ((MultimediaType=midi) or (MultimediaType=mp3) or (MultimediaType=wav) or (MultimediaType=mp3full) or (MultimediaType=wavfull)) then
Не лучше ли написать if MultimediaType in [midi,mp3,wav,mp3full,wavfull] then...
А на щёт ошибки я думаю что у тебя чтото не так с драйверами в Windows.
Миша вне форума Ответить с цитированием
Старый 10.10.2007, 23:15   #13
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Возникающая ошибка (484) характерна для случаев обращения не к тому контролу или к несуществующему, что и может возникать при закрытии формы.
Кстати, а почему при закрытии программы идет вся эта хитромудрая обработка скроллов? Вам не кажется, что в этом случае ее надо перекрыть?
mihali4 вне форума Ответить с цитированием
Старый 20.10.2007, 21:17   #14
Митяй2
 
Регистрация: 06.10.2007
Сообщений: 8
По умолчанию

для Миша: верно удобнее

для mihali4: Да вот бы мне самому знать почему это происходит.
Митяй2 вне форума Ответить с цитированием
Старый 21.10.2007, 11:30   #15
Митяй2
 
Регистрация: 06.10.2007
Сообщений: 8
По умолчанию

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

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка после перевода проекта Dr_Elvis Общие вопросы C/C++ 3 24.07.2008 14:27
Каретка после текста Shouldercannon Общие вопросы Delphi 3 20.07.2008 10:37
Сокращение после запятой Romuald Microsoft Office Excel 21 18.12.2007 10:32
проблемы воспроизведения видео _Solomon_ HTML и CSS 0 20.04.2007 08:50
ошибка, после того как я создал запись 'fayl' ZhekON Общие вопросы Delphi 15 01.04.2007 13:39