Вверх ↑
Этот топик читают: Гость
Ответов: 82
Рейтинг: 3
#1: 2019-06-29 10:57:54 ЛС | профиль | цитата
Не всегда и не на всех компьютерах, но проявляется вот такой глюк с отрисовкой.
Как глючит
Знает ли кто, с чем это связано и можно ли это побороть?

Редактировалось 1 раз(а), последний 2019-06-29 10:59:14
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 299
Рейтинг: 4
#2: 2019-06-29 11:23:49 ЛС | профиль | цитата
fox-video, помню у нас с прозрачностью какие-то проблемы были, нестабильно работали элементы интерфейса, если память не изменяет, то дело в KOL. Где-то есть исправленный.
По крайне мере и по сей день сталкиваюсь с такой проблемой. И для критически важных элементов приходится что-то придумывать.
Например при запуске формы, у меня есть кнопка "Далее", и чтобы она не исчезла при создании формы, я делаю на OnCreate формы линию к кнопке (doBringToFront) или Visible 1, точно не помню.
В вашем случае на onResize поставить что-то, что заставит перерисовать элемент, при изменении размера компонента.
Наверняка это может решается иначе, но я выкручиваюсь таким способом, так что думаю тема актуальна.
карма: 1

0
Ответов: 82
Рейтинг: 3
#3: 2019-06-29 11:37:23 ЛС | профиль | цитата
Я применяю "костыль" RedrawManager повешенный на событии onResize, но хотелось бы более кардинального решения.
карма: 1

0
Ответов: 332
Рейтинг: 6
#4: 2019-06-29 12:08:48 ЛС | профиль | цитата
Есть такой глюк даже на элементах, не отражается кнопка ОК, Отмена, пока мыхой по ним не проведешь. WIN7 64

Редактировалось 1 раз(а), последний 2019-06-29 12:09:34
карма: 2

0
Ответов: 4416
Рейтинг: 472
#5: 2019-06-30 09:29:25 ЛС | профиль | цитата
Видать гуру на меня осерчали за мою прямолинейность, каюсь
Кто видел демо с VistaPanel(первое) таже болячка
пришлось лечить кардинально перекрыв метод контейнера

procedure THIVistaPanel._onResize(Obj:PObj);
var
i: integer;
begin
inherited;
Control.Invalidate;
for i := 0 to Control.ChildCount-1 do
Control.Children[i].Invalidate;
end;
полёт нормальный
карма: 4

0
Разработчик
Ответов: 25469
Рейтинг: 2071
#6: 2019-06-30 12:12:38 ЛС | профиль | цитата
andrestudio писал(а):
пришлось лечить кардинально перекрыв метод контейнера

А че не сразу в Win?
карма: 19

0
Ответов: 82
Рейтинг: 3
#7: 2019-06-30 12:37:26 ЛС | профиль | цитата
andrestudio писал(а):
пришлось лечить кардинально перекрыв метод контейнера

Для рядового проекта этот способ применим? Если да, то где нужно править?
карма: 1

0
Разработчик
Ответов: 25469
Рейтинг: 2071
#8: 2019-06-30 13:15:22 ЛС | профиль | цитата
fox-video писал(а):
Для рядового проекта этот способ применим? Если да, то где нужно править?

Попробуй в Win.pas заменить onResize вот на такой

procedure THIWin._onResize;
var
i: integer;
begin
inherited;
Control.Invalidate;
for i := 0 to Control.ChildCount-1 do
Control.Children[i].Invalidate;
_hi_OnEvent(_event_onResize);
end;
Обязательно отпишись, если нормально будет работать, то буду фиксить
карма: 19

0
Ответов: 82
Рейтинг: 3
#9: 2019-06-30 14:52:42 ЛС | профиль | цитата
nesco писал(а):
Обязательно отпишись, если нормально будет работать, то буду фиксить

Приступил к тестированию. Глюк проявляется не всегда, по этому тестирование займет какое-то время. Пока добиться "глюка" не удалось. Позже отпишусь о результатах.
карма: 1

0
Ответов: 4416
Рейтинг: 472
#10: 2019-06-30 15:03:44 ЛС | профиль | цитата
nesco, не торопись, сам ведь понимаешь что это топорное решение. Не визуальный контрол перекрыт визуальным, чес слово не знаю не рыл(может там очередь событий уходит в не бытие), но лучше сам аппендикс найти
карма: 4

0
Разработчик
Ответов: 25469
Рейтинг: 2071
#11: 2019-06-30 16:50:10 ЛС | профиль | цитата
andrestudio писал(а):
Не визуальный контрол перекрыт визуальным, чес слово не знаю не рыл(может там очередь событий уходит в не бытие)

С чего бы это? Мы даем перерисовку только наследникам, и только при изменении размера родителя. Конечно, может быть такая ситуация, когда наследник сам является родителем, и тоже меняет размер, а наследник наследника будет пытаться дать команду на перерисовку либо родителя, либо верховного родителя. Это типа как в главной панели существует куча других панелей, все они одновременно меняют размер, а элементы вложенных панелей дают команду на перерисовку главной панели. Если такого маразма во вложенных элементах нет (???), то ситуации с перекрестным вызовом быть не должно, и все выполнится в пределах отведенной очереди. Правда может стоит подумать о Z-очереди, чтобы контролы отображались последовательно в нужном порядке, и не было перекрытия. КМК, об этом стоит подумать.

--- Добавлено в 2019-06-30 17:01:13

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

Редактировалось 4 раз(а), последний 2019-06-30 17:01:13
карма: 19

0
Ответов: 82
Рейтинг: 3
#12: 2019-06-30 18:01:45 ЛС | профиль | цитата
nesco писал(а):
Если такого маразма во вложенных элементах нет (???)

Именно такая маразма присутствует в примере с которого снято видео. Однако проблема с прорисовкой, весьма не редко, встречается на формах с единственной вложенной панелью типа ChildPanel и при условии что нет никаких изменений размеров. Запустил программу, а одного элемента на форме нет. В место него белый прямоугольник, или кракозябра из вертикальных\горизонтальных полосок.

Редактировалось 3 раз(а), последний 2019-06-30 19:40:04
карма: 1

0
Разработчик
Ответов: 25469
Рейтинг: 2071
#13: 2019-06-30 18:48:28 ЛС | профиль | цитата
fox-video писал(а):
Именно такая маразма присутствует в примере с которого снято видео

Это немного другое.
fox-video писал(а):
а одно элемента на форме нет

Это иногда бывает при включенной прозрачности. Еще бывает при большом количестве визуальных компонентов.
карма: 19

0
Ответов: 82
Рейтинг: 3
#14: 2019-06-30 19:14:30 ЛС | профиль | цитата
nesco писал(а):
Это иногда бывает при включенной прозрачности. Еще бывает при большом количестве визуальных компонентов.

Увы, без прозрачности и с малым количеством визуальных компонентов.
Пример с небольшой формой

--- Добавлено в 2019-06-30 19:33:01

Похоже я наврал. Картинка на форме отрисовывается с прозрачностью.
>

Редактировалось 2 раз(а), последний 2019-06-30 19:35:02
карма: 1

0
Разработчик
Ответов: 25469
Рейтинг: 2071
#15: 2019-06-30 21:52:20 ЛС | профиль | цитата
fox-video писал(а):
Картинка на форме отрисовывается с прозрачностью.

Это не та прозрачность. Я имел в виду включенную прозрачность у визуальных контролов, таких как Label или CheckBox
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)