views:

320

answers:

1

Hi,

I am using Synapse for Delphi, but when during HTTP downloads, of course, the GUI freezes. Looking at the documentation, they suggest using the OnHeartbeat method.

(See http://www.ararat.cz/synapse/doku.php/public%3Ahowto%3Aheartbeat )

Unfortunately, they don't actually give any code example, and while the concept is simple, the usage is non-obvious.

Is this a per socket (object) setting, or a per application (class) setting? Also, The callback procedure itself is defined as an object, which is a bit unusual. Is anyone who has actually used this willing to share a sample code snippit?

+1  A: 

Although I would suggest running your download in a seperate thread, reading the documentation you'd have to hook a event handler to the OnHeartBeat event.

In that event handler, you could call Application.ProcessMessages() but that is just dangerous due to the possibility of events being fired before you'd actually want them. I would use a custom method to invoke the Paint routine only. You could just pass the handle of your form as parameter, or cast any control to a TWinControl and use the handle property. This will just repaint the form/control, but not allow mouse/keyboard interaction.

procedure AllowRepaints(h: HWND);
var
  m: tMsg;
begin
  while PeekMessage(m, h, WM_PAINT, WM_PAINT, PM_REMOVE) do
    DispatchMessage(m);
end;
Davy Landman