Форум: "Основная";
Текущий архив: 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