Перейти к содержанию
Fire Monkey от А до Я
  • 0

Проблемы с отрисовкой элементов формы


Dmitry Sobko

Вопрос

Добрый день, уважаемые знатоки!

Столкнулся с такой проблемой:

На форме у меня расположены компоненты TLayout, которые являются экранами приложения http://joxi.ru/n2Y8OaaTK41Rm6

e682906157.jpg

По умолчанию все они у меня имеют значение свойства Visible := False. В зависимости от того, какой экран показать я скрываю текущий Visible := False и показываю нужный Visible := True. Если есть другое, более правильное решение, то пожалуйста скажите как нужно делать. Я основывался на примерах из папки Samples.

На одном из экранов у меня происходит поиск Bluetooth устройств и найденные добавляются в ComboBox. Пока идет поиск я одновременно показываю Layout с прозрачностью 100%, в котором у меня крутится AniIndicator. Этот самый Layout нужен для того, чтобы пользователь никуда не ткнул, пока идет поиск. Изначально была идея затемнять все элементы, т.е. я делал прозрачность Layout'а 50%.

Так вот, у меня, после того как все устройства найдены и добавлены в ComboBox, Layout с AniIndicator'ом скрывается, и почти через раз появляются глюки по отрисовке как элементов формы, так и самой формы.

Вот так экран выглядит до поиска устройств - http://joxi.ru/v29QNPPHb9ba2G

Спойлер

v29QNPPHb9ba2G.jpg

Вот так экран выглядит, когда показан Layout с AniIndicator'ом - http://joxi.ru/GrqMyXXTMVMqrz

Спойлер

GrqMyXXTMVMqrz.jpg

 

Вот такие баги случаются, после того когда я скрываю Layout с AniIndicator'ом:

1) http://joxi.ru/zAN0kYYHqXWgm9

Спойлер

zAN0kYYHqXWgm9.jpg

2) http://joxi.ru/v29QNPPHb9va2G

Спойлер

v29QNPPHb9va2G.jpg

3) http://joxi.ru/DmBXxLLco5DVAP

Спойлер

DmBXxLLco5DVAP.jpg

4) http://joxi.ru/Vm6ydxxhn1JVrZ

Спойлер

Vm6ydxxhn1JVrZ.jpg

5) http://joxi.ru/DrlapooU15BZmP

Спойлер

DrlapooU15BZmP.jpg

6) http://joxi.ru/eAOqDYYSgQWKmo

Спойлер

eAOqDYYSgQWKmo.jpg

7) http://joxi.ru/4Ak3Goos4baJAq

Спойлер

4Ak3Goos4baJAq.jpg

8) Бывает даже приложение вылетает.

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

Спасибо!

     

 

 

Изменено пользователем Andrey Efimov
Картинки и исходные файлы - заливаем на форум!
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

по организации приложения:

чтобы не путаться в коде и не умещать все на одной форме, можно воспользоваться фреймами и/или формами

на счёт TAniIndicator, используйте TfgActivityDialog из пакета FGX

Ссылка на комментарий
  • 0
8 минут назад, ZuBy сказал:

по организации приложения:

чтобы не путаться в коде и не умещать все на одной форме, можно воспользоваться фреймами и/или формами

на счёт TAniIndicator, используйте TfgActivityDialog из пакета FGX

Спасибо, буду пробовать! А по багам есть идеи, почему такое может быть? У меня не только в этом Layout'е такая проблема. Есть еще Layout, где в зависимости от ситуации отображается одна из двух картинок, которые через некоторое время работы приложения просто исчезают. Ошибок в коде точно нет.

Ссылка на комментарий
  • 1
  • Модераторы

раскидайте все ваши лейауты по разным фреймам и/или формам, и ваша проблема решится

Ссылка на комментарий
  • 0
39 минут назад, ZuBy сказал:

раскидайте все ваши лейауты по разным фреймам и/или формам, и ваша проблема решится

Спасибо за совет! Буду пробовать. Тему пока не закрывайте)

Ссылка на комментарий
  • 1
1 час назад, DimeDron сказал:

