Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обработать приход нескольких одинаковых TMessage как одно?


Страницы:   1 2

D_2010 ©   (2011-07-18 12:57:00) 

Отслеживаю:
procedure MixCtrlChange(var mess : TMessage); message MM_MIXM_CONTROL_CHANGE;

procedure TSetVol.MixCtrlChange(var mess : TMessage);
begin
 // обновляем TrackBar
end;

Однако оно вызывается многократно... Не хотелось бы обновлять позицию TrackBar-а 10-20 раз. Можно как-нибудь принять десяток сообщений за одно?


SQLEXPRESS   (2011-07-18 13:43:00) [21]


> D_2010   (18.07.11 13:39) [9]

завести таймер дороже чем проверить два числа

не, не так

> procedure TSetVol.MixCtrlChange(var mess : TMessage);
> begin
>    if
>   LastMessage.W = mess.WParam
>   and  LastMessage.L = mess.LParam
then
>   // обновляем TrackBar
else begin
>   LastMessage.W := mess.WParam;
>   LastMessage.L := mess.LParam;
end;
>  
> end;

присвоить 2 числа


D_2010   (2011-07-18 13:39:00) [22]

>>> Inovet ©   (18.07.11 13:35) [5]
>>> Если новая позиция не равна старой, то обновляем.

Для этого нужно вычислить (получить) позицию (значение текущей громкости). И смысл получается? - я стараюсь избежать 10-20-кратных расчётов, а Вы говорите каждый раз сравнивать!


SQLEXPRESS   (2011-07-18 13:38:00) [23]


> and  LastMessage.L = mess.LParam then


SQLEXPRESS   (2011-07-18 13:38:00) [24]

procedure TSetVol.MixCtrlChange(var mess : TMessage);
begin
   if
  LastMessage.W = mess.WParam
  and  LastMessage.W = mess.LParam then
  // обновляем TrackBar;

  LastMessage.W := mess.WParam;
  LastMessage.W := mess.LParam;
 
end;


Inovet   (2011-07-18 13:37:00) [25]

> [3] D_2010   (18.07.11 13:31)
> Да, абсолютно! Меняешь громкость - и сразу подряд 10-25
> вызовов данной процедуры

Значит 10-25 раз изменилась, в чём проблема?


Inovet   (2011-07-18 13:35:00) [26]

> [2] Сергей М. ©   (18.07.11 13:04)

Атор вроде рисовать лишний раз не хочет.

Если новая позиция не равна старой, то обновляем. Но этот ТрекБар поди и сам не тупой? Его дело позиции отслеживать и рисовать, или что там у него делается.


D_2010   (2011-07-18 13:33:00) [27]

> мишкер-- Микшер
опечатка )))


D_2010   (2011-07-18 13:31:00) [28]

>>> RWolf ©   (18.07.11 13:02)
Интересный способ! Да, без Timer-а тут никак.

>>> Сергей М. ©   (18.07.11 13:04)
Да, абсолютно! Меняешь громкость - и сразу подряд 10-25 вызовов данной процедуры. Возможно, это связано с тем - что громкость меняется в диапазоне от 0 до 255, а мишкер разбит на шкалу до 100, вот и получается - меняешь громкость на "5", а MM_MIXM_CONTROL_CHANGE приходит 12 раз (хотя, на самом деле даже больше).


Сергей М.   (2011-07-18 13:04:00) [29]


> нескольких одинаковых


Ой ли ? Так уж и одинаковых ли ?

Само название константы MM_MIXM_CONTROL_ CHANGEговорит о том что сообщение посылается при изменениисостояния микшерного контрола. Зачем , спрашивается, системе плодить кучу одинаковых подряд следующих сообщений, если состояние контрола не изменилось ?


RWolf   (2011-07-18 13:02:00) [30]

procedure TSetVol.MixCtrlChange(var mess : TMessage);
begin
 RefreshFlag:=true;
end;

procedure TSetVol.Timer1Timer(ASource: TObject); //каждые 100 мс
begin
 if RefreshFlag then begin
   RefreshFlag:=false;
   // обновляем TrackBar
 end;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо