![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список файлов и папок. [D7]
Nikfel © (2007-09-27 13:48:00)Подскажите пожалуйста. Как получить список папок и вывести в memo1, и получит список файлов и вывести в memo2. Мне только нужно получить список файлов или папок. Желательно бы найти самый быстрый вариант. Заранее спасибо.
Kolan (2007-09-27 18:02:00) [1]> А сам как думаешь? :)
> И абсолютно без разницы
Короче проверил:
property Strings: TStrings read GetStrings write SetStrings;
Работает
Хм , странно, откруда тогда у меня эта паранойа.
Джо (2007-09-27 17:55:00) [2]И абсолютно без разницы, где этот объект находится, в локальном var или возвращается методом-аксессором.
Джо (2007-09-27 17:54:00) [3]2 Kolan ©
Ты ведь просто передаешь ссылку на объект. Ничего никуда не присваивается. :)
Kolan (2007-09-27 16:21:00) [4]> Адрес метода от адреса «данных» отличаешь?
Ну вот, вот у меня и запало что так не получится :)
{RASkov} (2007-09-27 16:20:00) [5]> [15] Kolan © (27.09.07 16:11)
> GetLines write SetLines;
>
> Ругалось бы?
А сам как думаешь? :)
Адрес метода от адреса "данных" отличаешь?
Kolan (2007-09-27 16:11:00) [6]> А где там assignment? :)
Ну я знаю
А если бы было так:
property Lines: TStrings read GetLines write SetLines;
Ругалось бы?
{RASkov} (2007-09-27 16:03:00) [7]> [11] Kolan © (27.09.07 15:35)
> странно…
Ничего странного нет.... так как
procedure TPluginLoader.ScanDirectory(....: Boolean; Strings: TStrings; Extension: string.....)
всего лишь указатель....
А смотрим
TCustomMemo = class(TCustomEdit)
.....
property Lines: TStrings read FLineswrite SetLines;
> что-то типа Left side cannot be assigend…
Это немного не из этой оперы....
Джо (2007-09-27 15:57:00) [8]> [11] Kolan © (27.09.07 15:35)
> > А разве не так?
>
> Хм, и так можно… Почему же я был уверен что он ругнется
> что-то типа Left side cannot be assigend… странно…
А где там assignment? :)
{RASkov} (2007-09-27 15:54:00) [9]> [10] Reindeer Moss Eater © (27.09.07 15:29)
А вдруг ему Мемо критично... :)
Ладно... я ему тоже приготовил нечто такое:
procedure GetFileDir(LsFile, LsDir: TCustomListBox; const APath: String);
begin
LsFile.Perform(LB_DIR, 0, LPARAM(PChar(APath)));
LsDir.Perform(LB_DIR, DDL_EXCLUSIVE or DDL_DIRECTORY, LPARAM(PChar(APath)));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetFileDir(ListBox1, ListBox2, 'C:\Temp\*.*');
end;
В справке по DlgDirList есть инфа по параметрам DDL_xxx.....
Kolan (2007-09-27 15:35:00) [10]> А разве не так?
Хм, и так можно Почему же я был уверен что он ругнется что-то типа Left side cannot be assigend странно
Reindeer Moss Eater (2007-09-27 15:29:00) [11]SendMessage(ListBox1.Handle,
LB_DIR,
DDL_ARCHIVE +
DDL_DIRECTORY +
DDL_DRIVES +
DDL_EXCLUSIVE +
DDL_HIDDEN +
DDL_READONLY +
DDL_READWRITE +
DDL_SYSTEM,
Integer(PChar('C:\*.*'))
);
Джо (2007-09-27 15:15:00) [12]> [6] {RASkov} © (27.09.07 15:13)
О, не один я шибко умный :)
Джо (2007-09-27 15:15:00) [13]> [7] Джо © (27.09.07 15:14)
> А разве не так?
> ScanDirectory('C:\', False, Memo1.Strings, '', '', 0);
> ;)
Т.е., Lines, конечно.
Джо (2007-09-27 15:14:00) [14]> [5] Kolan © (27.09.07 15:11)
> > Спасибо. Проверю.
>
> Пользоваться так:
>
> var
> Strings: TStrings;
> begin
> Strings : TStringList.Create;
> try
> ScanDirectory('C:\', False, Strings, '', '', 0);
> Memo1.Lines.Text := Strings.Text;
> finally
> Strings.Free;
> end;
> end;
А разве не так?
ScanDirectory('C:\', False, Memo1.Strings, '', '', 0);
;)
{RASkov} (2007-09-27 15:13:00) [15]
> [5] Kolan © (27.09.07 15:11)
А почему не так:
begin
ScanDirectory('C:\', False, Memo1.Lines, '', '', 0);
end;
? :)
Kolan (2007-09-27 15:11:00) [16]> Спасибо. Проверю.
Пользоваться так:
var
Strings: TStrings;
begin
Strings : TStringList.Create;
try
ScanDirectory('C:\', False, Strings, '', '', 0);
Memo1.Lines.Text := Strings.Text;
finally
Strings.Free;
end;
end;
{RASkov} (2007-09-27 15:06:00) [17]> [0] Nikfel © (27.09.07 13:48)
> Как получить список папок и вывести в memo1, и получит список файлов и вывести в memo2
> Желательно бы найти самый быстрый вариант
А обязательно Memo нужны? Например ListBox'ы - не подойдут?
Nikfel (2007-09-27 13:55:00) [18]Спасибо. Проверю.
Kolan (2007-09-27 13:51:00) [19]Пользовайся:
Kolan (2007-09-27 13:51:00) [20]
procedure TPluginLoader.ScanDirectory(Directory: string;
ScanSubFolders: Boolean; Strings: TStrings; Extension: string;
FileName: string; RecursionCount: Integer);
var
CurrentFile: TSearchRec;
begin
Directory := IncludeTrailingPathDelimiter(Directory);
if Assigned(Strings) and DirectoryExists(Directory) then
begin
try
if FindFirst(Directory + '*.*', faAnyFile, CurrentFile) = 0 then
begin
repeat
if (CurrentFile.Name '.') and (CurrentFile.Name ' ') then
begin
if ((CurrentFile.Attr and faDirectory) 0) and ScanSubFolders then
ScanDirectory(Directory+CurrentFile.Name, ScanSubFolders, Strings,
Extension, FileName, RecursionCount + 1);
if (Extension = '') or (ExtractFileExt(CurrentFile.Name) = Extension) then
if (FileName = '') or (FileName = CurrentFile.Name) then
Strings.Add(Directory+CurrentFile.Name)
end;
until FindNext(CurrentFile) 0;
end;
finally
FindClose(CurrentFile);
end;
end;
end;