У кого-нибудь есть хороший пример использования функции пульса Synapse?

Я использую Synapse для Delphi, но когда во время загрузки HTTP, конечно, графический интерфейс зависает. Глядя на документацию, они предлагают использовать метод OnHeartbeat.

(См. http://www.ararat.cz/synapse/doku.php/public:howto:heartbeat)

К сожалению, они на самом деле не дают никакого примера кода, и хотя концепция проста, использование не очевидно.

Это настройка для каждого сокета (объекта) или для приложения (класса)? Кроме того, сама процедура обратного вызова определяется как объект, что немного необычно. Кто-нибудь, кто действительно использовал это, готов поделиться фрагментом кода?

1 ответ

Хотя я бы посоветовал запустить загрузку в отдельном потоке, читая документацию, вы должны подключить обработчик события к событию OnHeartBeat.

В этом обработчике событий вы можете вызвать Application.ProcessMessages() но это просто опасно из-за возможности запуска событий до того, как вы действительно захотите их. Я бы использовал пользовательский метод для вызова только процедуры Paint. Вы можете просто передать дескриптор вашей формы в качестве параметра или привести любой элемент управления к TWinControl и использовать свойство handle. Это просто перекрасит форму / элемент управления, но не позволит взаимодействовать с мышью / клавиатурой.

procedure AllowRepaints(h: HWND);
var
  m: tMsg;
begin
  while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do
    DispatchMessage(m);
end;
Другие вопросы по тегам