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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2008, 22:18   #1
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию Открытие файлов через TreeView

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

-файл1.mht
-файл2.mht

-папка1
---------файл3.txt
---------файл4.mht

-файл5.txt

-папка2
---------файл6.mht
---------файл7.mht
и т.д.

Файлы необходимо открывать сторонними приложениями. Как мне определить к какому узлу относятся, например, дочерние узлы файл3 и файл4?

Как видимо, при выделении "папка1" или "папка2" открывать их не надо, то есть я использую
Код:
str1:=treeview1.Selected.Text;
if treeview1.Selected.Count=0 then
ShellExecute(Handle,nil,PChar(FPath+'Base\Questions\'+str1), nil, nil, SW_SHOW);
Но при использовании ShellExecute указывается путь, то есть, если был выделен, например, "файл3", то путь должен выглядеть так: "FPath+'Base\Questions\'+'папка1\'+ str1"
И у меня никак не получается это осуществить . Подскажите, пожалуйста, что делать? А если файлов и папок много? Может я чего-то не оптимально делаю и можно сделать проще? Поделитесь, пожалуйста, опытом, посоветуйте как быть!!!
Xardas вне форума Ответить с цитированием
Старый 28.03.2008, 22:28   #2
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Подсказываю..
Хочеш узнать родителся тогда treeview1.Selected.Parent
хочеш узнать его значение тогда treeview1.Selected.Parent.text
Чочеш узнать родителя родителя (дедушку или бабушку))))) тогда treeview1.Selected.Parent.Parent
и т.д......
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 28.03.2008, 22:37   #3
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Цитата:
Подсказываю..
Хочеш узнать родителся тогда treeview1.Selected.Parent
хочеш узнать его значение тогда treeview1.Selected.Parent.text
Чочеш узнать родителя родителя (дедушку или бабушку))))) тогда treeview1.Selected.Parent.Parent
и т.д......
Я вот сейчас до этого дошел. А если вложенность будет большой? Мне ведь не просто надо узнать, а еще в путь дописывать...
Xardas вне форума Ответить с цитированием
Старый 28.03.2008, 22:50   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Ну тогда делаем так
Код:
Var
  SDirAdr:string;
  Node:TTreeNode;
....
  SDirAdr:='';
  Node:=TreeView1.Selected;
  Repeat
     Node:=Node.Parent;
     SDirAdr:=Node.Text+'\'+SDirAdr;
  Until Node=nil;
....
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 28.03.2008, 23:23   #5
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

В процессе выполнения Node.Text имеет Inaccessible Value - недопустимое значение, вылетает ошибочка.

Последний раз редактировалось Xardas; 28.03.2008 в 23:25.
Xardas вне форума Ответить с цитированием
Старый 28.03.2008, 23:28   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Xardas Посмотреть сообщение
В процессе выполнения Node.Text имеет значение Inaccessible Value - недопустимое значение, вылетает ошибочка.
Ну вы уж хоть одно собственное шевеление тем, что у вас там в черепной коробке, уж сделайте, пожалуйста!
Разве так трудно догадаться, что проверка на NIL должна происходить раньше?
То есть не REPEAT...UNTIL, а WHILE...
mihali4 вне форума Ответить с цитированием
Старый 28.03.2008, 23:59   #7
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

А я то думал что каждый файл будет хотя бы в одной папке.
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 29.03.2008, 00:03   #8
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Цитата:
Ну вы уж хоть одно собственное шевеление тем, что у вас там в черепной коробке, уж сделайте, пожалуйста!
Да... Может это у меня под конец дня, то, что "в черепной коробке", шевелится с трудом...

Делаю таким образом:
SDirAdr:='';
Node:=TreeView1.Selected;
while node<>nil do
begin
Node:=Node.Parent;
SDirAdr:=Node.Text+'\'+SDirAdr;
end;

На предпоследней строке ошибка, исключение EAccessViolation. Причем, когда делаю точку останова на этой строке, Node.text содержит 'Новая папка', т.е. правильное значение... Ведь как только все предки переберутся из цикла должен выходить... Тупик у меня в голове

Последний раз редактировалось Xardas; 29.03.2008 в 00:06.
Xardas вне форума Ответить с цитированием
Старый 29.03.2008, 00:08   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот эта "дикая" строка ?
Цитата:
Node:=Node.Parent;
Ну, все правильно...
В ней вы говорите : присвоить мне, что я - мой отец... Бред...
Чуть-чуть изменим:
Код:
mynod:=TreeView1.Selected;
while mynod<>nil do
begin
Node:=mynod.Parent;
...
//и в конце
mynod:=Node;
mihali4 вне форума Ответить с цитированием
Старый 29.03.2008, 00:09   #10
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

И он на этом же когда имеет значение "Новая папка" дает ошибку?
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файлов из Delphi Demien Общие вопросы Delphi 16 28.07.2011 01:06
открытие файлов Ensoph Общие вопросы Delphi 5 31.03.2008 20:45
Открытие через программу xGroupers Общие вопросы Delphi 3 29.03.2008 16:26
Открытие файлов в MDI-приложении Eofol Общие вопросы Delphi 2 20.12.2007 22:05
Открытие файлов *.txt Bill Gates Общие вопросы Delphi 3 28.11.2007 22:44