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

Как получить значение свойства объекта стиля, используя StylesData?


Brovin Yaroslav

Вопрос

  • Администраторы

Выделение вопроса от Nixon в отдельную тему,

 

В общем, я пытаюсь на основании этой статьи, сделать автоматический пересчет высоты объекта, в зависимости от содержания с учетом изображений и т.д. Для этого мне необходимо получить ширину и высоту конкретного текстового элемента в стиле.

 

Как бы это не звучало странно, но 

ListBoxItem.StylesData['text.width'].asInteger

постоянно возвращает нуль. Естественно пытаюсь получить размеры после того, как ListBoxItem создан и размещен на родителе. И

ListBoxItem.StylesData['text.text'].asString

не возвращает текст. 

Это может быть связано с тем что text это TActiveStyleTextObject RAD Studio XE6

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

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

  • 0
  • Администраторы

Нужно помнить, что StylesData при запросе значения свойства какого-либо объекта стиля всегда возвращает TValue.

Поэтому например в вашем случае вы допускаете сразу две ошибки по одной в каждом варианте:

 

Ошибка 1

Не правильно:

ListBoxItem.StylesData['text.width'].asInteger

Свойство Width вещественного типа, поэтому при попытке конвертировать TValue в Integer этим способом приведет к ошибке "Invalid class typecast", так как представления вещественного и целого чисел отличаются.

 

Правильно:

ListBoxItem.StylesData['text.width'].AsExtended

Ошибка 2

Не правильно:

ListBoxItem.StylesData['text.text'].asString

В этом случае вы пытаетесь представить содержимое TValue, как строка. Но при таком обращении через методы, начинающиеся с приставки "As", идет попытка конвертации чистого значения вещественного числа (указатель в памяти) в строку. Естественно, что такая конвертация пройдет не правильно и закончится все той же ошибкой "Invalid class typecast"

 

Правильно:

ListBoxItem.StylesData['text.text'].ToString
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...