-
Постов
203 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Весь контент HyperZen
-
В этом месте можно чуть-чуть подробнее? На сколько контент больше по размеру относительно компонента? Добавив в расчеты 30 пикселей к текущему результату, получил то, что хотел. Но эти 30 пикселей были найдены путем подбора, хотелось бы как то математически обосновать эти цифры: h := GetTextHeight(AItem.Text, ListView1.Width-16, ListView1.ItemAppearanceObjects.ItemObjects.Text.Font, TTextAlign.Leading); AItem.Height := Trunc(h) + 30; И какой максимальный текст можно вместить в итем ListView?
-
А в данном случае что необходимо передавать в качестве AMaxWidth? При передаче width текущего ListView картина наблюдается та же, что и на скриншоте выше. При вычитании из размера ListView 7 или 16 пикселей, как писал ZuBy, все равно картина остается той же... procedure TForm12.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var h: Single; begin h := GetTextHeight(AItem.Text, ListView1.Width - 16, ListView1.ItemAppearanceObjects.ItemObjects.Text.Font, TTextAlign.Leading); AItem.Height := Trunc(h); end;
-
Добрый вечер! Все-таки, как корректно подсчитывать высоту итемов данного компонента, если учитывать, что текст может быть достаточно большим. Использую код с данного сайта, все работает корректно, пока не встречается текст, чуть больше одного абзаца: function TextHeight(const AText: string; aTextSettings: TTextSettings; const MaxWidth: Single): Single; // uses FMX.Graphics, FMX.TextLayout, FMX.Types, Math var Layout: TTextLayout; aRect: TRectF; aWW: Boolean; begin Result := 24; if AText.IsEmpty then Exit; aWW := Pos(#13#10, AText) > 0; if (aTextSettings.WordWrap) or (aWW) then aRect := RectF(0, 0, MaxWidth, MaxSingle) else aRect := RectF(0, 0, MaxSingle, MaxSingle); Layout := TTextLayoutManager.DefaultTextLayout.Create; try Layout.BeginUpdate; Layout.TopLeft := aRect.TopLeft; Layout.MaxSize := PointF(aRect.Width, aRect.Height); Layout.Text := AText; Layout.WordWrap := aTextSettings.WordWrap; Layout.HorizontalAlign := TTextAlign.Leading; Layout.VerticalAlign := TTextAlign.Leading; Layout.Font.Assign(aTextSettings.Font); Layout.Color := aTextSettings.FontColor; Layout.RightToLeft := false; Layout.EndUpdate; aRect := Layout.TextRect; finally FreeAndNil(Layout); end; Result := aRect.Bottom; end; И вызов в onUpdateObject: procedure TForm12.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var TS: TTextSettings; begin TS := TTextSettings.Create(nil); // задаем параметры текста для расчета "Text" TS.WordWrap:= True; TS.Font.Assign(ListView1.ItemAppearanceObjects.ItemObjects.Text.Font); AItem.Height := Trunc(TextHeight(AItem.Text, TS, ListView1.Width)); FreeAndNil(TS); end; Получаем:
-
Хмм... так хинты высвечиваются только при использовании обычного VCL А причём тут VCL? Если создать простой проект VCL Form Application, все работает и со свойством формы BorderStyle = None, хинты высвечиваются, все корректно. А если создать кроссплатформенный проект - хинты с этим свойством не работают.
- 28 ответов
-
- Hint
- BorderStyle
-
(и ещё 2 )
C тегом:
-
Хмм... так хинты высвечиваются только при использовании обычного VCL
- 28 ответов
-
- Hint
- BorderStyle
-
(и ещё 2 )
C тегом:
-
Вот проект Multi-Device-Application
- 28 ответов
-
- Hint
- BorderStyle
-
(и ещё 2 )
C тегом:
-
Delphi Seattle Update 1
- 28 ответов
-
- Hint
- BorderStyle
-
(и ещё 2 )
C тегом:
-
я так понял он только для update 1? А поделиться этим хотфиксом можете? Если у тебя нет подписки, то этот хотфикс ты не сможешь установить. Не берусь гадать, но может заблокировать студию. Все хотфиксы установлены и чудненько работают Спасибо братьям китайцам
-
Данный "костыль" не помог в случае Popover Решил проблему, изменив свойство на Drawer
-
Но как то же его можно победить Взять, к примеру, ES проводник, там вверху справа есть меню, с выпадающим (Popover) MultiView, после выбора любого пункта меню, выделение сбрасывается
-
Теперь я спокоен, если Вам это тоже удалось воспроизвести
-
Нашел косяк (если это косяк - может быть это нормальное поведение): в режиме Drawer работает и выделение итема снимается, в режиме Popover выделение не снимается вообще никак.
-
PS: Delphi Seattle Update 1
-
Ничего не понимаю, создал новый проект, бросил на форму TMultiView, на него TListBox, создал 5-6 Итемов, и код: procedure TForm1.lst1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin case lst1.ItemIndex of 0: ShowMessage('a'); 1: ShowMessage('b'); 2: ShowMessage('c'); 3: ShowMessage('d'); end; Item.IsSelected := False; mv1.HideMaster; end; Все работает Почему в старом проекте наблюдаются такие "глюки"?
-
Удивительно, так тоже не работает! Выделение итема все равно остается...
-
Ни на платформе Windows, ни на Android не работает Вот скриншоты, сделанные по шагам в винде, на Андроиде то же самое.
-
Case работает, выделение итема не снимается. Сейчас взял пример из студии (MultiViewDemo) - там оказывается та же проблема... выделение не пропадает...
-
Не помогает, странно...
-
Не могу понять почему так происходит: при клике/тапе по TListBoxItem пишу строку, чтобы снять выделение итема: Item.IsSelected := False; // в примере студии работает Теперь в своей программе: procedure TfrmMain.TListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin case TListBox1.ItemIndex of 0: begin // действие 1 end; 1: begin // действие 2 end; 2: begin // действие 3 end; end; Item.IsSelected := False; MultiView1.HideMaster; end; - выделение нажатого итема не снимается. Почему?