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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование нескольких иконок подряд, в VirtualStringTree 
:(
    Опции темы
Pavelbej
Дата 1.12.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте!

В Windows Media Player 10 каждому трэку можно задать рейтинг в виде звездочек (их пять в отдельной колонке). 
Хотел спросить как это делается, можно ли это сделать в VirtualStringTree?  Как отобразить необходимое количество иконок (от 0 до бесконечности) в нужной колонке?

Спасибо!
PM MAIL   Вверх
Alix
Дата 1.12.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

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



Либо иметь по 6 иконок на все случаи (от 0 звезд до 5), либо отрисовывать элементы самостоятельно. Для этого надо использовать TVirtualDrawTree.OnItemDraw.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Pavelbej
Дата 2.12.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



К сожалению, использовать могу только VirtualStringTree. В нем никак не получится? 
Одну иконку я отрисовываю в AfterCellPaint, а вот больше - не знаю как.
PM MAIL   Вверх
Alix
Дата 2.12.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

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



Если не сложно, поясните, пожалуйста, необходимость использования именно StringTree. 
Цитата
Одну иконку я отрисовываю в AfterCellPaint, а вот больше - не знаю как. 
Ну так я же предложил вариант (со звездочками) - заводим 6 иконок на которых нарисовано 5 звезд от полностью пустых, до полных. Если нужно отрисовывать несколько иконок, то, если их количество мало, можно сделать картинок по числу различных сочетаний иконок. Но вообще-то это изврат  smile 


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Pavelbej
Дата 2.12.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Alix @  2.12.2008,  14:24 Найти цитируемый пост)
Если не сложно, поясните, пожалуйста, необходимость использования именно StringTree. 

Так как программой уже давно пользуются. Готовлю новую версию, вот и необходимо дополнить новыми функциями.

Со звездочками вроде понятно, но мне неоходим и другой вариант. А смысл в том что:
Необходимо для каждого узла реализовать поддержку тегов. Например имеем теги "Бизнес", "Игры", "Видео". Это стандартные теги, и каждому присвоена соответсвующяя иконка (монета - "Бизнес", джойстик - "Игры" ...). Так вот, каждому узлу (это адреса сайтов) можно задать по нескольку иконок. Ведь есть сайты где есть и музыка и игры и видео. 
Таким образом для Винграда (http://forum.vingrad.ru) я пишу - "Программирование", "Delphi" ... 
А теперь для этого узла хочу отобразить теги как в текстовом виде так и иконками (соответствующие этим тегам). Текст может быть длинным и не вместится в ширину колонки, а вот по иконкам сразу будет понятно что есть на сайте.
Просто хочу получить примерно такой результат как размешены эти смайлики:
 smile  smile  smile  smile 
PM MAIL   Вверх
Alix
Дата 2.12.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

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



Ну я это сделал примерно так (на аццкий код внимания не обращаем  smile )
Код
  TTags = (tgProgramming, tgGames, tgBusinness);

  TItemProperties = record
    url : string;
    itemTags : array of TTags; // не set of
  end;

var
  Form1: TForm1;
  Sites: array of TItemProperties; // намеренно не хочу хранить инфу в VT node data

implementation

{$R *.dfm}

// процедура добавления элемента, просто для наглядности
procedure TForm1.Button1Click(Sender: TObject);
var
  len  : integer;
  i    : integer;

begin
  len := length(Sites);
  SetLength(sites, len + 1);

  with sites[len] do begin
    url := edit1.text;
    for i := 0 to CheckListBox1.Items.Count - 1 do
      if CheckListBox1.Checked[i] then
      begin
        len := length(itemTags);
        SetLength(itemTags, len + 1);
        itemTags[len] := TTags(i);
      end;
  end;

  VirtualStringTree1.AddChild(nil);
end;

// отрисовка
procedure TForm1.VirtualStringTree1BeforeCellPaint(
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect;
  var ContentRect: TRect);
var
  leftIndent : integer;
  NodeData   : TItemProperties;
  i : integer;

begin
  with TargetCanvas, TVirtualStringTree(Sender) do
  begin
    leftIndent := CellRect.Left + Indent + Margin;
    NodeData := sites[Sender.AbsoluteIndex(node)];

    for i := 0 to length(NodeData.itemTags) - 1 do
      ImageList1.Draw(targetcanvas, leftIndent + (16 + 2) * i, CellRect.Top + margin div 2, Ord(NodeData.itemTags[i])); 

    Font.Color := clBlack;
    TextOut(leftIndent + (16 + 2) * i, CellRect.Top + Margin div 2, sites[Sender.AbsoluteIndex(node)].url);
  end;
end;

// а вот тут специально ничего не возвращаем
procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
begin
  CellText := '';
end;
По сути получается функционал VirtualDrawTree. Подумайте, может и правда заменить компонент? Ведь не так это и сложно. В аттаче пример целиком.

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  VStringTree_icons.rar 2,14 Kb


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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