Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[7459] Re:filelistbox에 대한 질문입니다.
류종택 [] 935 읽음    2001-09-26 10:03
저의 경우에는 화일 검색은 자주 쓸 일이 있어서.. 콤포넌트를 만들었습니다..
아래 소스를 참고하세요..


From 류..

----------

1. 프로그램 소스

procedure TForm1.Button1Click(Sender: TObject);
begin
  SearchDir1.Search('C:\', True);
  // SearchDir1.Search('C:\', False); 이면 C: 전체를 찾아냄
end;

procedure TForm1.SearchDir1FindFile(Sender: TObject; Folder,
  FileName: String);
begin
  Memo1.Lines.Add(FileName);
end;

2. 콤포넌트 소스
unit SearchDir;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TFindFileEvent = Procedure (Sender:TObject; Folder,FileName:String) of Object;
  TFindFileInfoEvent = Procedure (Sender:TObject; FileInfo:TSearchRec) of Object;
  TFindFolderEvent = Procedure (Sender:TObject; Folder:String) of Object;
  TStopEvent = Procedure (Sender:TObject) of Object;
  TCompleteEvent = Procedure (Sender:TObject) of Object;

  TSearchDir = class(TComponent)
  private
    { Private declarations }
    FFindFileEvent : TFindFileEvent;
    FFindFileInfoEvent : TFindFileInfoEvent;
    FFindFolderEvent : TFindFolderEvent;
    FStopEvent : TStopEvent;
    FCompleteEvent : TCompleteEvent;

    FindFileName : String;
  protected
    { Protected declarations }
    Procedure SearchDirectory(PathName:String; OnlyOne:Boolean);
  public
    { Public declarations }
    Stop : Boolean;
    Procedure Search(PathName,FileName:String; OnlyOne:Boolean); OverLoad;
    Procedure Search(PathName:String; OnlyOne:Boolean); Overload;
  published
    { Published declarations }
    Property OnFindFile : TFindFileEvent Read FFindFileEvent Write FFindFileEvent;
    Property OnFindFileInfo : TFindFileInfoEvent Read FFindFileInfoEvent Write FFindFileInfoEvent;
    Property OnFindFolder : TFindFolderEvent Read FFindFolderEvent Write FFindFolderEvent;

    Property OnStop : TStopEvent Read FStopEvent Write FStopEvent;
    Property OnComplete : TCompleteEvent Read FCompleteEvent Write FCompleteEvent;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Ryu', [TSearchDir]);
end;

Procedure TSearchDir.SearchDirectory(PathName:String; OnlyOne:Boolean);
Var
   Di : TSearchRec;
   Found : Integer;
   SearchStr : String;
Begin
  SearchStr:= PathName;
  If (SearchStr[Length(SearchStr)] = '\') then SetLength(SearchStr, Length(SearchStr)-1);

  If Assigned(OnFindFolder) then OnFindFolder(Self, SearchStr);

  Found:= FindFirst(SearchStr+'\'+FindFileName, faDirectory, Di);
  While Found = 0 do
    Begin
      Application.ProcessMessages;
      If Stop then Exit;

      If (Di.Name <> '.' ) and
         (Di.Name <> '..') then
         Begin
           If ((Di.Attr and faDirectory) = faDirectory) and
              (not OnlyOne) then SearchDirectory(SearchStr+'\'+Di.Name, OnlyOne)
           Else
             Begin
               If Assigned(OnFindFile) then OnFindFile(Self, SearchStr, Di.Name);
               If Assigned(OnFindFileInfo) then OnFindFileInfo(Self, Di);
             End;
         End;
      Found := FindNext(Di);
    End;
  FindClose(Di);
End;

Procedure TSearchDir.Search(PathName,FileName:String; OnlyOne:Boolean);
Begin
  Stop:= False;
  FindFileName:= FileName;
  SearchDirectory(PathName, OnlyOne);
  If Stop and Assigned(OnStop) then OnStop(Self);
  If (not Stop) and Assigned(OnComplete) then OnComplete(Self);
End;

Procedure TSearchDir.Search(PathName:String; OnlyOne:Boolean);
Begin
  Search(PathName, '*.*', OnlyOne);
End;

end.

+ -

관련 글 리스트
7458 filelistbox에 대한 질문입니다. 델초짜 1108 2001/09/26
7459     Re:filelistbox에 대한 질문입니다. 류종택 935 2001/09/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.