Как использовать разные стили шрифтов и значки в ячейке строковой сетки Firemonkey

Похоже, что информации по этой теме не так много, поэтому, надеюсь, кто-нибудь сможет дать несколько предложений.

Я хочу изменить цвет и стиль разных частей текста в ячейке сетки.

Пример: 20.02.2011 - Название документа

Можно ли также отобразить значок в ячейке строковой сетки?


person Mike    schedule 06.03.2012    source источник
comment
В одной камере? Если это так, я ожидаю, что вам нужно будет использовать TGrid, а затем создать настраиваемую ячейку / столбец, который имеет два компонента TText, по одному с каждым стилем шрифта (но обратите внимание, что я обнаружил проблемы с установкой шрифта в стиле). См. Мою статью о пользовательских ячейках сетки: monkeystyler.com/ блог / запись /   -  person Mike Sutton    schedule 06.03.2012


Ответы (1)


Действительно, можно отображать значки или растровые изображения в сетке строк, в блоге Monkey Styler есть пример того, как настроить отображение ячеек в сетке FMX.

http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns

Однако, думая о другой части вашего вопроса, вам придется создать стиль для отображения текста в разных шрифтах, поскольку FMX еще не имеет эквивалента Richtext или компонентов рендеринга HTML (я уверен, что последний появится, первый Я не уверен, что получу какое-то время!). У вас должен быть текстовый компонент в стиле для каждого размера / стиля шрифта и т. Д., Вам нужно будет назвать текстовые элементы (используя свойства привязки или имени стиля) и обработать настройку текстового содержимого, используя код в ongetvalue и onsetvalue события (я думаю, вы также можете использовать событие onapplystyle), чтобы отображать часть текста жирным шрифтом, а часть - нет.

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

mycell.binding['boldtext']:='sometext';

Или найдите элемент стиля по имени стиля с помощью findstyleresource;

tempobj:=mycell.findstyleresource('boldtext');
if tempobj is ttext then
  ttext(tempobj).text='sometext';

Извините за плохой стиль кодирования, но вы получите общую идею (я надеюсь), если установите для autosize значение true для компонентов ttext в стиле и выровняете их по левому краю, вы получите - в основном - то, что вам нужно. Единственная проблема заключается в том, что результирующий текст выглядит не совсем гладко, потому что автоматическое изменение размера и выравнивание по левому краю на самом деле не дает вам такого же пространства между шрифтами, которое вы получили бы при отображении Richtext или HTML. Вы должны иметь возможность возиться с отступом (присвоение ему отрицательного числа для левого отступа должно позволить вам удалить любое лишнее пространство), но вы должны жить с тем, что это не совсем идеально по сравнению с правильным хинтингом и выравниванием шрифта.

person Paul Foster    schedule 13.03.2012
comment
Пол, моя статья относится к TGrid, а не к TStringGrid. Я никогда не использовал сетку строк в FMX, поэтому не могу комментировать, будет она работать или нет. - person Mike Sutton; 18.03.2012
comment
Я использовал это только как пример того, что на самом деле вы можете заставить два компонента работать в ячейке; не то, чтобы он действительно работал в компоненте stringgrid (не то, чтобы я его использовал, я бы тоже использовал сетку) - person Paul Foster; 20.03.2012