Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.05.2011, 18:05
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию Как получить список файлов со всеми подкаталогами? Компонент

Приветствую!

Помогите пожалуйста вот эту программу перевести в компонент:
http://www.delphisources.ru/pages/fa...r_subdirs.html

Как получить список файлов со всеми подкаталогами
Код:
procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')thenbegin
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Пример вызова, параметры 1. имя папки 2. маска, по умолчанию *.* 3. хранилище для резульатат, любой наследник от TString, например TStringList
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
  ScanDir('c:', '', ListBox1.Items);
  Label1.Caption := IntToStr(ListBox1.Items.Count);
end;

Последний раз редактировалось lmikle, 14.05.2011 в 19:17.
Ответить с цитированием
  #2  
Старый 14.05.2011, 23:40
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

А можно узнать зачем вам именно компонент?
Реализуйте класс на основе TstringList и все.
Ответить с цитированием
  #3  
Старый 15.05.2011, 19:32
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Человек_Борща
А можно узнать зачем вам именно компонент?
Реализуйте класс на основе TstringList и все.

Да в том то и дело, что нужно именно компонент, будь он неладен...
Курсовик-хвост, а на носу диплом...
Сам то я ДБА и юниксоид, а в дельфи мало что понимаю
В ответ конечно же могу помочь чем могу.
Ответить с цитированием
  #4  
Старый 15.05.2011, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Cheater
Да в том то и дело, что нужно именно компонент, будь он неладен...
Курсовик-хвост, а на носу диплом...
Сам то я ДБА и юниксоид, а в дельфи мало что понимаю
В ответ конечно же могу помочь чем могу.

Ну и в чем проблема?

Код:
type
  TSearchFiles = class(TComponent)
  private
    FFiles : TStringList;
    FRoot : String;
    FIncludeSubfolders : Boolean;
    FMasks : TStringList;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
 
    procedure Execute;

    property Files : TStringList read FFiles; 
  published
    property Root : String read FRoot write FRoot;
    property IncludeSubfolders : Boolean read FIncludeSubfolders write FIncludeSubfolders;
    property Masks : TStingList read FMasks;
  end;

Ну и теперь сделать реализацию 3х методов и написать поцку регистрации компонента.
Ответить с цитированием
  #5  
Старый 16.05.2011, 11:07
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

мож это и это поможет
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 16.05.2011 в 11:09.
Ответить с цитированием
  #6  
Старый 16.05.2011, 12:39
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну и в чем проблема?

Код:
type
  TSearchFiles = class(TComponent)
  private
    FFiles : TStringList;
    FRoot : String;
    FIncludeSubfolders : Boolean;
    FMasks : TStringList;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
 
    procedure Execute;

    property Files : TStringList read FFiles; 
  published
    property Root : String read FRoot write FRoot;
    property IncludeSubfolders : Boolean read FIncludeSubfolders write FIncludeSubfolders;
    property Masks : TStingList read FMasks;
  end;

Ну и теперь сделать реализацию 3х методов и написать поцку регистрации компонента.

Прошу прощения за собственную тупость, а что значат эти три метода и поцка?
Ответить с цитированием
  #7  
Старый 16.05.2011, 12:40
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
мож это и это поможет

Спасибо, это видимо здорово и красиво, но мне бы попроще, чтобы разобраться...
Ответить с цитированием
  #8  
Старый 16.05.2011, 13:30
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Cheater
Прошу прощения за собственную тупость, а что значат эти три метода и поцка?
Вам нужно их реализовать самостояельно.
Ответить с цитированием
  #9  
Старый 16.05.2011, 15:42
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от Человек_Борща
Вам нужно их реализовать самостояельно.
Еще раз прошу прощения за непонимание
Но что именно то реализовать?
Несложную программу на Delphi у меня хватает понимания написать, а вот тут зашла речь о методах и каких-то поцках... Я даже и названий то таких не слышал
Ответить с цитированием
  #10  
Старый 16.05.2011, 16:02
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

не поцках, а процках (процедурах), прочитайте про классы в Delphi и их реализацию: Методы и процедуры и т.д.

P.S.: процка регистрации это вот это:
Код:
procedure Register;

....................

implementation

....................

procedure Register;
begin
  RegisterComponents('Samples', [TSearch]);
  // указываем какой класс в какую вкладку компонентов запихивать.
end;
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 16.05.2011 в 16:04.
Ответить с цитированием
  #11  
Старый 16.05.2011, 19:29
einstein einstein вне форума
Начинающий
 
Регистрация: 02.09.2010
Адрес: Город
Сообщения: 143
Репутация: -4653
По умолчанию

компонент должен быть визуальным или не визуальным? если визуальным, то породи его от ТЛистбокс и просто добавь метод Скандир. последний параметр не нужен будет.
Ответить с цитированием
  #12  
Старый 16.05.2011, 19:30
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

тогда уже лучше от TTreeView, красивее будет )) для большого кол-ва директорий и поддиректорий.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #13  
Старый 16.05.2011, 19:41
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от einstein
компонент должен быть визуальным или не визуальным? если визуальным, то породи его от ТЛистбокс и просто добавь метод Скандир. последний параметр не нужен будет.
Блин, народ, вы мне моск загрузили просто на полную уже
Я и так то не особо, да еще и столько советов, что и не знаю за что именно теперь лучше браться...
Компонент думаю что не визуальный.
Просто поиск директорий и файлов по указанному пути и сохранение результата в файл.
Путь поиска и имя файла сохранения просто задается в свойствах компонента.
Ответить с цитированием
  #14  
Старый 17.05.2011, 13:31
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию

Уважаемые, а не буду я сильно навязчив, если попрошу кого-нить из вас, просто дать мне рабочий код компонента... а???
Ну типа поплачусь и вы сжалитесь, только не сильно сложного...
В свою очередь готов ответить на сей жест снисходительности своей благодарностью, кою определите вы
Ответить с цитированием
  #15  
Старый 18.05.2011, 13:03
Cheater Cheater вне форума
Прохожий
 
Регистрация: 14.05.2011
Сообщения: 14
Репутация: 10
По умолчанию Вот, сваял... Не пойму что не так...

Код:
unit Component1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Menus, ComCtrls, FileCtrl;

type
  TComponent1 = class(TComponent)
   procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TComponent1]);
end;
{ WWW }
constructor Create(AOwner:TComponents);
begin
  inherited Create(AOwner);
  Options := Options + [ofFileMustExist, ofPathMustExist];
procedure ScanDir(StartDir: string; Mask: string; List: TStrings);
var
  SearchRec: TSearchRec;
begin
  if Mask = '' then
    Mask := '*.*';
  if StartDir[Length(StartDir)] <> '\' then
    StartDir := StartDir + '\';
  if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
  begin
    repeat Application.ProcessMessages;
      if (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name)
      else if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then
      begin
        List.Add(StartDir + SearchRec.Name + '\');
      ScanDir(StartDir + SearchRec.Name + '\', Mask, List);
  end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Clear;
  ScanDir('Z:\Downloads', '*.*', ListBox1.Items);
  ListBox1.Items.SaveToFile('Z:\Dir.txt');
  Close;
end;


end;
end.

Последний раз редактировалось lmikle, 18.05.2011 в 21:27.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter