Avatar billede disken4 Nybegynder
10. januar 2002 - 21:21 Der er 7 kommentarer

søg

jeg er begyndt på at lave en søgemaskine der kan søge efter filer, men vis man bare skriver test og man vil finde test.ini kan den ikke det og man skal angive den rigtige sti forat den kan finde den.

den se sådan ud:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, inifiles, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    folder: TEdit;
    fileedit: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    ListBox1: TListBox;
    Label3: TLabel;
    Button3: TButton;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  procedure ShowForm;stdcall;external \'Project1dll.dll\' name \'ShowDllForm\';
  function ShowFormModal:integer;stdcall;external \'Project1dll.dll\' name \'ShowDllFormModal\';
var
  Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowFormModal;
  end;

procedure TForm1.Button3Click(Sender: TObject);
var SR: TSearchRec;
var E: Integer;
var sl: tstringlist;
var listboxt:TListBox;
begin



ListBox1.Clear;
  sl := tstringlist.create;
  E := FindFirst(folder.Text + fileedit.Text, faAnyFile, SR);
  try
    while E=0 do
    begin
    ListBox1.Items.Add(sr.name);
      e := findnext(sr);
    end;
  finally
    findclose(sr);
    sl.free;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
ini:tinifile;
begin
ini := TIniFile.Create(\'c:\\indstillinger.ini\');
folder.Text := ini.ReadString (\'folder\',\'path\',\'\');
ini.Free;
end;

end.
Avatar billede ziron Nybegynder
10. januar 2002 - 21:25 #1
kig på det her fra martin, er noget som kan scanne mapper også:

http://195.184.32.198/mali/uScanner.pas

/ZIRON
Avatar billede dkn Nybegynder
10. januar 2002 - 21:25 #2
FindFirst søger kun i en folder - og ikke engang subfolders.

Du skal altså hode den så den søger efter subfolders og forsætter med søgningen.

Jeg har et komponent som kan gøre det, det er freeware og med source.

kom med din mail så får du den.

dkn
Avatar billede dkn Nybegynder
10. januar 2002 - 21:27 #3
Gem den her som FindFile.pas:


unit FindFile;

interface

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

type
  TFileAttrKind = (ffaReadOnly, ffaHidden, ffaSysFile, ffaVolumeID, ffaDirectory, ffaArchive, ffaAnyFile);
  TFileAttr = set of TFileAttrKind;

  TFindFile = class(TComponent)
  private
    s : TStringList;

    fSubFolder : boolean;
    fAttr: TFileAttr;
    fPath : string;
    fFileMask : string;

    procedure SetPath(Value: string);
    procedure FileSearch(const inPath : string);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    function SearchForFiles: TStringList;
  published
    property FileAttr: TFileAttr read fAttr write fAttr;
    property InSubFolders : boolean read fSubFolder write fSubFolder;
    property Path : string read fPath write SetPath;
    property FileMask : string read fFileMask write fFileMask ;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents(\'Samples\', [TFindFile]);
end;

constructor TFindFile.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Path := IncludeTrailingBackslash(GetCurrentDir);
  FileMask := \'*.*\';
  FileAttr := [ffaAnyFile];
  s := TStringList.Create;
end;

destructor TFindFile.Destroy;
begin
  s.Free;
  inherited Destroy;
end;

procedure TFindFile.SetPath(Value: string);
begin
  if fPath <> Value then
  begin
    if Value <> \'\' then
      if DirectoryExists(Value) then
        fPath := IncludeTrailingBackslash(Value);
  end;
end;

function TFindFile.SearchForFiles: TStringList;
begin
  s.Clear;
  try
    FileSearch(Path);
  finally
    Result := s;
  end;
end;

procedure TFindFile.FileSearch(const InPath : string);
var Rec  : TSearchRec;
    Attr : integer;
begin
Attr := 0;
if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly;
if ffaHidden in FileAttr then Attr := Attr + faHidden;
if ffaSysFile in FileAttr then Attr := Attr + faSysFile;
if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
if ffaDirectory in FileAttr then Attr := Attr + faDirectory;
if ffaArchive in FileAttr then Attr := Attr + faArchive;
if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile;

if SysUtils.FindFirst(inPath + FileMask, Attr, Rec) = 0 then
try
  repeat
    s.Add(inPath + Rec.Name);
  until SysUtils.FindNext(Rec) <> 0;
finally
  SysUtils.FindClose(Rec);
end;

If not InSubFolders then Exit;

if SysUtils.FindFirst(inPath + \'*.*\', faDirectory, Rec) = 0 then
try
  repeat
  if ((Rec.Attr and faDirectory) > 0) and (Rec.Name<>\'.\') and (Rec.Name<>\'..\') then
    begin
      FileSearch(IncludeTrailingBackslash(inPath + Rec.Name));
    end;
  until SysUtils.FindNext(Rec) <> 0;
finally
  SysUtils.FindClose(Rec);
end;
end;

end.
Avatar billede disken4 Nybegynder
10. januar 2002 - 21:43 #4
hvordan skal jeg så fra en anden form bruge setpathog alle de andre
Avatar billede dkn Nybegynder
10. januar 2002 - 21:54 #5
Du gemmer overnævnte kode med navnet \"FindFile.pas\"
Derefter går du ind i delphi, meuen -> Component -> Install Component -> Into New Package -> Åbner files som du lige gemte, og skriver \"_findfile\" i package filename.

og så ok. Ny har den bygget componentet, og det skal nu bare installeres ved at klike \"Install\" i den lille dialog som er kommet frem.

Efter alt dette kopier du FindFile.pas til mappen: Delpi\\LIB\\

Nu er den installeret, jeg tror at du kan finde componenten under sample.

dkn
Avatar billede martinlind Nybegynder
10. januar 2002 - 22:03 #6
Som Ziron skrev har jeg lavet en comp. du kan bruge www.e-lind.dk
den hedder scanner

/Martin
Avatar billede borrisholt Novice
11. januar 2002 - 08:25 #7
Hvis du ikke vil bruge komponenter kar jeg skrevet en klasse der kan det sammen .. Den finder du på http://borrisholt.com

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester