antarey Опубликовано 5 октября, 2016 Поделиться Опубликовано 5 октября, 2016 Согласно мануалу реализовал код void TfrmMain::CalculateItemHeight(TObject *Sender) { TTextLayout* FTextLayout = TTextLayoutManager::TextLayoutForClass(TTextLayoutManager::DefaultTextLayout); TListBoxItem *ListItem = dynamic_cast<TListBoxItem*>(Sender); FTextLayout->BeginUpdate(); try { FTextLayout->Text = ListItem->Text; FTextLayout->MaxSize = TPointF(ListItem->Width, 1000); FTextLayout->WordWrap = ListItem->WordWrap; FTextLayout->Font = ListItem->Font; FTextLayout->HorizontalAlign = ListItem->TextAlign; FTextLayout->VerticalAlign = ListItem->VertTextAlign; } __finally { FTextLayout->EndUpdate(); } ListItem->Height = FTextLayout->Height; } Прописал события для итема, итемы создаю в рантайме, и ничего Как автоматически подгонять высоту итема под текст? Что я не так сделал? Цитата Ссылка на комментарий
0 Rusland Опубликовано 6 октября, 2016 Поделиться Опубликовано 6 октября, 2016 На какие событие item-а повесили обработчик CalculateItemHeight? Цитата Ссылка на комментарий
0 Yarpda Опубликовано 7 октября, 2016 Поделиться Опубликовано 7 октября, 2016 В 06.10.2016 в 00:14, antarey сказал: Согласно мануалу реализовал код void TfrmMain::CalculateItemHeight(TObject *Sender) { TTextLayout* FTextLayout = TTextLayoutManager::TextLayoutForClass(TTextLayoutManager::DefaultTextLayout); TListBoxItem *ListItem = dynamic_cast<TListBoxItem*>(Sender); FTextLayout->BeginUpdate(); try { FTextLayout->Text = ListItem->Text; FTextLayout->MaxSize = TPointF(ListItem->Width, 1000); FTextLayout->WordWrap = ListItem->WordWrap; FTextLayout->Font = ListItem->Font; FTextLayout->HorizontalAlign = ListItem->TextAlign; FTextLayout->VerticalAlign = ListItem->VertTextAlign; } __finally { FTextLayout->EndUpdate(); } ListItem->Height = FTextLayout->Height; } Прописал события для итема, итемы создаю в рантайме, и ничего Как автоматически подгонять высоту итема под текст? Что я не так сделал? Как мне кажется либо это событие не вызывается, либо Begin/end Update, лишние, потому как в этом режиме не весь код выполняется как обычно (практическое наблюдение) . А запускал расчет высоты прямо в момент создания итема. Так он гарантированно выполнится. И если если предполагается возможность поворота экрана то еще на событие OnScale (или OnResize, на память не помню). Цитата Ссылка на комментарий
0 Rusland Опубликовано 7 октября, 2016 Поделиться Опубликовано 7 октября, 2016 У меня используется такой код на Паскале (немного отличается от вашего): procedure TFrmMain.CalculateItemHeight(Sender: TObject); var ListItem: TListBoxItem; d: integer; begin if Sender is TListBoxItem then begin ListItem := Sender as TListBoxItem; FTextLayout.BeginUpdate; try // Инициализируем текстовый слой для корректного вычисления // размеров отображаемого текста FTextLayout.Font.Assign(ListItem.Font); FTextLayout.VerticalAlign := ListItem.VertTextAlign; FTextLayout.HorizontalAlign := ListItem.TextAlign; FTextLayout.WordWrap := ListItem.WordWrap; FTextLayout.MaxSize := TPointF.Create(ListItem.Width, TTextLayout.MaxLayoutSize.Y); FTextLayout.RightToLeft := false; FTextLayout.Text := ListItem.Text; finally FTextLayout.EndUpdate; end; d:=Round(FTextLayout.Height); try FTextLayout.Text:='m'; finally FTextLayout.EndUpdate; end; d:=d+Round(FTextLayout.Height); ListItem.Height:=d; end; end; Попробуйте поставить процедуру CalculateItemHeight на OnApplyStyleLookup Kitty 1 Цитата Ссылка на комментарий
0 antarey Опубликовано 8 октября, 2016 Автор Поделиться Опубликовано 8 октября, 2016 Поставил, и на ресайз тоже. Я вроде где-то читал/слышал что в 10 добавили изменение высоты итема в свойства но в упор не нахожу такого. 22 часа назад, Rusland сказал: try FTextLayout.Text:='m'; finally FTextLayout.EndUpdate; end; Зачем етот код? К сожалению не работает. У меня итем создается отдельной процедурой с пустым текстом. В другой процедуре прописывается текст. Цитата Ссылка на комментарий
0 antarey Опубликовано 8 октября, 2016 Автор Поделиться Опубликовано 8 октября, 2016 Переделал код. В принципе работает, только немного обрезается текст сверху и снизу.Rusland не знаю как в делфи - в си округлять не обязательно - свойство Height - float. Цитата Ссылка на комментарий
0 Rusland Опубликовано 8 октября, 2016 Поделиться Опубликовано 8 октября, 2016 10 часов назад, antarey сказал: Зачем етот код? Насколько помню, это код Ярослава, значит к нему вопрос ) Цитата Ссылка на комментарий
0 krapotkin Опубликовано 8 октября, 2016 Поделиться Опубликовано 8 октября, 2016 Ярослав ни при чем. Там вопрос заключается в том - а на какую ширину раскидывается Layout ? как ни странно в момент расчета Item.Width вообще 0 поэтому я беру в качестве width ListBox.Width минус не помню наизусть, что то типа ListBox.ItemMargins.Right , Left Цитата Ссылка на комментарий
0 antarey Опубликовано 8 октября, 2016 Автор Поделиться Опубликовано 8 октября, 2016 Ясно, всем спасибо Цитата Ссылка на комментарий
Вопрос
antarey
Согласно мануалу реализовал код
Прописал события для итема, итемы создаю в рантайме, и ничего
Как автоматически подгонять высоту итема под текст? Что я не так сделал?
Ссылка на комментарий
8 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.