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

Поворот устройства и listView


walexw

Вопрос

Приложение на rad studio 10 seattle

listView заполняю "руками", это значения из таблицы SQLite
Если значение поля Close = true (закрытая запись), перекрашиваю detail в красный цвет (по умолчанию синий)
и меняю на кнопке на надпись "закрыта" (по умолчанию "ред.")
При запуске устройства все отлично, но стоит повернуть, ориентация меняется и красное становится синим и все кнопки
одинаково подписаны, как по дефолту.
При старте тоже так бывает, если сразу держать устройство в портретном варианте.
Поворот устройства ловит процедура, которая гасит мемо поле справа, если "портрет".
Как мне исправить ситуацию?

Спасибо.

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

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

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

стоит наверное при OnUpdateObjects проверять состояние ваших данных и красить снова

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

Нет. Данные закачиваются (и раскрашиваются) 1 раз, при открытии приложения.
OnUpdateObjects у listView пустой, не задействован.
Поворот устройства отслеживаю через OnResize главной формы, там разрешаю
или запрещаю видимость мемо-поля, в зависимости от ориентации.
Если запущена программа в ландшафтной ориентации - все ОК.
Стоит перевернуть в "портрет", надписи на кнопках все становятся по дефолту
и окраска детейлов тоже. Возврат устройства в "ландшафт" обратно, правильное
оформление не возвращает. Но что интересно, у "закрытых" кнопок я в алгоритме
блокирую доступ к процедуре редактирования и эта проверка остается работать
правильно, т.е. косяк только в отрисовке на экране.

Ссылка на комментарий
  • 0
В ‎23‎.‎05‎.‎2016 в 17:57, ZuBy сказал:

стоит наверное при OnUpdateObjects проверять состояние ваших данных и красить снова

Похоже вы правы. С цветом детейла я разобрался, UpdateObjects помогает. Но вот в чем новая заковыка. Но могу обратиться к TextButton
void __fastcall TfrMain::ListViewUpdateObjects(TObject * const Sender, TListViewItem * const AItem)
{
 TListViewItem::TListViewItemObjects * _objects = (const_cast<TListViewItem*>(AItem))->Objects;
 _objects->TextButton->Text = "test";
}
В последней строке для примера просто хочу заменить надпись на "test".
При выполнении получаю: Access violation at address...
Похоже на момент отработки UpdateObjects кнопки еще нет. Как поступить в этой ситуации?

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

проверьте на существование _objects

Проверил. _objects есть NULL Теперь ошибка пропала, НО теперь первый раз ListView открывается по дефолту и только второй и последующие разы делает надпись на кнопке как мне надо.
Не могу понять в чем фокус? Как сразу отрыть ListView с нужными значениями? Может есть способ как-то перепрочесть?

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...