![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обработать приход нескольких одинаковых TMessage как одно?
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;