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 раз. Можно как-нибудь принять десяток сообщений за одно?


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  - ?


Страницы:   1 2

Наверх

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