Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не пойму в чем дело с TreeView [WinXP]


Страницы:   1 2

v1keeee ©   (2009-05-11 20:53:00) 

Здравствуйте мастера! Столкнулся с такой проблемой:
Сохраняю и загружаю содержимое компонента TreeView в файл и читаю потоками:

var
 write:TFileStream;
begin
write := TFileStream.Create(ExtractFilePath(ParamStr(0))+'leaning_book.lbk', fmOpenRead);
write.ReadComponent(tv1);
write.Free;

с этим проблем нет. Проблема в том что перестает работать код обработки выделенного элемента:

rocedure TMainForm.tv1Change(Sender: TObject; Node: TTreeNode);
var
 l:integer;
begin
for l := 1 to 3 do
 begin
  if tv1.Items.Item[l-1].Selected = true then
   begin
Wb1.Navigate('file:\\'+extractfiledir(paramstr(0))+DataArray[l].Link);
   end;
 end;

end;

При клике на пункте вылетает собщение об ошибке "EAccessViolation at address..." на строку "if tv1.Items.Item[l-1].Selected = true then"
Причем если пункты в TreeView созданы на этапе разработки  вручную а не загружены из файла то все работает отлично. Вот не огу понять в чем трабла, может Вы знаете?


KilkennyCat   (2009-05-11 22:42:00) [21]

боюсь, аллах тоже бы не понял.


ford   (2009-05-11 22:38:00) [22]

тут вообщето непонятно чег он хочет добиться этим кодом
пусть есть дерево из 100 элементов
а товарисч всегда проходит по элементам 0..2
проверяя его на выбранность
мало того сработает IF только тогда когда выбран элемент 0..2
т.е. если , как я написал выше брать дерево в котором 100 элементов, кликнуть на 95-й, то
> Wb1.Navigate('file:\\'+extractfiledir(paramstr(0))+DataArray[l].
> Link);

не сработает
а сработает тока в том случае ежели кликнули на ноду с 0 до 2-й
:)
причем еще, что не учтена абсолютно структура дерева
т.е. что он хотел сказать кодом, один аллах ведает

а вот ошибка у него вылетает потому, что нету таких нод у него в дереве у которых индексы 0..2
ну нету их
загружая из файла, они не создались у него
ему сказали используй
SaveToStream или SaveToFile  для объекта класса TTreeView
и будет все ок


KilkennyCat   (2009-05-11 22:22:00) [23]


> потом сам ногу сломищь пытаясь это прочесть

ногу сломишь читая кучу бегинов, индов и сравнения с булевыми значениями.


> это узел дерева для которого вызвалось событие OnCange


> Проблема в том что перестает работать код обработки выделенного
> элемента:


ford   (2009-05-11 22:06:00) [24]


> KilkennyCat ©   (11.05.09 21:59) [4]

это узел дерева для которого вызвалось событие OnCange
судя по всему


> сокращается до

не надо так сокращать
потом сам ногу сломищь пытаясь это прочесть
Ж)


KilkennyCat   (2009-05-11 21:59:00) [25]


> Procedure TMainForm.tv1Change(Sender: TObject; Node: TTreeNode);

Выделенное жирным - это что?


> for l := 1 to 3 do
>  begin
>   if tv1.Items.Item[l-1].Selected = true then
>    begin
> Wb1.Navigate('file:\\'+extractfiledir(paramstr(0))+DataArray[l].
> Link);
>    end;
>  end;

сокращается до

for l := 0 to 2 do  if tv1.Items.Item[l].Selected then Wb1.Navigate('file:\\'+extractfiledir(paramstr(0))+DataArray[l].Link);


ford   (2009-05-11 21:51:00) [26]

не может такого быть
> А когда используеш эту его способность сохранятся в файл
> то он потом себя не читает :(


TTreeView
сохраняет себя в файл и читает прекрасно
проверенно не однократно
:))
а вот то что у тебя в строке

> if tv1.Items.Item[l-1].Selected = true then

ошибка вылетает
ты вначале перед это строкой проверь а вообще-то сществует твой элемент который ты хощ проверить
и еще
у TTreeView есть такое поле как
Selected:TTreeNode
сразу тебе выделенный пункт дает
TreeView1.Selected.Text:='выделенный пункт'


v1keeee   (2009-05-11 21:44:00) [27]

А когда используеш эту его способность сохранятся в файл то он потом себя не читает :(


Юрий Зотов   (2009-05-11 21:13:00) [28]

1. Что-то в этой строке есть nil. Ловится отладчиком.

2. TTreeView сам умеет сохраняться в файл/поток и загружаться оттуда. Почему бы не использовать?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо