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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Virtual Treeview 
:(
    Опции темы
Caduser
Дата 3.10.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 2.10.2006
Где: г. Хабаровск

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



Отличный компонент TVirtualStringTree, часто его использую. Возникла необходимость "нарисовать" не стандартное дерево:
- у каждого узла этого дерева может быть не одна иконка, а несколько (от 1 до 3-х). Дополнительные иконки рисую в AfterItemPaint:

Код

// рисуем дополнительные иконки узла
procedure TForm1.VSTAfterItemPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
var
  R: TRect;
  BitMap1, BitMap2 : TBitMap;
  Data: pNodeData;
begin
  Data  := Sender.GetNodeData(Node);

  R := ItemRect;
  with TargetCanvas do
   begin
      BitMap1 := TBitMap.Create;
      BitMap2 := TBitMap.Create;
      try
        Inc( R.Left, VST.Indent+16 + (Sender.GetNodeLevel(Node) * VST.Indent) );
        ImageList1.GetBitmap(Data.IconIndex1, BitMap1);
        ImageList2.GetBitmap(Data.IconIndex2, BitMap2);
        Draw(R.Left+1, R.Top, BitMap1);
        Draw(R.Left+16+2, R.Top, BitMap2);
      finally
        BitMap1.Free;
        BitMap2.Free;
      end;
    end;
end;

// текст узла
procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  Data: pNodeData;
begin
  Data  := Sender.GetNodeData(Node);
  CellText := Data.Text;
end;

иконки рисуются нормально, но текст вместе с выделением оказывается под этими иконками, т.е. необходимо как то смещать текст вправо, на расстояние которое зависит от числа иконок в узле. 
Прошу помощи, в решении этой задачки!



Это сообщение отредактировал(а) Caduser - 3.10.2006, 01:30

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  __________1.gif 2,35 Kb
PM MAIL ICQ   Вверх
artem1987
Дата 3.10.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



добавляй пустые иконки там (AxB)где они не нужны
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Caduser
Дата 4.10.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 2.10.2006
Где: г. Хабаровск

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



Цитата(artem1987 @ 3.10.2006,  14:43)
добавляй пустые иконки там (AxB)где они не нужны

пустые иконки нигде не нужны, соответственно добавлять их тоже никуда не нужно  smile  . 
Основной вопрос "Как смещать текст узла вправо?" или по другому "Как построить дерево представленное во вложении 1.gif ?" (используя TVirtualStringTree).

Это сообщение отредактировал(а) Caduser - 4.10.2006, 00:24
PM MAIL ICQ   Вверх
artem1987
Дата 4.10.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я понял, что ты имеешь ввиду, должен быть параметр margin
просто если ты вставишь второй иконку на которой ничего нет то визуально текст узла сдвинется вправо...
--------------------
Don't ask me why, ask me how.
PM MAIL   Вверх
Caduser
Дата 5.10.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 2.10.2006
Где: г. Хабаровск

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



Цитата(artem1987 @ 4.10.2006,  11:51)
я понял, что ты имеешь ввиду, должен быть параметр margin

такой параметр есть - TextMargin, однако он работает не корректно, т.к. при этом выделение узла попадает под тополнительные иконки, появляется лишний "хвост" выделения, и самое главное - нельзя задать свой TextMargin для каждого узла.

Цитата(artem1987 @ 4.10.2006,  11:51)

просто если ты вставишь второй иконку на которой ничего нет то визуально текст узла сдвинется вправо...

В том то и проблема что текст самостоятельно не сдвинется вправо, его нужно как-то сдвинуть. Или может я не так вставляю дополнительные иконки?
Во вложении пример. Вопрос открыт.


Это сообщение отредактировал(а) Caduser - 5.10.2006, 01:11

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  TestVST.rar 7,68 Kb
PM MAIL ICQ   Вверх
Caduser
Дата 6.10.2006, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 2.10.2006
Где: г. Хабаровск

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



Попробовал решить проблему в TVirtualDrawTree, хотя смещать текст для каждого узла удалось, но выделение узла перекрывает дополнительные иконки, т.е. как и в TVirtualStringTree - выделение узла не смещается вправо вместе с текстом.
Во вложении пример с TVirtualDrawTree и TVirtualStringTree. 

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  TestVDT.rar 8,87 Kb
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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