git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
205 lines
5.9 KiB
ObjectPascal
205 lines
5.9 KiB
ObjectPascal
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.sourceforge.net
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
unit JvSearchFileMainFormU;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, JvListbox, JvComponent, JvCtrls, JvSearchFiles, Mask, JvToolEdit,
|
|
ComCtrls, JvEdit, Menus, JvFormPlacement, JvExMask, JvAppStorage,
|
|
JvAppIniStorage;
|
|
|
|
type
|
|
TJvSearchFileMainForm = class(TForm)
|
|
JvSearchFile1: TJvSearchFiles;
|
|
GroupBox1: TGroupBox;
|
|
JvDirectoryBox1: TJvDirectoryEdit;
|
|
btnSearch: TButton;
|
|
Label1: TLabel;
|
|
chkRecursive: TCheckBox;
|
|
Label2: TLabel;
|
|
edFileMask: TEdit;
|
|
GroupBox2: TGroupBox;
|
|
btnCancel: TButton;
|
|
reFoundFiles: TRichEdit;
|
|
JvFormStorage1: TJvFormStorage;
|
|
StatusBar1: TStatusBar;
|
|
chkClearList: TCheckBox;
|
|
chkNoDupes: TCheckBox;
|
|
cbContainText: TComboBox;
|
|
rbInclude: TRadioButton;
|
|
rbExclude: TRadioButton;
|
|
JvAppIniFileStorage1: TJvAppIniFileStorage;
|
|
procedure btnSearchClick(Sender: TObject);
|
|
procedure JvSearchFile1FindFile(Sender: TObject; const AName: string);
|
|
procedure btnCancelClick(Sender: TObject);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure JvSearchFile1BeginScanDir(Sender: TObject;
|
|
const AName: String);
|
|
procedure OptionsChange(Sender: TObject);
|
|
procedure Sort1Click(Sender: TObject);
|
|
procedure Clear1Click(Sender: TObject);
|
|
procedure JvSearchFile1Progress(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
procedure AddSearchTextToComboBox;
|
|
end;
|
|
|
|
var
|
|
JvSearchFileMainForm: TJvSearchFileMainForm;
|
|
|
|
implementation
|
|
uses
|
|
JvJVCLUtils, JvJCLUtils;
|
|
|
|
{$R *.DFM}
|
|
|
|
procedure TJvSearchFileMainForm.btnSearchClick(Sender: TObject);
|
|
begin
|
|
btnSearch.Enabled := false;
|
|
btnCancel.Enabled := true;
|
|
Screen.Cursor := crHourGlass;
|
|
try
|
|
if chkClearList.Checked then
|
|
reFoundFiles.Lines.Clear;
|
|
AddSearchTextToComboBox;
|
|
JvSearchFile1.Files.Clear;
|
|
JvSearchFile1.Directories.Clear;
|
|
JvSearchFile1.FileParams.FileMasks.Text := edFileMask.Text;
|
|
if chkRecursive.Checked then
|
|
JvSearchFile1.DirOption := doIncludeSubDirs
|
|
else
|
|
JvSearchFile1.DirOption := doExcludeSubDirs;
|
|
// don't store file and folder names - we do that in the memo
|
|
JvSearchFile1.Options := JvSearchFile1.Options + [soOwnerData];
|
|
JvSearchFile1.RootDirectory := JvDirectoryBox1.EditText;
|
|
JvSearchFile1.Search;
|
|
finally
|
|
StatusBar1.Panels[0].Text := Format('(%d matching items found)',[reFoundFiles.Lines.Count]);
|
|
btnSearch.Enabled := true;
|
|
btnCancel.Enabled := false;
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
function ContainsText(const Filename,AText:string):boolean;
|
|
var S:TMemoryStream;tmp:string;
|
|
begin
|
|
Result := false;
|
|
S := TMemoryStream.Create;
|
|
try
|
|
S.LoadFromFile(Filename);
|
|
if S.Memory <> nil then
|
|
begin
|
|
tmp := PChar(S.Memory);
|
|
tmp := AnsiLowerCase(tmp);
|
|
Result := Pos(AnsiLowerCase(AText),tmp) > 0;
|
|
end;
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.JvSearchFile1FindFile(Sender: TObject;
|
|
const AName: string);
|
|
begin
|
|
StatusBar1.Panels[0].Text := Format('Searching in %s...',[AName]);
|
|
StatusBar1.Update;
|
|
if (cbContainText.Text <> '') then
|
|
if rbInclude.Checked <> ContainsText(AName,cbContainText.Text) then
|
|
Exit;
|
|
if not chkNoDupes.Checked or (reFoundFiles.Lines.IndexOf(AName) < 0) then
|
|
reFoundFiles.Lines.Add(AName);
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.btnCancelClick(Sender: TObject);
|
|
begin
|
|
JvSearchFile1.Abort;
|
|
btnCancel.Enabled := false;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
begin
|
|
btnCancel.Click;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
// JvAppINIFileStore1.FileName := ChangeFileExt(Application.ExeName,'.ini');
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.JvSearchFile1BeginScanDir(Sender: TObject;
|
|
const AName: String);
|
|
begin
|
|
StatusBar1.Panels[0].Text := Format('Searching in %s...',[ExcludeTrailingPathDelimiter(AName)]);
|
|
StatusBar1.Update;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.OptionsChange(Sender: TObject);
|
|
begin
|
|
// rbInclude.Enabled := cbContainText.Text <> '';
|
|
// rbExclude.Enabled := rbInclude.Enabled;
|
|
StatusBar1.Panels[0].Text := 'Ready';
|
|
StatusBar1.Update;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.Sort1Click(Sender: TObject);
|
|
var S:TStringlist;
|
|
begin
|
|
S := TStringlist.Create;
|
|
try
|
|
S.Assign(reFoundFiles.Lines);
|
|
S.Sort;
|
|
while (S.Count > 0) and (S[0] = '') do S.Delete(0);
|
|
reFoundFiles.Lines := S;
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.Clear1Click(Sender: TObject);
|
|
begin
|
|
reFoundFiles.Clear;
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.AddSearchTextToComboBox;
|
|
begin
|
|
with cbContainText do
|
|
if (Text <> '') and (Items.IndexOf(Text) < 0) then
|
|
Items.Add(Text);
|
|
end;
|
|
|
|
procedure TJvSearchFileMainForm.JvSearchFile1Progress(Sender: TObject);
|
|
begin
|
|
Application.ProcessMessages;
|
|
end;
|
|
|
|
end.
|
|
|