
A mellékelt példaprogram megnyitása előtt a DPRSearch.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens ugyanúgy működik, mint egy hagyományos ListBox. Rendelkezik azonban két további metódussal.
A SearchForDPR metódus meghívásával kereshetünk Delphi projecteket.
procedure SearchForDPR(SearchDir: String; SearchSub: Boolean);
A SearchDir paraméterben a keresés kezdeti könyvtárát kell megadnunk. Ha a SearchSub paraméterben igaz értéket adunk meg, akkor a keresés a megadott könyvtár alkönyvtáraiban is megtörténik. Hamis érték esetén a metódus csak a SearchDir-ben megadott könyvtárban keres.
A keresés eredményét a komponens azonnal megjeleníti. A komponens korábbi tartalma azonban nem törlődik.
Ha a komponens használata alatt egy elemre duplán kattintunk az egér bal oldali gombjával, akkor megnyílik a Delphi és betölti az adott project-et. Egy project-et bármikor megnyithatunk a LoadDPR metódus használatával is.
procedure LoadDPR(Project: String);
A Project paraméterben a megnyitandó Delphi project elérési útját és nevét kell megadnunk.
A komponens elkészítése
A komponenst a TCustomListBox osztályból származtatjuk.
A project-keresés algoritmusát a SearchForDPR metódusban programozzuk le.
procedure SearchForDPR(SearchDir: String; SearchSub: Boolean);
Amennyiben a SearchSub paraméter értéke igaz, ennek a függvénynek rekurzív módon kell működnie.
A keresést a megadott könyvtárban kezdjük. A kereséshez a FindFirst – FindNext utasításpárost használjuk.
A könyvtárban található első állománybejegyzést a FindFirst függvénnyel találhatjuk meg. A további állományok megtalálásához a FindNext függvényt kell használnunk.
if FindFirst(SearchDir+'*.*',faAnyFile,F)=0 then begin
repeat
Azért kell a keresést *.*-al végeznünk, mert az alkönyvtárakat és a DPR állományokat is egyaránt meg akarjuk találni.
Ha a megtalált bejegyzés könyvtár és a SearchSub értéke is igaz, akkor rekurzió következik.
if (F.Attr and faDirectory)<>0 then begin
if SearchSub and (F.Name[1]<>'.') then
SearchForDPR(SearchDir+F.Name,SearchSub);
end
Ha egy project--et találtunk, akkor azt egyszerűn felvesszük a listába.
else begin
if LowerCase(ExtractFileExt(F.Name))='.dpr' then
Items.Add(SearchDir+F.Name);
end;
A keresés egészen addig tart, amíg az utolsó állományt is beolvastuk.
Amikor a felhasználó duplán kattint a lista egy elemére, illetve a LoadDPR metódus meghívásakor ugyanazt a műveletet kell végrehajtanunk.
A ShellAPI unit, ShellExecute függvényének meghívásával arra utasítjuk az operációs rendszert, hogy a megadott project-et töltse be.
Ha a Delphi valamelyik verzióját már megnyitottuk, akkor a project általa kerül megnyitásra.
Amennyiben nincs megnyitva Delphi program, az operációs rendszer megnyitja azt, majd betölti a megadott project-et. Ha több Delphi verzió van számítógépünkön, akkor az kerül megnyitásra, amelyiket a DPR kiterjesztésű állományokhoz hozzárendeltük.
ShellExecute(0,'open',PChar('"'+Project+'"'),'',PChar(ExtractFilePAth(Project)),SW_SHOW);
A ShellExecute függvény paraméterei a következők: a függvényt hívó ablak azonosítója, művelet, a megnyitandó állomány, a megnyitandó állománynak átadandó paraméterek (amennyiben alkalmazás), munkakönyvtár, a megnyitott állomány megjelenítésének módja.