не работает TControl.Update только под Qt

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

не работает TControl.Update только под Qt

Сообщение VirtUX » 26.06.2015 20:39:42

Собственно, кто знает как можно обмануть, чтоб и под Qt TControl.Update немедленно перерисовывал компонент?
Для примера:
Код: Выделить всё
...
var
  i: integer;
begin
  for i := 1 to 1000 do begin
    Label1.Caption := inttostr(i);
    Label1.Update;
    sleep(1);
  end;
end;

...под Win и GTK в течении секунды визуально отобразит все значения. Под Qt только последнее "1000". Т.е. под Qt TControl.Update - не работает :(

Добавлено спустя 4 минуты 3 секунды:
При этом ставлю "точку останова" тут:
Код: Выделить всё
procedure TControl.Update;
begin
  if Parent<>nil then Parent.Update;
end;

...и тут:
Код: Выделить всё
procedure TWinControl.Update;
begin
  if HandleAllocated then UpdateWindow(Handle);
end; 

...нигде не отрабатывает. Т.е. в Qt TWinControl.Update - тупо игнорится компилятором???
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: не работает TControl.Update только под Qt

Сообщение zub » 26.06.2015 21:11:46

в Qt рисование возможно только внутри соответствующего сообщения. придтся внутри цикла воткнуть application.processmessages, иначе вроде никак.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: не работает TControl.Update только под Qt

Сообщение VirtUX » 26.06.2015 21:19:14

Но application.processmessages приводит к дёрганьям и (опять жеж...) не позволяет отобразить всю последовательность. Да и пользователь в этот момент получает возможность клацнуть куданить ))) что крайне не нужно. Понятно, что это можно запретить и т.д. - но слишком накладно сейчас.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: не работает TControl.Update только под Qt

Сообщение zub » 26.06.2015 21:32:34

Контрол перерисовать средствами LCL без сообщений точно не получится, возможно получится самому рисовать на контроле без лцл.
http://forum.lazarus.freepascal.org/ind ... #msg151416 я пытался, невышло.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: не работает TControl.Update только под Qt

Сообщение VirtUX » 26.06.2015 21:56:05

Спасибо за ссылку. Теперь ясно, - что дело тёмное )))
Значит буду искать универсальный способ блокировки пользовательских движений + заставлять отрабатывать сам ProcessMessages с нужной реакцией.
А в будущем прийдется таки что-то мудрить. Т.к. нужна мгновенная реакция, а не ждать сообщения от "менеджера".
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 242

Рейтинг@Mail.ru