Задержка выполнения OnChange (Delphi 2)
Задержка выполнения OnChange (Delphi 2)
В случае нажатия пользователем клавиши или изменении текущего элемента компонента ComboBox, вы обратите внимание на досадную задержку, возникающую при генерации события OnChange.
Так как "работа кипит", я хотел бы отреагировать на изменение ItemIndex несколько позднее, например, 100 миллисекунд спустя. Вот что у меня получилось. Созданный в Delphi2, код подходит также и для Delphi 1. На простой форме располагаем компоненты ComboBox и Label. Необходимым дополнением является вызов Application.ProcessMessages, позволяющий избежать замедления работы PC, когда очередь сообщений для формы пуста.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
const
// Просто некоторая константа сообщения
PM_COMBOCHANGE = WM_USER + 8001;
// 500 миллисекунд
CWantedDelay = 500;
type TForm1 = class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
procedure ComboBox1Change(Sender: TObject);
private
procedure PMComboChange(var message : TMessage); message PM_COMBOCHANGE;
public
end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
PostMessage(Handle, PM_COMBOCHANGE, 0, 0);
end;
procedure TForm1.PMComboChange(var message : TMessage);
const
InProc: BOOLEAN = FALSE;
StartTick: LONGINT = 0;
begin
if InProc then begin
// Обновляем стартовое время задержки
StartTick:= GetTickCount;
end else begin
// Организация цикла
InProc:= TRUE;
// Инициализация стартового времени
StartTick:= GetTickCount;
// Ожидаем истечения стартового времени.
// Пока стартовое время не исчерпалось, позволяем операционной системе обрабатывать сообщения
while GetTickCount - StartTick < CWantedDelay do Application.ProcessMessages;
// Иллюстративное приращение счетчика, задающее некоторую реальную работу обработчику события OnChange
Label1.Caption:= IntToStr(StrToIntDef(Label1.Caption, 0) + 1);
// Завершение цикла
InProc:= FALSE;
end;
end;
end.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Задержка перехода
Задержка перехода Можно сделать так, чтобы переход осуществлялся не сразу после того, как срабатывает связанное с ним событие, но с некоторой задержкой. Например, сделаем так, чтобы переход цвета фона происходил через полсекунды после того, как ссылка попала
Задержка выполнения
Задержка выполнения Часто коду ядра (особенно драйверам) необходимо задерживать выполнение действий на некоторый период времени без использования таймеров или механизма нижних половин. Это обычно необходимо для того, чтобы дать аппаратному обеспечению время на
Задержка с помощью цикла
Задержка с помощью цикла Наиболее простое для реализации (хотя обычно не оптимальное) решение — это использование задержки с помощью цикла или ожидания в состоянии занятости (busy loop, busy waiting). Эта техника работает, только если интервал времени задержки является кратным
Задержка передачи звука
Задержка передачи звука Одна из самых неприятных помех во время разговора через VoIP-телефонию – это задержки сигнала, то есть вы слышите своего собеседника не сразу в тот момент, когда он говорит, а спустя некоторое время. И собеседнику ваш голос тоже приходит с
1.3.3. Delphi и CGI
1.3.3. Delphi и CGI В данной главе я расскажу, как написать простое Дельфи CGI приложение, без использования Web Modules или других Client/Server модулей.Во первых аббревиатура CGI означает Common Gateway Interface, и это только имя для передачи информации от клиента серверу. На клиентской стороне это
2.1.1. Delphi и HTML
2.1.1. Delphi и HTML Мой главный инструмент разработчики это Дельфи, и мы напишем Delphi Database HTML Expert в данной главе. Дельфи позволяет подсоединяться практически к базе данных любого формата. С помощью BDE к Парадоксу и dBASE, с помощью ODBC например к Access, и с помощью SQL Links к большим DBMS типа
Что нового в Delphi 2.0 по сравнения с Delphi 1.0?
Что нового в Delphi 2.0 по сравнения с Delphi 1.0? Выпущенная в феврале 1995 года версия Delphi 1.0 стала первым инструментом для Windows, комбинирующим оптимизирующий компилятор, механизмы визуальной разработки Two-Way-Tools и масштабируемую архитектуру обработки баз данных. Сегодня сотни
12.4. Пропускная способность и задержка
12.4. Пропускная способность и задержка Другим последствием использования быстрых процессоров является то, что производительность обычно ограничивается затратами на I/О-операции и (особенно в случае программ, использующих Internet) затратами на сетевые транзакции.
12.4. Пропускная способность и задержка
12.4. Пропускная способность и задержка Другим последствием использования быстрых процессоров является то, что производительность обычно ограничивается затратами на I/O-операции и (особенно в случае программ, использующих Internet) затратами на сетевые транзакции.
Задержка с выводом средств
Задержка с выводом средств Вывод средств, полученных в результате выигрыша в интернет-казино или лотерее – еще одна лазейка, позволяющая мошенникам получать дополнительные деньги, а точнее – успешно избегать причитающихся игрокам выплат выигранных сумм.Не секрет, что
Эффект Simple Delay (Простая задержка)
Эффект Simple Delay (Простая задержка) Эффект Simple Delay (Простая задержка) позволяет применять базовые эффекты эха к звуковым фрагментам и композициям. Чтобы использовать этот эффект, нужно выполнить следующие действия.1. Выделить фрагмент аудиоданных, к которым нужно применить
Эффект Multi-Tap Delay (Многоотводная задержка)
Эффект Multi-Tap Delay (Многоотводная задержка) Функция Multi-Tap Delay (Многоотводная задержка) позволяет создавать очень сложные эффекты эха за счет установки сразу нескольких задержек, подобно одновременной установке нескольких эффектов Simple (Простое). Чтобы настроить эффект Multi-Tap
Задержка выполнения
Задержка выполнения Задержка выполнения OnChange (Delphi 2) В случае нажатия пользователем клавиши или изменении текущего элемента компонента ComboBox, вы обратите внимание на досадную задержку, возникающую при генерации события OnChange.Так как "работа кипит", я хотел бы