Hi,
in meinem ersten Tutorial möchte ich euch erklären/zeigen wie ihr einen eigenen Suchdienst in Delphi proggen könnt. Dieser hat den mehrere Vor- und Nachteile
Pro:
- Ihr erlernt die Sprache und und deswegen machen wir das ja überhaupt erst
- Er geht meiner Meinung schneller als der Windows eigene Suchfunktion
- Sie sucht nur wirklich nur Dateien mit dem exakt angegebenen Namen (was vlt. Auch ein Nachteil sein könnte)
Contra
- Wie schon angesprochen sucht sie nur nach Dateiendungen oder dem exakten Namen
- Sonst fällt mir eigentlich gar nix ein.
Was brauchen wir?
- Delphi
- Menschenverstand
Los geht’s…
Als erstes öffnet ihr nun Delphi. Ich benutze auf den Bildern Delphi 2010. Bitte nicht wundern. Es ist keine illegale Version. Bloß eine Demo, die ich über TimeShifter aufrecht erhalte.
Also, los geht’s, öffnet eine VCL Anwendung
Wenn ihr das habt, bestückt euer Formular mit folgenden Komponenten:
- 2 Groupboxen
- 2 Buttons oder 2 BitBtn
- 1 Label
- Und 1 Edit Feld
Beschriftet die Komponenten anschließend wie auf dem bild
Wechselt mit F12 in den Code Editor.
Schreibt nun unter folgenden Code die neue Prozedure:
Code:
Procedure FindFiles (aPath, aFindMask: String; aResult: tStrings);
Var
FindRec: tSearchRec;
Begin
// Wenn unser Edit Feld nicht ausgefüllt wurde dann abbrechen
If (aPath = '') or (aFindMask = '') or Not Assigned (aResult) Then
Exit;
// Wenn der Pfad unvollständig, ein "\" eibfügen
If aPath[Length (aPath)] <> '\' Then
aPath := aPath + '\';
// Im aktuellen Verzeichnis nach der Datei suchen
If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then
Repeat
If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then
// ...Ergebnis in die Stringlist einfügen
aResult.Add (aPath + FindRec.Name);
Until FindNext (FindRec) <> 0;
FindClose (FindRec);
// In Unterverzeichnissen weiter suchen
If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then
Repeat
If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then
// Feststellen, ob es sich um ein Verzeichnis handelt
If Boolean (FindRec.Attr and faDirectory) Then
// Im nächstes verzeichnis suchen ;)
FindFiles (aPath + FindRec.Name, aFindMask, aResult);
Until FindNext (FindRec) <> 0;
FindClose (FindRec);
End;

Wie gehts weiter?
So, den Code haben wir.. Nur er nützt uns noch nix. Um ihn aufzurufen doppelklicken wir auf den Button mit der Aufschrift "Datei(n) suchen".
Dort gehört folgender Code hinein:
Code:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Eingabe: String;
Find: Integer;
begin
Eingabe := String(Edit1.Text); // (1)
FindFiles ('C:\', PWideChar(Eingabe), ListBox1.Items); // (2)
Find := listbox1.items.count; // (3)
GroupBox1.Caption := 'Es wurden ' + (IntToStr(Find))+ ' ' + Eingabe + ' Datein gefunden';
end;
(2): Ist der eigentliche Aufruf der Funktion. Start ist im laufwerk C:\. Unser zu suchendes Objekt wird nun von einem String in ein PChar umgewandelt. Anschließend wird es in der ListBox angezeigt.
(3): Als nächstes werden die Einträge in der ListBox gezählt
Kommt noch was?
Als kleines Extra habe ich mir gedacht, das man die Datei direkt öffnen kann.
Dazu verwenden wir die "ShellAPI". Diese bitte unbedingt voher einbinden.
Code:
uses ShellAPI;
"Datei oder Programm öffnen" und folgenden Code einfügen.
Code:
var s:string; begin s := ListBox1.Items[ListBox1.ItemIndex]; // wählt einen entsprechenden Eintrag aus shellexecute(handle, 'open', PChar( s), nil, nil, sw_show); // öftnet die Datei end;
Nachtrag
Ich hoffe euch hat mein erstes Tutorial gefallen. Wenn es gut ankommt, werde ich auch gerne weitere erstelln. ich hoffe auch das es sehr Anwenderfreundlich geschrieben wurde.
Hier nochmal der Komplette Code:
Außerdem kann alles nochmal gedownloaded werden.
Über ein Thanks würde ich mich auch sehr freuen






