Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Вниз

Компонент TTreeView   Найти похожие ветки 

 
Lefan   (2003-05-26 07:41) [0]

Приетсвую народ!
Такая проблемка появилась, в компонент TTreeView нужно добавить папку с ее структурой (вложения),
и так и сяк голову ломаю, ничего не получается...
Мож у кого есть сырки, иль просветит?

Заранее благодарен!
С уважением Алексей.


 
MBo   (2003-05-26 07:46) [1]

Ну так рекурсивный обход Findfirst-findNext


 
Lefan   (2003-05-26 10:11) [2]

с рекурсивным, понятно, не получается в объект TTreeView добавить... поправочка, правильно добавить....

1 вариант, нашел папку, добавил, захожу:
C:\
arch (1 , 1)
111 (2 , 2)
ааа (3 , 3)
222 (2 , 4)
Program (1 , 5)
pascal (6 , 6)
333 (7 , 7)
444 (7 , 8)
Delphi (6 , 9)
XXX (1 , 10)
yyy (11 , 11)

(1 , 2) первое - номер родительской папочки в списке + 1, второе - номер по проядку, т.е. каким по счету был добавлен
вот так правильно, а реализовать не получается...



2 вариант, сначала добаляю все папки, а потом уже захожу в каждую и сканирую:
C:\
arch (1 , 1)
111 (2 , 4)
ааа (3 , 6)
222 (2 , 5)
Program (1 , 2)
pascal (6 , 7)
333 (7 , 9)
444 (7 , 10)
Delphi (6 , 8)
XXX (1 , 3)
yyy (11 , 11)

(1 , 2) первое - номер родительской папочки в списке + 1, второе - номер по проядку, т.е. каким по счету был добавлен


1 вариант предпочтительнее


 
Silver_   (2003-05-26 10:17) [3]

Может проще использовать стандартный компонент SellTreeView с вкладки Samples


 
pasha_golub   (2003-05-26 10:51) [4]

procedure TfmShell.LogDir(Dir: TFileName); //считать структуру каталога
var SR: TSearchRec;
Node, Root: TTreeNode;

begin
Root := tvFolders.Selected;
Root.ImageIndex := 1;
//File & Folders logging
tvFolders.Items.BeginUpdate;
if FindFirst(Dir+"\*", FAttr or faDirectory,SR) = 0 then
Repeat
if (SR.Attr and FAttr) = SR.Attr then
tvFolders.Items.AddChild(Root,SR.Name)
else
if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name<>".") and (SR.Name<>"..") then
begin
Node := tvFolders.Items.AddChild(Root,AnsiUpperCase(SR.Name));
tvFolders.Selected := Node;
LogDir(Dir+"/"+SR.Name);
end;
Until FindNext(SR) <> 0;
tvFolders.Items.EndUpdate;
FindClose(SR);
Root.CustomSort(nil,0,true);
end;

Коряво, чуть-чуть, но сойдет, я думаю
var
tvFolders: TTreeView;
fmShell: TfmShell;


 
Lefan   (2003-05-26 13:29) [5]

> Может проще использовать стандартный компонент SellTreeView с вкладки Samples

Не подходит по задаче...
немучился бы тогда...

А пример попробую, спасибо...


 
Lefan   (2003-05-26 13:32) [6]

кстати, как мне раскрыть списочек TTreeView програмно?


 
jack128   (2003-05-26 13:38) [7]

TTreeNode.Expand(...)


 
Song   (2003-05-26 13:38) [8]

TTreeNode.Expand()


 
Lefan   (2003-05-28 09:38) [9]

Народ проблемка в том, что сканирует, нормально, но идет только вниз, на верх не возвращается... :(

с:\
aaa(dir)
1.txt
2.tyxt
bbb(dir)
7.txt
8.txt

и все, обратно не возвращается, что-то потыкался помыкался, ника не хочет...
и еще, как мне получить номер ветки, например после того, как вернулись из bbb(dir), нужно знасть номер ветки, чтоб я мог получить 1.txt, 2.tyxt, т.е.
tvListFTP.Items[num].Text
^^^



var
myTree : TTreeNode;
Node, Root: TTreeNode;

...

function TForm1.Scan(path : TFileName) : integer;
var SR: TSearchRec;
FAttr : integer;
begin
FAttr := 2080;
Root := tvListFTP.Selected;
tvListFTP.Items.BeginUpdate;
if FindFirst(path+"\*", faAnyFile,SR) = 0 then
Repeat
if (SR.Attr and FAttr) = SR.Attr then
tvListFTP.Items.AddChild(Root,SR.Name)
else
if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name<>".") and (SR.Name<>"..") then
begin
Node := tvListFTP.Items.AddChild(Root,AnsiUpperCase(SR.Name));
Node.Expand(false);
tvListFTP.Selected := Node;
Scan(path+"\"+SR.Name);
end;
Until FindNext(SR) <> 0;
tvListFTP.Items.EndUpdate;
FindClose(SR);
end;


Заранее благодарен.
С уважением Алексей.


 
Lefan   (2003-05-30 12:12) [10]

неужели никто не знает, как решить эту проблему? :(


 
Andryk   (2003-05-30 13:38) [11]

Ну точно так же рекурсивно бегать по TreeNode`ам


 
KoluChi   (2003-05-30 14:35) [12]

Я делал немного другое: заполнение меню по списку URL.
Список URL находится в файле (читается в TStringList).
Уровень вложенности определяется количеством Tab (#9).
Принцип тот же. Можешь переделать под себя.
//------------------------------------------------------------------------------
procedure Tfrm_Main.CreateURLsMenu();
var
i: Integer;
Str: String;
Item: TMenuItem;
begin
mnitm_URLs.Clear();
i := -1;
try
//(стартовый узел, текущий номер строки/тебе не нужен/, вложенность)
AddURLsToMenu(mnitm_URLs, i, "");
except
end;
end;
//------------------------------------------------------------------------------
procedure Tfrm_Main.AddURLsToMenu(It: TMenuItem; var Index: Integer; StartStr: String);
var
i, Length1, Length2, ind: Integer;
Str, Str1, NameStr, URLStr: String;
Item, OldItem: TMenuItem;
Found: Boolean;
begin
OldItem := It;
repeat
Inc(Index);
Str := OptionsURLs.Strings[Index];
Found := (AnsiPos(StartStr, Str) = 1) or (StartStr = "");
if Found then
//если входит в ткекущую вложенность
begin
if Copy(Str, Length(StartStr) + 1, 1) = #9 then
//следующий уровень
begin
Dec(Index);
AddURLsToMenu(OldItem, Index, StartStr + #9);
end
else
begin
//
Length1 := Length(StartStr);
Str1 := Copy(Str, Length1 + 1, Length(Str) - Length1);
Ind := Pos("|", Str1);
Length2 := Length(Str1);
NameStr := Copy(Str1, 1, Ind - 1);
URLStr := Copy(Str1, Ind + 1, Length2 - Ind);
if NameStr = "" then
begin
NameStr := URLStr;
URLStr := "";
end;
Item := TMenuItem.Create(mnitm_URLs.Owner);
Item.OnClick := OnURLClick;
Item.Caption := NameStr;
Item.Hint := URLStr;

It.Add(Item);
OldItem := Item;
end
end
else
Dec(Index);
until (not Found) or (Index >= OptionsURLs.Count - 1);
end;
//------------------------------------------------------------------------------



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-34885
KMI
2003-05-31 20:22
2003.06.12
Как в run-time добавить к всплывающему меню подменю?


6-34956
xShadow
2003-04-09 11:09
2003.06.12
Вопрос по поводу закачки файла из инета??


3-34687
prihod
2003-05-22 17:01
2003.06.12
Помогите с написанием запроса в Query !!!


8-34933
Митяй2
2003-02-28 13:25
2003.06.12
ImageList (оптимизация)


3-34682
Raduga
2003-05-06 18:17
2003.06.12
SOS!!!!!!! Недостаток физической памяти!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский