home *** CD-ROM | disk | FTP | other *** search
- {*******************************************************
- DirNav Component
-
- This unit contains the code for the DirNav component.
-
- This component implements one property,
- Enabled -- if tru the component is enabled.
-
- Three events,
- BeforeNavigate -- code to execute before navigating directories.
- AfterNavigate -- code to execute after navigating directories.
- OnRecurse -- code to execute every time directory changes.
-
- I tried to add an Application.ProcessMessages line in the OnRecurse
- method but it is too slow. Add this line to your own OnRecurse
- methods if you need it to break out of the loop.
-
- Paul Warren
- HomeGrown Software Development
- (c) 1995 Langley British Columbia.
- (604) 530-9097
- e-mail: hg_soft@uniserve.com
- Home page: http://haven.uniserve.com/~hg_soft
-
- ********************************************************}
-
- unit DirNav;
-
- {$S-,W-,R-}
- {$C PRELOAD}
-
- interface
-
- uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls, Forms, Menus,
- Graphics, StdCtrls;
-
- type
- TDirNavigator = class(TComponent)
- private
- { Private declarations }
- FEnabled: Boolean;
- FBeforeNavigate: TNotifyEvent;
- FAfterNavigate: TNotifyEvent;
- FOnRecurse: TNotifyEvent;
- procedure SetBeforeNavigate(Value: TNotifyEvent);
- procedure SetAfterNavigate(Value: TNotifyEvent);
- procedure SetOnRecurse(Value: TNotifyEvent);
- protected
- { Protected declarations }
- public
- { Public declarations }
- constructor Create(AOwner: TComponent); override;
- procedure Navigate;
- published
- { Published declarations }
- property Enabled: Boolean read FEnabled write FEnabled default True;
- property BeforeNavigate: TNotifyEvent read FBeforeNavigate write SetBeforeNavigate;
- property AfterNavigate: TNotifyEvent read FAfterNavigate write SetAfterNavigate;
- property OnRecurse: TNotifyEvent read FOnRecurse write SetOnRecurse;
- end;
-
- procedure Register;
-
- implementation
-
- {$IFDEF WIN32}
- {$R DIRNAV.D32}
- {$ELSE}
- {$R DIRNAV.D16}
- {$ENDIF}
-
- { TDirNavigator }
- constructor TDirNavigator.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- FEnabled := True;
- end;
-
- procedure TDirNavigator.SetBeforeNavigate(Value: TNotifyEvent);
- begin
- FBeforeNavigate := Value;
- end;
-
- procedure TDirNavigator.SetAfterNavigate(Value: TNotifyEvent);
- begin
- FAfterNavigate := Value;
- end;
-
- procedure TDirNavigator.SetOnRecurse(Value: TNotifyEvent);
- begin
- FOnRecurse := Value;
- end;
-
- procedure TDirNavigator.Navigate;
-
- procedure ReadDirectory;
- var
- IsFileEntry: boolean;
- Sr: TSearchRec;
- DosError: integer;
- begin
- if FEnabled then
- begin
- if Assigned(FOnRecurse) then FOnRecurse(Self);
- DosError := FindFirst('*.*', faDirectory, Sr);
- while DosError = 0 do with Sr do
- begin
- IsFileEntry := Name[1] <> '.';
- if IsFileEntry and (Attr and faDirectory <> 0) then
- begin
- ChDir(Name);
- ReadDirectory;
- ChDir('..');
- end;
- DosError := FindNext(Sr);
- end;
- end;
- end;
-
- begin
- if Assigned(FBeforeNavigate) then FBeforeNavigate(Self);
- ReadDirectory;
- if Assigned(FAfterNavigate) then FAfterNavigate(Self);
- end;
-
- procedure Register;
- begin
- RegisterComponents('HomeGrown', [TDirNavigator]);
- end;
-
- end.
-