Лаги отрисовки компонентов формы

Общие вопросы программирования, алгоритмы и т.п.

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

Ответить
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Лаги отрисовки компонентов формы

Сообщение Sharfik »

В начале сказки все было хорошо и пушистов, программа работа и предвещало счасть, но потом обновилась Windows, потом еще раз десять обновилась Windows, потом обновился Lazarus и появились незначительные баги в отрисовках формы. То кнопки пропадают, то "дребезг картинки". Не страшно, и на секунду можно даже не обращать внимание. Но тут пришел короновирус и обновил методы работы - привет Удаленный рабочий стол.
И вот тут все что было секундным превратилось в стабильность. Компонент TTreeView имея 700 объектов раз за разом при скроллинге начинает делать дублирование строк по три раза. Показывает одно, а в этом месте уже другая строка. И пропадание кнопок присутствует иногда на отдельных панельках.

Если накидаете идей, куда рыть буду признателен. Возможно это связано с тем что создание идет так

Код: Выделить всё

NewWindow:=TFDatabaseEditor.Create(nil);

, но тут нужно отдельно плавающее окно не завязанное на основную форму.
На своей машине сложно вызывать эти баги, а на удаленную проблема перекидывать, антивирус на все ПО самописные ругается.

Изображение
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

А если заменить на VirtualTreeview?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Снег Север писал(а):А если заменить на VirtualTreeview?

Я его обожаю, но он слишком нагроможден в плане программирования получается для этой задачи. Тем более кнопкам это не поможет. Я понимаю, что либо баг в LCL, либо из-за моего кода где то теряется команда обновления компонента. Не теми путями идет. Но вот как правильно лечить... Два компонента, которым отрисовку сам писал чувствую себя прекрасно, а штатные подводят. :(
Seenkao
энтузиаст
Сообщения: 578
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

Как вариант: что-то ещё обновляет форму.
Alex2013
долгожитель
Сообщения: 3230
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Просто нужно самому скроллинг делать (По умолчанию работает чуть медленней чем при использовании скроллбокса но зато нет ограничений на длину и время обновления всегда стабильное )
ИзображениеИзображение
Зы
При скроллинге стрелками желательно делать перерисовку "по отпусканию клавиш", иначе получается не очень красиво .
Последний раз редактировалось Alex2013 17.03.2021 18:50:42, всего редактировалось 1 раз.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Alex2013 писал(а):Зы
При скроллинге стрелками желательно делать перерисовку "по отпусканию клавиш", иначе получается не очень красиво .

Посмотрю, спасибо!
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Sharfik писал(а):
Снег Север писал(а):А если заменить на VirtualTreeview?

Я его обожаю, но он слишком нагроможден в плане программирования получается для этой задачи.(


Я этот компонент TTreeView сто лет назад выбросил и ни разу не пожалел.
Всё такое только на VirtualTreeview.

И ничего сложного там нет. Вырабатывается привычка писать по-другому и всё.
Аватара пользователя
Kifear
незнакомец
Сообщения: 1
Зарегистрирован: 10.03.2021 13:53:09

Сообщение Kifear »

Sharfik писал(а):
Снег Север писал(а):А если заменить на VirtualTreeview?

Я его обожаю, но он слишком нагроможден в плане программирования получается для этой задачи. Тем более кнопкам это не поможет. Я понимаю, что либо баг в LCL, либо из-за моего кода где то теряется команда обновления компонента. Не теми путями идет. Но вот как правильно лечить... Два компонента, которым отрисовку сам писал чувствую себя прекрасно, а штатные подводят. :(

Как по мне VirtualTreeview отлично бы вписался и в вашу задачу. Нагроможден? Возможно, хотя я уже привык и не сказал бы так. Мне кажется дело вкуса или привычки)
haword
постоялец
Сообщения: 301
Зарегистрирован: 02.03.2006 10:34:40

Сообщение haword »

если есть событие после скрола то там попробовать сделать перерисовку компонента. может поможет.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Kifear писал(а):Как по мне VirtualTreeview отлично бы вписался и в вашу задачу. Нагроможден? Возможно, хотя я уже привык и не сказал бы так. Мне кажется дело вкуса или привычки)

Я его использую с тех пор как появился TurboDelphi и интегрировать его законно туда было нельзя)) Часть функций выполняет VST, а часть штатное дерево. Зависит от задач. Там где нужно дерево с красивыми иконками и небольше VST не особо нужен. Проблема вот только вылезла, что при использовании CustomDraw, если я не рисую сам, а только меняю шрифт для выделения новых записей, глючит :(
haword писал(а):если есть событие после скрола то там попробовать сделать перерисовку компонента. может поможет.

Поможет, но по какому событию инициировать то?
Ответить