Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2010, 11:07   #1
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию Сохранение ImageIndex TreeView

Здравствуйте, столкнулся с такой проблемкой... На форме находится компонент TreeView узлы которого добавляются при нажатии на кнопку и каждому узлу присваивается определённый ImageIndex... Сохраняю TreeView с помощью команды:
Код:
TreeView.SaveToFile(extractfilepath(paramstr(0))+'SaveFile/list');
При загрузке все узлы имеют 0-вой ImageIndex... как сделать, чтоб при сохранение сохранялся и индекс изображения?!
TaYgA вне форума Ответить с цитированием
Старый 16.07.2010, 11:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Этот метод только структуру сохраняет. ИМХО выход только один - создай свой метод записи в файл.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2010, 13:50   #3
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Спасибо)) Теперь возник у меня вопрос по реализации сохранения... Я хочу в отдельный файл записывать имя и индекс узла, а потом загружать по имени индекс узла... Написал запись таким образом:
Код:
  AssignFile(f,extractfilepath(paramstr(0))+'SaveFile/listImage');
    ReWrite(f);
    for i:=0 to TreeView.Items.Count-1 do begin
      Writeln(f,TreeView.Items.Item[i].Text);
      Writeln(f,IntToStr(TreeView.Items.Item[i].ImageIndex));
      break
    end;
    CloseFile(f);
Сохраняется почему то один итем с индексом 0
TaYgA вне форума Ответить с цитированием
Старый 16.07.2010, 14:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы на твоем месте обьявил тип записи с текстом ветки (string[255]), ее уровнем вложения ну и что ты там еще хотел сохранить и записывал в типизированный файл, пройдя по всем веткам каждую из них.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2010, 14:46   #5
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Stilet, а можно пример как это сделать?!
TaYgA вне форума Ответить с цитированием
Старый 19.07.2010, 10:03   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да не вопрос:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var t:TTreeNode;
begin
 t:=TreeView1.Items.AddChild(TreeView1.Selected,TimeToStr(now));
 t.ImageIndex:=tag;
 tag:=tag*2;
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
 Caption:=IntToStr(node.ImageIndex);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
type
 rc=record
  Title:string[255];
  ImageIndex,ParentItemNum:integer;
 end;
var a:rc; f:file of rc;
 i:integer;
begin
 AssignFile(f,'c:\temp\q');   rewrite(f);
 for i:=0 to TreeView1.Items.Count-1 do begin
  with TreeView1.Items[i] do begin
   a.Title:=Text;
   a.ImageIndex:=ImageIndex;
   a.ParentItemNum:=Level;
  end;
  write(f,a);
 end;
 CloseFile(f);
end;

procedure TForm1.FormCreate(Sender: TObject);
type
 rc=record
  Title:string[255];
  ImageIndex,ParentItemNum:integer;
 end;
var a:rc; f:file of rc;
 i:integer; t:TTreeNode;
begin   t:=nil;
 if not FileExists('c:\temp\q') then exit;
 AssignFile(f,'c:\temp\q');   reset(f);
 while not eof(f) do begin
  read(f,a);
  if (t<>nil) then begin
   if t.Level<a.ParentItemNum then
    t:=TreeView1.Items.AddChild(t,a.Title)
   else
    if t.Level=a.ParentItemNum then
     t:=TreeView1.Items.AddChild(t.Parent,a.Title)
    else
     if t.Level>a.ParentItemNum then begin
      t:=t.Parent;
      t:=TreeView1.Items.AddChild(t.Parent,a.Title);
     end;
  end else t:=TreeView1.Items.Add(nil,a.Title);
   t.ImageIndex:=a.ImageIndex;
 end;
 CloseFile(f);
end;

end.
Смысл понятен? Сохраняем level и потом смотрим куда согласно ему поместить ветку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2010, 15:57   #7
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Stilet, большое спасибо!!! Разобрался...Столкнулся ещё с одной проблемой(( Нужно, чтоб при изменении итема TreeView сохранялся файл с именем предыдущего итема т.е. был выбран итем с именем "ласточка", при выборе другого итема должен создаться файл с именем "ласточка"... Писал это таким образом:
Код:
procedure TMarks.TreeViewClick(Sender: TObject);
var
   i: Integer;
   cap: String;
begin
  cap:=IntToStr(TreeView.Tag);
  TreeView.Tag:=TreeView.Items.Item[i].Index;
  for i:=0 to TreeView.Items.Count-1 do
    if TreeView.Selected.Focused=True then begin
      Memo.Lines.SaveToFile(extractfilepath(paramstr(0))+'SaveFile/'+TreeView.Items.Item[StrToInt(cap)].Text);
      break;
    end;
В моём коде почему то не правильно определяются итемы узлов и подузлов...
TaYgA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Treeview и бд sisofcase БД в Delphi 8 03.04.2012 17:32
Treeview shaman888 Помощь студентам 0 28.04.2010 15:12
TreeView Superlotles Помощь студентам 1 29.11.2009 13:48
сохранение структуры TreeView SergGhost Помощь студентам 6 27.05.2009 18:31
Сохранение и загрузка узлов TreeView из базы данных Ko$tello Компоненты Delphi 1 14.11.2006 17:15