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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с TreeView.StateIndex, ограничение на кол-во ImageList.Items 
:(
    Опции темы
Ji2m
Дата 28.9.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня вот такая проблема:

Есть TreeView1 и ImageList1.
В ImageList1 имеется 25 имейджов, а в TreeView1 имеется 12 нодов.

Для каждого нода 2 имейджов, один когда открытый, другой когда закрытый. (какойто глюк 0-ым имейджом, но это не проблема).

Но когда я присваеваю TreeView1.StateIndex-ы, после 16-го (то есть 15) загружается не тот имейдж например вместо 17-го загружается 1-й имейдж. Таким порядком 18-2, 19-3 ...

Кто нибудь знает как можно решить эту проблему. Заранее благодарен всем кто старается.

PS: ImageIndex не подходит, потому что я меняю имейдж только в DblClick;
PM MAIL   Вверх
Ji2m
Дата 28.9.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просмотрел все темы связанные с TreeView, видимо никто не столкнулся с такой проблемой.
В ФАКе тоже не нашел ничего.
Помогите люди добрые...
PM MAIL   Вверх
Alexeis
Дата 28.9.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Ji2m, ошибка в 17 строчке.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ji2m
Дата 28.9.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

procedure TForm1.Button2Click(Sender: TObject); // Здесь я создаю ветки
var
  MyNode: TTreeNode;
begin
  MyNode:=TreeView2.Items.AddFirst(nil, 'Все');
  MyNode.StateIndex:=1;
  MyNode:=TreeView2.Items.AddChild(MyNode, '2006');
  MyNode.StateIndex:=1;
  MyNode:=TreeView2.Items.AddChild(MyNode, 'Сентябрь');
  MyNode.StateIndex:=3;
  MyNode:=TreeView2.Items.AddChild(MyNode, 'Поступившие');
  MyNode.StateIndex:=5;
  MyNode:=TreeView2.Items.AddChild(MyNode, 'В ожидании');
  MyNode.StateIndex:=7;
  MyNode:=TreeView2.Items.Add(MyNode, 'Просмотренные');
  MyNode.StateIndex:=9;
  MyNode:=MyNode.Parent;
  MyNode:=TreeView2.Items.Add(MyNode, 'Пропущенные');
  MyNode.StateIndex:=11;
  MyNode:=TreeView2.Items.AddChild(MyNode, 'В ожидании');
  MyNode.StateIndex:=7;
  MyNode:=TreeView2.Items.Add(MyNode, 'Проведенные');
  MyNode.StateIndex:=13;
  MyNode:=TreeView2.Items.Add(MyNode, 'Отказанные от проводки');
  MyNode.StateIndex:=15;
  MyNode:=TreeView2.Items.Add(MyNode, 'Отвеченные'); 
  MyNode.StateIndex:=17;          // Оттуда начинается вся проблема
  MyNode:=MyNode.Parent;
  MyNode:=TreeView2.Items.Add(MyNode, 'Отказанные');
  MyNode.StateIndex:=19;
  MyNode:=TreeView2.Items.AddChild(MyNode, 'В ожидании');
  MyNode.StateIndex:=7;
  MyNode:=TreeView2.Items.Add(MyNode, 'Оператором');
  MyNode.StateIndex:=21;
  MyNode:=TreeView2.Items.Add(MyNode, 'От проводки');
  MyNode.StateIndex:=15;
  MyNode:=TreeView2.Items.Add(MyNode, 'Отвеченные');
  MyNode.StateIndex:=17;
  MyNode:=MyNode.Parent;
  MyNode:=TreeView2.Items.Add(MyNode, 'Избранные');
  MyNode.StateIndex:=23;
end;

procedure TForm1.TreeView2DblClick(Sender: TObject); // Здесь меняю картинку
var
  I: Integer;
  myParent: TTreeNode;
begin
  for I := 0 to TreeView2.Items.Count - 1 do    // Iterate
  begin
    if TreeView2.Selected.AbsoluteIndex=i then continue;
    if (not TreeView2.Items[i].HasChildren) and (not Odd(TreeView2.Items[i].StateIndex)) then TreeView2.Items[i].StateIndex:=TreeView2.Items[i].StateIndex-1;
  end;    // for
  if (not TreeView2.Selected.HasChildren) then
  if Odd(TreeView2.Selected.StateIndex) then TreeView2.Selected.StateIndex:=TreeView2.Selected.StateIndex+1 else TreeView2.Selected.StateIndex:=TreeView2.Selected.StateIndex-1;
end;

// Здесь тоже картинки меняются

procedure TForm1.TreeView2Collapsed(Sender: TObject; Node: TTreeNode);
begin
  Node.StateIndex:=Node.StateIndex-1;
end;

procedure TForm1.TreeView2Expanded(Sender: TObject; Node: TTreeNode);
begin
  Node.StateIndex:=Node.StateIndex+1;
end;


Добавлено @ 11:46 
У меня в имейджлисте картинки для каждой ветки. В нечетном "закрытый", а в четном "открытый".
PM MAIL   Вверх
dumb
Дата 28.9.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(MSDN)

A state image is displayed next to an item's icon to indicate an application-defined state. State images are contained in a state image list that is specified by sending a TVM_SETIMAGELIST message. To set an item's state image, include the TVIS_STATEIMAGEMASK value in the statemask member of the TVITEM structure. Bits 12 through 15 of the structure's state member specify the index in the state image list of the image to be drawn.

To set the state image index, use INDEXTOSTATEIMAGEMASK. This macro takes an index, and sets bits 12 through 15 appropriately. To indicate that the item has no state image, set the index to zero. This convention means that image zero in the state image list cannot be used as a state image. To isolate bits 12 through 15 of the state member, use the TVIS_STATEIMAGEMASK mask. For more information about overlay and state images, see Tree-View Image Lists.

4 бита у тебя на номер. посему от 0 до 15.

Добавлено @ 17:06 
причем 0, как видишь, уже заюзан для обозначения отсутствия картинки стэйта.
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.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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