2013-09-03 3 views
3

Мой друг работает в Delphi с VirtualTreeView и имеет следующую проблему: У него есть два столбца с данными и дочерними элементами для каждой строки в первом столбце. Возможно ли изменение ширины первого столбца для установки максимальной ширины столбца для детей? taskVirtualTreeView. Как изменить ширину дочернего столбца?

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

Благодаря

ответ

2

Это называется столбец порождающий и да, это можно сделать довольно легко - просто установите параметр TreeOptions -> AutoOptions -> toAutoSpanColumns в True. Способ, которым он работает, заключается в том, что если соседний столбец пуст, заголовок текущего будет расширен. Как вы только хотите работать для детей колонок вы должны реализовать OnGetCellIsEmpty событие и возвращать IsEmpty := True только для дочерних узлов, то есть что-то вроде

procedure TForm1.VT_GetCellIsEmpty(Sender: TBaseVirtualTree; 
      Node: PVirtualNode; Column: TColumnIndex; var IsEmpty: Boolean); 
begin 
    IsEmpty := (Sender.GetNodeLevel(Node) > 0); 
end; 
+0

Параметр 'toAutoSpanColumns', кажется, предназначены для этой цели (не знал об этом), но в моем быстром испытании (Delphi 2009, VT 5.1.0) следующая колонка по-прежнему охватывает предыдущую (без учета собственной пустоты). – TLama

+1

Это зависит от того, что действительно хочет OP ... мой ipression заключается в том, что он нуждается в заголовке дочернего столбца, чтобы он был полностью читаемым, а не отрезанным до конца столбца. Для этого 'toAutoSpanColumns' должен ... – ain

+1

Да, я получил то же самое, но это не сработало для меня. Я сделал то, что вы описали, но второй столбец по-прежнему охватывал все (под) узлы. Я забыл добавить, что все, что я изменил, я сделал заголовок видимым с 2 столбцами. Остальные настройки (кроме 'toAutoSpanColumns') я сохранил по умолчанию. – TLama

Смежные вопросы