2012-05-29 3 views
3

Что вы можете сделать, если хотите, чтобы различные элементы управления ячейками в одном столбце сетки в FireMonkey. Элемент управления ячейки, по-видимому, принадлежит столбцу, но есть ситуации (например, редактор свойств), где некоторым строкам нужен флажок, тогда как другим строкам нужен combobox или элемент управления редактирования.Сетка FireMonkey с различными элементами управления в том же столбце

Заранее спасибо.

ответ

2

Arnaud уже связан с моей статьей в своем ответе. Статья посвящена основам сеток, столбцов и ячеек. Следующие шаги вы должны получить и работает:

  • Создать стиль, добавить к нему элементы управления, которые вы хотите показать (т.е. TCheckbox, а TComboBox и TEdit). Добавьте их в TLayout и установите для каждого элемента StyleName что-то незабываемое.
  • В ваших ячейках ApplyStyle использует FindStyleResource для извлечения элементов управления, добавленных выше, используя их имена StyleNames.
  • Когда сетка вызывает метод SetData вашей ячейки, вам нужно установить свойство Visible для каждого элемента управления, чтобы отобразился только соответствующий. Если вы не можете определить это из переданных данных, добавьте обработчик событий в ячейку, чтобы получить данные.
  • Вам нужно будет разобраться в обработке клавиатуры, которая становится довольно грязной. Если память используется, вам нужно передать ключи из сетки/ячейки в элемент управления (или или это клавиши перемещения ловушки от элементов управления и передать их в сетку? Извините, если я забуду точные детали).

Извините, но я не могу дать более подробный ответ, но для полного заполнения этой статьи потребуется целый ряд сообщений в блогах.

5

Вы найдете решение в this article, я думаю.

Sample custom grid cell

Вы должны создать создать пользовательский класс клеток.

+1

+1 для namecheck. Я такой мелкий. –

1

Использовать стиль - установить стиль ячейки при настройке данных ячейки - тогда мы делаем событие onapplystyle, чтобы сделать что-нибудь умное, что вам нужно, с помощью новой стилизованной ячейки.

Таким образом вы можете добавить элементы управления, необходимые для стиля, а затем получить доступ к элементам управления (для установки событий и т. Д.) С помощью onapplystyle.

Подсказка - FindStyleResource ваш друг здесь :-)

1

Я также нуждался в редакторе свойств и искал способ размещения разных типов ячеек в одном столбце. Использование разных стилей для каждой строки может быть решением, предложенным выше, но поскольку сетка Firemonkey не резервирует никакого управления ячейкой для определенной строки, каждый раз, когда элемент управления ячейки будет отображаться в строке, к нему будет применен истинный стиль. Это не является большой проблемой для редактора статических свойств, однако для реальной сетки, у которой есть строки и разные типы ячеек в каждой строке, требуется другая стратегия. Поэтому я придумал другое решение, я рассмотрел прокси-серверы типа ячеек между TColumn и элементами управления ячейками, так что каждый прокси-сервер ячейки зарезервирует элементы управления ячейки, за которые отвечает. Прежде всего, у меня есть новый TColumn (TvariantColumn), который отвечает за верхнюю стратегию.

vColumn := TVariantColumn.Create(Self); 
vColumn.Header := 'Variant Column'; 
vColumn.OnGetCellProxyIndex := GetCellProxyIndex; 
Grid1.AddObject(vColumn); 

Затем создавать прокси как

vColumn.NewCellProxy(TTextProxy); 
vColumn.NewCellProxy(TColorComboProxy); 
vColumn.NewCellProxy(TComboColorProxy); 

Вы также можете обрабатывать прокси конкретные задания после ее создания, как

with TProgressProxy(vColumn.NewCellProxy(TProgressProxy)) do //4 
begin 
    Min := 0; 
    Max := 100; 
end; 

with TPopUpProxy(vColumn.NewCellProxy(TPopupProxy)) do //5 
begin 
    Items.Add('Istanbul'); 
    Items.Add('Paris'); 
    Items.Add('NewYork'); 
end; 

Я блоге мой метод в моем веб-сайте и опубликовал подробно article, где вы можете найти более подробную информацию о предмете.