Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VirtualStringTree Автомасшабирование ширины, столбцов 
:(
    Опции темы
DASTAD
Дата 26.11.2010, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.10.2009

Репутация: 1
Всего: 1



Прошу помощи с компонентом VirtualStringTree

Нужно сделать подгонку ширины столбцов под самый длинный текст ячейки в столбце smile

Для этого сделал массив в котором храню ширины столбцов


Код

...
 на форме
  VST1: TVirtualStringTree;
...
var 
  VSTColWidth = array of integer; // массив значений ширина i-го столбца
  VSTColCount: integer; //количество столбцов в VST1

  VSTRec: PVSTData; 


в событии формы OnCreate инициализирую массив длинами текста в заголовках столбцов VST1

Код

VSTColCount:=VST1.Header.Columns.Count;
SetLength(VSTColWidth, VSTColCount);
for i:=0 to VSTColCount-1 do VSTColWidth[i]:=VST1.Canvas.TextWidth(VST1.Header.Columns[i].Text);


в событии VST1 OnGetText, по мере вывода на экран заношу в массив длины текста ячейки
и меняю ширину столбца
Код

VSTRec := Sender.GetNode(Data)
if Assign(VSTRec) then
begin
  ...
  VSTColWidth[Column]  := max (VSTColWidth[Column] ,  VST1.Canvas.TextWidth(CellText) );
  VST1.Header.Columns[Column].Width := VSTColWidth[Column];
end;


Столбцы в VST1 формирую через меню на этапе разработки - 11 столбцов - и далее в программе их количество не меняю
После формирования дерева его полностью разворачиваю
VST1.FullExpand;
Проблема в следущем:
при сворачивании-разворачивании узлов дерева 
в строке   VST1.Header.Columns[Column].Width := VSTColWidth[Column];  иногда прога вылетает с исключением EListError "Index out of Bounds(-1)"
а размер массива изменяется с 11 до 37 smile

Что можно сделать в моей ситуации
или может есть способ автомасшибирования получше
Заранее благодарен ;)

Это сообщение отредактировал(а) DASTAD - 26.11.2010, 09:06
PM MAIL   Вверх
Matrex
Дата 26.11.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 31.1.2006

Репутация: нет
Всего: 2



У меня было нечто подобное в CompareNodes, вопрос решил просто:
Код

if Column=-1 then exit;

PM MAIL   Вверх
AnalogXP
Дата 26.11.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



DASTAD, сейчас у меня такая же задача. Но я использую (VirtualDrawTree - хотя это может быть не важно) и событие onHeaderDblClick. В событии прохожу по узлам текущей колонки определяю более длинный текст, выставляя его ширину ширине колонки. Но к сожалению срабатывает и событие onHeaderClick по которому идет сортировка. 
PM MAIL   Вверх
DASTAD
Дата 29.11.2010, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 14.10.2009

Репутация: 1
Всего: 1



Цитата(Matrex @ 26.11.2010,  17:21)
У меня было нечто подобное в CompareNodes, вопрос решил просто:
Код

if Column=-1 then exit;

Походу помогло smile

добавил условие
Код

  if (Column>=0) and (Column<=VSTColCount-1) then
  begin
     VSTColWidth[Column]  := max (VSTColWidth[Column] ,  VST1.Canvas.TextWidth(CellText) );
     VST1.Header.Columns[Column].Width := VSTColWidth[Column];
  end;


хотя делал в этом событии  вывод в Мемо значений Column - ни разу он за границы 0-10 не выходил smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.