Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 656

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Помогите пожалуйста в вопросе отображения иконок в TreeView.
Проблема следующая.
Изображения в TreeView поступают из ImageList.
При добавлении раздела (подраздела) в коде прописывается индекс иконки (код прилагается)
NewRazd.ImageIndex:=3;
NewRazd.SelectedIndex:=4;
Все хорошо при запущенной программе.
Однако стоит выйти из программы и снова войти
то при загрузке дерева индекс иконки меняется на нулевой из ImageList. И изображение иконок не поймешь как :(.....
Заранее благодарен
Al_Sha

Приложение:
  1.  
  2.  
  3. procedure TBook.MenuItem4Click(Sender: TObject);
  4. var
  5.  
  6.  
  7.  
  8. id, RParentID: integer;
  9. fl:boolean;
  10. i:integer;
  11. label Fin;
  12. begin
  13.  
  14.  
  15. if sTreeView1.Selected = nil then
  16.  
  17. s := '';
  18.  
  19.  
  20.  
  21. fin:
  22.  
  23.  
  24. begin
  25. fl:=true;
  26. for i:=0 to sTreeView1.Items.Count-1 do
  27. if s=sTreeView1.Items[i].Text then
  28. begin
  29. fl:=false;
  30. break
  31. end;
  32. if fl then
  33. NewRazd := sTreeView1.Items.AddChild(sTreeView1.Selected, s)
  34. //TreeView1.Items.AddChild(TreeView1.Items.Item[0],edName.Text)
  35. else
  36. begin
  37.  
  38. goto fin;
  39. end
  40. end;
  41. NewRazd.ImageIndex:=3;
  42. NewRazd.SelectedIndex:=4;
  43.  
  44.  
  45. Q1.SQL.Clear;
  46. Q1.SQL.Add('select * from Razdels where Name=''' + NewRazd.Parent.Text + '''');
  47. Q1.Open;
  48.  
  49.  
  50.  
  51. tRazdels['ParentID'] := Q1['ID'];
  52.  
  53. tRazdels['Name'] := NewRazd.Text;
  54.  
  55. tRazdels.Post;
  56. end;
  57.  
  58. procedure TBook.TreeViewAddChild(rod, doch: string; intID: Integer);
  59.  
  60. begin
  61.  
  62. for i := 0 to sTreeView1.Items.Count - 1 do begin
  63.  
  64. if sTreeView1.Items[i].Text = rod then begin
  65. sTreeView1.Items[i].Selected := True;
  66. Break;
  67. end;
  68. end;
  69.  
  70.  
  71. sTreeView1.Items.AddChild(sTreeView1.Selected, doch);
  72. for i := 0 to sTreeView1.Items.Count - 1 do begin
  73.  
  74. if sTreeView1.Items[i].Text = doch then begin
  75. sTreeView1.Items[i].Selected := True;
  76. Break;
  77. end;
  78. //if
  79. end; //for
  80.  
  81.  
  82. sTreeView1.Selected.Data := Pointer(intID);
  83. end;
  84.  
  85.  
  86.  
  87. procedure TBook.CreateTreeView;
  88.  
  89. begin
  90. ///////////////////////////////////////////
  91.  
  92.  
  93.  
  94. sTreeView1.Items.Clear;
  95.  
  96. Q1.SQL.Clear;
  97. Q1.SQL.Add('select * from Razdels where ParentID=0');
  98. Q1.Open;
  99.  
  100.  
  101. while not Q1.Eof do begin
  102. sTreeView1.Selected := nil;
  103. sTreeView1.Items.Add(sTreeView1.Selected, Q1.FieldByName('Name').AsString);
  104. Q1.Next;
  105. end;
  106.  
  107.  
  108. Q1.SQL.Clear;
  109. Q1.SQL.Append('select r.Name, d.Name, d.ID ' +
  110. 'from Razdels r, Razdels d ' +
  111. 'where r.ID=d.ParentID');
  112. Q1.Open;
  113.  
  114. Q1.First;
  115. while not Q1.Eof do begin
  116. TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString, Q1.Fields[2].AsInteger);
  117. Q1.Next;
  118. end;
  119.  
  120. sTreeView1.FullExpand;
  121. end;
  122.  
  123.  


Al_Sha Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Al_Sha (статус: Посетитель)
Вопрос отправлен: 28 сентября 2011, 11:01
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Al_Sha!
Хотя я и отношусь к xml немного предвзято, но в данном случае он будет самое оно. Для начала смотрим http://www.webdelphi.ru/2010/02/soxranenie-treeview-v-xml-fajl/ пример, как сохранить и достать с файла TreeView.
Там есть такая строка

Node.Attributes['Level'] := IntToStr(tn.Level);
Никто не мешает точно также сохранить себе индекс иконки и другую интересную инфу.
А а вот сами картинки можно сохранить как прям тут в файл в виде бинарных данных, либо отдельно в bmp.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 28 сентября 2011, 12:09


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 28 сентября 2011, 11:13; участников в обсуждении: 1.
min@y™

min@y™ (статус: Доктор наук), 28 сентября 2011, 11:13 [#1]:

Цитата (Al_Sha):

Однако стоит выйти из программы и снова войти то при загрузке дерева индекс иконки меняется на нулевой из ImageList. И изображение иконок не поймешь как

Ну и ничего удивительного. У тебя же нет присвоения ImageIndex и SelectedIndex при загрузке дерева.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.