По умолчанию все они у меня имеют значение свойства Visible := False. В зависимости от того, какой экран показать я скрываю текущий Visible := False и показываю нужный Visible := True.

Попробуйте кроме Visible := True еще делать для Layout BringToFront.

Ссылка на комментарий
  • 0

Спасибо большое ZuBy и enatechno за ответы. Так как на текущий момент решение нужно было быстрое, я попробовал совет enatechno и все заработало! Но я уверен, что совет ZuBy тоже будет работать и обязательно позже так и сделаю. Действительно в коде будет проще ориентироваться.

Прошу прощения, не знаю Ваших имен.

Оба ответа лучшие. Но можно отметить только один. Отмечаю ответ enatechno, так как он сейчас у меня работает.

Еще раз всем спасибо большое!

Ссылка на комментарий
  • 1

правильное решение, конечно, с фреймами.

не забудьте, что их нужно создавать отдельно, вручную, в нужный момент

Ссылка на комментарий
  • 0
В 15.12.2016 в 12:18, krapotkin сказал:

правильное решение, конечно, с фреймами.

не забудьте, что их нужно создавать отдельно, вручную, в нужный момент

Добрался наконец до реализации своего проекта на фреймах.

Подскажите пожалуйста, что значит создавать фреймы каждый раз, в нужный момент? Точнее я понимаю, что Вы имеете ввиду, но пока не понятно как быть с другими компонентами, которые должны быть на этом фрейме. Правильно ли я понимаю, что все лэйблы, едиты ипрочее нужно тоже создавать вручную, динамически? Если так, то меня пугает такое решение) 

Подскажите пожалуйста, как делать правильно.

Спасибо! 

Ссылка на комментарий
  • 1
1 час назад, Dmitry Sobko сказал:

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

Не правльно. Вы проектируете фрейм как вам хочется: кидаете на него нужные компоненты, ставите нужные свойства - и т.д..  Когда нужно будет показать фрейм - делаете так:

FMyFrame: TMyFrame;
...
Begin
  FMyFrame := TMyFrame.Create(Родитель;);
  FMyFrame.Parent := Родитель;

Когда нужно скрыть его - пишешь FMyFrame.Free;

 

Ссылка на комментарий
  • 0
37 минут назад, rareMax сказал:

Не правльно. Вы проектируете фрейм как вам хочется: кидаете на него нужные компоненты, ставите нужные свойства - и т.д..  Когда нужно будет показать фрейм - делаете так:


FMyFrame: TMyFrame;
...
Begin
  FMyFrame := TMyFrame.Create(Родитель;);
  FMyFrame.Parent := Родитель;

Когда нужно скрыть его - пишешь FMyFrame.Free;

 

Попробую, спасибо! 

Прошу прощения за тупость, но на всякий случай спрошу, пока разбираюсь, можно более подробный пример? Ответы на форуме не так часто приходят, как хотелось бы в трудную минуту) Если не составит большого труда, может накидаете пример и приложить архив?

Спасибо!

Изменено пользователем Dmitry Sobko
Ссылка на комментарий
  • 1

когда нужен срочный ответ, пишите в телеграм-чат Fire-Monkey имени Равиля ZuBy

 

frame.7z

Изменено пользователем Равиль Зарипов (ZuBy)
Позволю себе отредактировать, т.к. это наш общий чатик
Ссылка на комментарий
  • 0
10 часов назад, krapotkin сказал:

когда нужен срочный ответ, пишите в телеграм-чат Fire-Monkey имени Равиля ZuBy

 

frame.7z

Огромное спасибо! Теперь все понятно, правда кроме одного момента, впервые встречаю вот такую конструкцию [Weak]fr:TFrame1; Что означают в данном случае квадратные скобки?

Ссылка на комментарий
  • 1

в мобильных системах идет подсчет ссылок на объект

если есть ссылки, он не уничтожается. получается на него будет ссылаться и форма как Owner, форма как Parent , и еще переменная fr

при уничтожении формы первые две ссылки будут уничтожены, а fr - нет, придется делать это руками, а лень)))

а если написать [WEAK] то эта ссылка в зачет не пойдет и все уничтожится само ))))

Изменено пользователем krapotkin
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...