Есть код, который даёт приложению "подышать", пока выполняется длительная фоновая задача.
Для "дышать полной грудью" есть Application.ProcessMessages, но надо перерыть кислород по максимуму: запретить весь пользовательский ввод, разрешить только move-resize-vinimize-repaint, etc.
Под Win всё просто:
- Код: Выделить всё
procedure THtVAsyncDisp.FilterMessages(IdlePos: TIdlePos; aAsyncMode: TAsyncMode);
var Msg: TMsg;
begin
if assigned(FOnFilterMessages) then
FOnFilterMessages(Self, IdlePos, aAsyncMode)
else
if aAsyncMode <> amAll then // сожрать всё, что юзер накликал и натыкал
while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) or
PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) or
(aAsyncMode = amRestrict) and
PeekMessage(Msg, 0, WM_NCMOUSEMOVE, WM_NCXBUTTONDBLCLK, PM_REMOVE)
do ;
Application.ProcessMessages;
end;
Могу ли я в Лазаре выкрутить подобную фильрацию его стандартными средствами? Платформонезависимо, или хотя бы native Linux..