Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 495

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Как получить файлs в TreeView как в проводнике? Чтобы в TreeView двойным щелчком я мог открыть файлы и любой из файлов переместить в listbox илив listView? Помагите пожалуйста весь интернет облазил ниче подобного не могу найти? Заранее большое большое спасибо!

Kraken Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Kraken (статус: Посетитель)
Вопрос отправлен: 5 декабря 2009, 20:40
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Жикльор

Здравствуйте, Kraken!

Наконец-то я закончил написание программы!!!!! Она ищет по всем жестком диске любые файлы и отображает их в иерархической структуре в TreeView. При перетягивании с TreeView в ListBox, получаем полный путь к файлу. По двойном щелчку по файлу в ListBox вы его открываете, правда только exe. Вот собственно и сам код:

З.Ы. В этом коде все файлы отображаются как папки, брал со стандартной библиотеки Дельфи иконки.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ComCtrls, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. TreeView1: TTreeView;
  12. ListBox1: TListBox;
  13. Label1: TLabel;
  14. Label2: TLabel;
  15. procedure FormCreate(Sender: TObject);
  16. procedure TreeView1Expanding(Sender: TObject; Node: TTreeNode;
  17. var AllowExpansion: Boolean);
  18. procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  19. procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  20. State: TDragState; var Accept: Boolean);
  21. procedure ListBox1DblClick(Sender: TObject);
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30. Count: integer;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35. {$R FileCtrl}
  36.  
  37. procedure NextLevel(ParentNode: TTreeNode);
  38. function DirectoryName(name: string): boolean;
  39. begin
  40. result := (name <> '.') and (name <> '..');
  41. end;
  42. var
  43. sr, srChild: TSearchRec;
  44. node: TTreeNode;
  45. path: string;
  46. begin
  47. node := ParentNode;
  48. path := '';
  49. repeat
  50. path := node.Text + '&#092;' + path;
  51. node := node.Parent;
  52. until node = nil;
  53. if FindFirst(path + '*.*', faAnyFile, sr) = 0 then begin
  54. repeat
  55. if (sr.Attr and faAnyFile <> 0) and DirectoryName(sr.Name) then begin
  56. node := Form1.TreeView1.Items.AddChild(ParentNode, sr.Name);
  57. node.ImageIndex := 0;
  58. node.SelectedIndex := 1;
  59. node.HasChildren := false;
  60. if FindFirst(path + sr.Name + '&#092;*.*', faAnyFile, srChild) = 0 then begin
  61. repeat
  62. if (srChild.Attr and faAnyFile <> 0) and DirectoryName(srChild.Name)
  63. then node.HasChildren := true;
  64. until (FindNext(srChild) <> 0) or node.HasChildren;
  65. end;
  66. FindClose(srChild);
  67. end;
  68. until FindNext(sr) <> 0;
  69. end else ParentNode.HasChildren := false;
  70. FindClose(sr);
  71. end;
  72.  
  73. procedure TForm1.FormCreate(Sender: TObject);
  74. const
  75. IconNames: array [0..6] of string = ('CLOSEDFOLDER', 'OPENFOLDER',
  76. 'FLOPPY', 'HARD', 'NETWORK', 'CDROM', 'RAM');
  77. var
  78. c: char;
  79. s: string;
  80. node: TTreeNode;
  81. DriveType: integer;
  82. bm, mask: TBitmap;
  83. i: integer;
  84. begin
  85. TreeView1.Items.BeginUpdate;
  86. TreeView1.Images := TImageList.CreateSize(16, 16);
  87. bm := TBitmap.Create;
  88. mask := TBitmap.Create;
  89. for i := low(IconNames) to high(IconNames) do begin
  90. bm.Handle := LoadBitmap(HInstance, PChar(IconNames[i]));
  91. bm.Width := 16;
  92. bm.Height := 16;
  93. mask.Assign(bm);
  94. mask.Mask(clBlue);
  95. TreeView1.Images.Add(bm, mask);
  96. end;
  97. for c := 'A' to 'Z' do begin
  98. s := c + ':';
  99. DriveType := GetDriveType(PChar(s));
  100. if DriveType = 1 then continue;
  101. node := Form1.TreeView1.Items.AddChild(nil, s);
  102. case DriveType of
  103. DRIVE_REMOVABLE: node.ImageIndex := 2;
  104. DRIVE_FIXED: node.ImageIndex := 3;
  105. DRIVE_REMOTE: node.ImageIndex := 4;
  106. DRIVE_CDROM: node.ImageIndex := 5;
  107. else node.ImageIndex := 6;
  108. end;
  109. node.SelectedIndex := node.ImageIndex;
  110. node.HasChildren := true;
  111. end;
  112. TreeView1.Items.EndUpdate;
  113. end;
  114.  
  115. procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
  116. var AllowExpansion: Boolean);
  117. begin
  118. TreeView1.Items.BeginUpdate;
  119. node.DeleteChildren;
  120. NextLevel(node);
  121. TreeView1.Items.EndUpdate;
  122. end;
  123.  
  124. procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  125. var
  126. name: string;
  127. nod: TTreeNode;
  128. begin
  129. name := Form1.TreeView1.Selected.Text;
  130. nod := Form1.TreeView1.Selected;
  131. while true do
  132. begin
  133. if nod.Parent <> nil then
  134. begin
  135. name:=nod.Parent.Text + '/' + name;
  136. nod:=nod.Parent;
  137. end
  138. else
  139. break;
  140. end;
  141. Form1.ListBox1.Items.Add(name);
  142. end;
  143.  
  144. procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  145. State: TDragState; var Accept: Boolean);
  146. begin
  147. if Sender is TTreeView then Accept:=true;
  148. end;
  149.  
  150. procedure TForm1.ListBox1DblClick(Sender: TObject);
  151. begin
  152. WinExec(PChar(Form1.ListBox1.Items[Form1.ListBox1.ItemIndex]),0);
  153. end;
  154.  
  155. end.


Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 6 декабря 2009, 02:51
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 21; последнее сообщение — 13 декабря 2009, 20:41; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2]

Kraken

Kraken (статус: Посетитель), 13 декабря 2009, 20:41 [#21]:

ясно!

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 00:01
Выполнено за 0.03 сек.