| 
| 
 | Вопрос # 5 656/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Помогите пожалуйста в вопросе отображения иконок в TreeView.
 Проблема следующая.
 Изображения в TreeView поступают из ImageList.
 При добавлении раздела (подраздела) в коде прописывается индекс иконки (код прилагается)
 NewRazd.ImageIndex:=3;
 NewRazd.SelectedIndex:=4;
 Все хорошо при запущенной программе.
 Однако стоит выйти из программы и снова войти
 то при загрузке дерева индекс иконки меняется на нулевой из ImageList. И изображение иконок не поймешь как :(.....
 Заранее благодарен
 Al_Sha
 Приложение:Переключить в обычный режим   procedure TBook.MenuItem4Click(Sender: TObject);var     id, RParentID: integer;  fl:boolean;  i:integer;label Fin;begin    if sTreeView1.Selected = nil then     s := '';        fin:        begin    fl:=true;    for i:=0 to sTreeView1.Items.Count-1 do      if s=sTreeView1.Items[i].Text then      begin        fl:=false;        break      end;    if fl then        NewRazd := sTreeView1.Items.AddChild(sTreeView1.Selected, s)        //TreeView1.Items.AddChild(TreeView1.Items.Item[0],edName.Text)    else    begin      goto fin;       end  end;  NewRazd.ImageIndex:=3;  NewRazd.SelectedIndex:=4;    Q1.SQL.Clear;  Q1.SQL.Add('select * from Razdels where Name=''' + NewRazd.Parent.Text + '''');  Q1.Open;     tRazdels['ParentID'] := Q1['ID'];   tRazdels['Name'] := NewRazd.Text;   tRazdels.Post;end; procedure TBook.TreeViewAddChild(rod, doch: string; intID: Integer); begin   for i := 0 to sTreeView1.Items.Count - 1 do begin     if sTreeView1.Items[i].Text = rod then begin      sTreeView1.Items[i].Selected := True;      Break;    end;  end;     sTreeView1.Items.AddChild(sTreeView1.Selected, doch);     for i := 0 to sTreeView1.Items.Count - 1 do begin     if sTreeView1.Items[i].Text = doch then begin      sTreeView1.Items[i].Selected := True;      Break;    end;    //if  end; //for    sTreeView1.Selected.Data := Pointer(intID); end;   procedure TBook.CreateTreeView;  begin ///////////////////////////////////////////     sTreeView1.Items.Clear;   Q1.SQL.Clear;  Q1.SQL.Add('select * from Razdels where ParentID=0');  Q1.Open;    while not Q1.Eof do begin    sTreeView1.Selected := nil;    sTreeView1.Items.Add(sTreeView1.Selected, Q1.FieldByName('Name').AsString);    Q1.Next;  end;     Q1.SQL.Clear;  Q1.SQL.Append('select r.Name, d.Name, d.ID ' +    'from Razdels r, Razdels d ' +    'where r.ID=d.ParentID');  Q1.Open;   Q1.First;  while not Q1.Eof do begin    TreeViewAddChild(Q1.Fields[0].AsString, Q1.Fields[1].AsString, Q1.Fields[2].AsInteger);      Q1.Next;  end;    sTreeView1.FullExpand;end;  
|  |   Вопрос задал: 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™ (статус: Доктор наук), 28 сентября 2011, 11:13 [#1]: Цитата (Al_Sha): Однако стоит выйти из программы и снова войти то при загрузке дерева индекс иконки меняется на нулевой из ImageList. И изображение иконок не поймешь как  Ну и ничего удивительного. У тебя же нет присвоения ImageIndex и SelectedIndex при загрузке дерева.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |