Что быстрее отрисуется набор фреймов или панелей?

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

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

jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Что быстрее отрисуется набор фреймов или панелей?

Сообщение jsa »

Здравствуйте.
Ни разу не пользовался фреймами, поэтому вопрос к тем у кого есть опыт.
Что будет быстрее отрисовываться при перемещение сплиттера?
вариант 1. - Panel 5штук (Align = left, и последний allclient) разделенные сплиттерами,
вариант 2. - Фреймы 5штук (Align = left, и последний allclient) разделенные сплиттерами,
на них лежат в основном гриды, кнопки, лабелы

панели перегружены компонентами, и уменьшить их кол-во нет возможности.
на загруженной или слабой машине бывает, что видна отрисовка компонент.
Причем перерисовываются все панели справа от сплитера.
Может при использовании фреймов будет только 1 фрейм отрисовываться? а содержимое остальных нет?

Добавлено спустя 57 минут 33 секунды:
похоже сплиттер с фреймами не работает.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

Фрейм - это как самостоятельная форма, которую можно вставлять в другие формы (можно вставлять и обычные формы, но это геморройнее). В смысле скорости прорисовки не вижу особой разницы между прорисовкой фрейма или того же набора компонентов без фрейма.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Я думал, что если фрейм в размере не меняется а только сдвигается, то это будет выглядеть более плавно, без перерисовки.
Но в общем я попробовал накидать на новую форму фреймы и слиттеры, а так же фреймы на панелях, а сплиттеры уже не между фреймами, а между панелями.
В обоих случаях НЕ работает сплиттер, просто не двигается.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

У фрейма (без вложенных контролов) нечего отрисовывать, разве что только фон. А у панели и у формы есть фон и рамка. Если рамку отключить, то разницы нет.

Отрисовка даже пустых контролов происходит в два этапа - отдельно отрисовка фона (которая и вызывает тормоза и мерцание), отдельно отрисовка содержимого. Отрисовку фона можно отключить установив свойство ControlStyle := ControlStyle - [csOpaque]. Но это работает не во всех контролах и виджетсетах.

В любом случае отрисовка множества контролов будет быстрее, если отключить их видимость или включить свойство DoubleBuffered (в стандартных лазаревских контролах не работает).
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

Кстати, jsa, я вам в тему про SMTP Indy послал свой работающий пример с двумя кодировками.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Посмотрите в сторону нескольких форм сдоканых анхордокингом. Не интересовался как там с скоростью отрисовки (думаю также как у набора отдельных форм), но зато позволит структурировать программу и настроить внешний вид как юзеру удобно
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

zub писал(а):сдоканых анхордокингом

Понять бы еще, что эти слова значат.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

jsa писал(а):Понять бы еще, что эти слова значат.

Наверное,
https://wiki.freepascal.org/Anchor_Dock ... ep_example
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>что эти слова значат.
Пакет в папке lazaruscomponentsanchordocking тамже 2 примера minide и minidewithdockpanel

Добавлено спустя 4 минуты 43 секунды:
https://wiki.freepascal.org/Anchor_Docking/ru
там кое где написано что можно использовать не формы а контролы, но с этим могут быть проблемы, лучше клеить формы

Добавлено спустя 2 минуты 43 секунды:
после редактирования в первом абзаце пропали слеши должно быть:
lazarus\components\anchordocking
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

Снег Север писал(а):можно вставлять и обычные формы, но это геморройнее


А чем геморройнее? Много лет это делаю. Всего-навсего одна строка разницы при создании формы: Parent :=
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

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

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

S_Gur писал(а):А чем геморройнее?

В дизайне не получится. А создавать формы динамически я, например, очень не люблю.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

Снег Север писал(а):В дизайне не получится. А создавать формы динамически я, например, очень не люблю.


У тебя в проектах все формы всегда в AutoCreate создаются? И висят все время работы программы в мозгах? По-моему, это не совсем правильно
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

S_Gur писал(а):По-моему, это не совсем правильно

А по-моему это как раз правильно. Заведомо исключаются коллизии, когда одна форма должна что-то прочитать с другой, а та, по недосмотру, еще не создана. Если проект разрастается настолько, что ему начинает не хватать памяти просто для форм (мне такую ситуацию сложно представить) - это ошибка проектирования. В таком случае проект должен быть разделен на самостоятельные части или часть функционала вынесена в динамически загружаемые библиотеки.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

На формах не надо ничего хранить, и о существовании друг друга им лучше не знать
Ответить