![]() |
| ||
|
|
Новости |
Поиск |
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 раз. Можно как-нибудь принять десяток сообщений за одно?
icWasya (2011-10-04 15:09:00) [1]А если так
var
SavMsg: TMessage;
procedure TFmMain.MMVolumeChange(var AMsg: TMessage); //MM_MIXM_CONTROL_CHANGE
begin
VolumeTimer.Enabled:=false;
SavMsg:=AMsg;
VolumeTimer.Enabled:=true;
end;
procedure TFmMain.VolumeTimerOnTimer(Sender:TObject)
begin
VolumeTimer.Enabled:=false;
//Обновляем TrackBar;
end;
Cu (2011-10-04 12:33:00) [2]
procedure TSetVol.MixCtrlChange(var mess : TMessage); message MM_MIXM_CONTROL_CHANGE;
var
Msg: tagMsg;
begin
// Видаляємо зайві повідомлення з черги, щоб вони нас надалі не бентежили
while PeekMessage(Msg, Handle, MM_MIXM_CONTROL_CHANGE, MM_MIXM_CONTROL_CHANGE, PM_REMOVE) do;
// Робимо те, що збиралися...
end;
Cobalt (2011-10-04 10:05:00) [3]Еще один партизан :-)
Причем прячется, похоже, от себя, т.к. не знает, чего ему надо - то ли демократии, то ли севрюжины с хреном...
irzyxa (2011-10-03 23:11:00) [4]
procedure TFmMain.MMVolumeChange(var AMsg: TMessage); //MM_MIXM_CONTROL_CHANGE
begin
//DevicesListControls:array of TMixerControl - Элементы управления дорожки микшера
//DevicesListControlsMute:array of TMixerControl - Элементы управления дорожки микшера
//Если это не наш микшер(не тот которым мы управляем), то ничего не делаем
if (AMsg.LParam <> DevicesListControls[GetCurrentDevice].dwControlID)and
(AMsg.LParam <> DevicesListControlsMute[GetCurrentDevice].dwControlID) then
Exit;
//Обновляем TrackBar;
end;
Anatoly Podgoretsky (2011-07-18 15:04:00) [5]Да какая разница сколько раз обновляться то, ведь пока движешься к следующий позиции все уже перерисуется. Разве что надо показать бурную деятельность.
Сергей М. (2011-07-18 14:43:00) [6]
> эти 25 сообщений (TMessage) нужно отработать разом
Как это "разом", если они последовательно поступают и каждое из них отражает изменившийсяконтекст контрола ? Не выдумывай, ничего подобного я не говорил.
А программу, которая вместо того чтобы в ответ на действие пользователя один раз скомандовать микшерной подсистеме "измени значение такого-то контрола на +12" командует ей 12 раз подряд "измени значение такого-то контрола на +1" - ей место в топке.
D_2010 (2011-07-18 14:37:00) [7]> Inovet © (18.07.11 13:37) [6]
> Значит 10-25 раз изменилась, в чём проблема?
> Сергей М. © (18.07.11 14:25) [22]
>>> смысл тогда менять 12 раз на 1 позицию, вместо того, чтобы
>>> сразу сдвинуть на 12?
>>> Умные программы так и делают.
Inovet, это ты как-то выборочно читаешь сообщения, либо гнёшь свою линию! Предлагаешь 25 раз проверять значение громкости, хотя, вот, даже Сергей согласен с тем, что эти 25 сообщений (TMessage) нужно отработать разом!
Inovet (2011-07-18 14:28:00) [8]> [21] D_2010 (18.07.11 14:20)
> И смысл тогда менять 12 раз на 1 позицию, вместо того, чтобы
> сразу сдвинуть на 12?
Ты сообщения в ветке читаешь или выбираешь только понятные слова?
Сергей М. (2011-07-18 14:25:00) [9]
> смысл тогда менять 12 раз на 1 позицию, вместо того, чтобы
> сразу сдвинуть на 12?
Умные программы так и делают.
А не шибко умные - они и есть нешибко умные, что с них взять ?
D_2010 (2011-07-18 14:20:00) [10]>>> SQLEXPRESS (18.07.11 13:56) [19]
>>> а, да.. точно, > > _CHANGE
Значит предложение не катит? (((
>>> уровень изменился на 12, вот и пришло 12
И смысл тогда менять 12 раз на 1 позицию, вместо того, чтобы сразу сдвинуть на 12?
Сергей М. (2011-07-18 13:56:00) [11]
> Так на экране же 0-100% - значит на 100
Так на заборе .. написано, а там вестимо дрова лежат)
Эеран - это не микшер, а микшер - это не экран.
Мало ли всякоразных "экранов" понаплодили)
SQLEXPRESS (2011-07-18 13:56:00) [12]
> Сергей М. © (18.07.11 13:53) [17]
а, да.. точно,
> _CHANGE
же там..
Inovet (2011-07-18 13:55:00) [13]> [15] SQLEXPRESS (18.07.11 13:52)
> мне тоже не верится, что одинаковые могут слаться сообщения
Да зачем бы они были одинаковые. Здвинули ползунок на одно деление уровень изменился на 12, вот и пришло 12, чтобы щелчков небыло. Имхо так, надо мануал смотреть, да.
Сергей М. (2011-07-18 13:53:00) [14]
> а оно такое будет если W и L параметры = предыдущему, то
> ничего не делаем
W- и L-параметры сообщения НЕ дают инф-ции о состоянии контрола - они только идентифицирую контрол.
Inovet (2011-07-18 13:52:00) [15]> [12] Сергей М. © (18.07.11 13:46)
> это с какой радости он "разбит", да еще и "на шкалу до 100"?
> Где это написано в документации ? Покажи ...
Так на экране же 0-100% - значит на 100.:)
SQLEXPRESS (2011-07-18 13:52:00) [16]мне тоже не верится, что одинаковые могут слаться сообщения
но чего гадать, надо написать да посмотреть. Если параметры равны, то такое же. Больше нечему там отличаться.
> А LastMessage.W и LastMessage.L - это что за переменные?
> array[0..1] of Integer - ?
Ну и так можно, но лучше просто типа TMessage;
Inovet (2011-07-18 13:51:00) [17]> [9] D_2010 (18.07.11 13:39)
> Для этого нужно вычислить (получить) позицию (значение текущей громкости).
Позиция на экране и значение громкости вообще-то могут быть по разному связаны: линейно, логарифмически, косинус какой-нить.
И вообще
> [5] Inovet © (18.07.11 13:35)
> Но этот ТрекБар поди и сам не тупой? Его дело позиции отслеживать и рисовать
SQLEXPRESS (2011-07-18 13:47:00) [18]тьфю, т.е. наоборот :)
короче, если пришло такое же сообщение, а оно такое будет если W и L параметры = предыдущему, то ничего не делаем.
А иначе и делаем и запоминаем новые W и L
Сергей М. (2011-07-18 13:46:00) [19]
> Для этого нужно вычислить (получить) позицию (значение текущей
> громкости)
Ты сам себе протииворечишь.
Зачем получать текущее состояние контрола, если ты уверенчто оно не изменилось ?)
А если все же изменилось (а оно действительно изменилось), то без чтения состояния контрола никак не обойтись.
> мишкер разбит на шкалу до 100
это с какой радости он "разбит", да еще и "на шкалу до 100" ?
Где это написано в документации ? Покажи ...
D_2010 (2011-07-18 13:44:00) [20]
procedure TSetVol.MixCtrlChange(var mess : TMessage);
begin
if LastMessage.W = mess.WParam
and LastMessage.L = mess.LParam
then begin
// обновляем TrackBar;
LastMessage.W := mess.WParam;
LastMessage.L := mess.LParam;
end;
end;
А LastMessage.W и LastMessage.L - это что за переменные?
array[0..1] of Integer - ?