[ Pobierz całość w formacie PDF ]

w pętli metodą Items.Add, dodającą tylko jedną, już zmodyfikowaną pozycję. Poza
tym podkreśliliśmy różnice między plikami a podkatalogami znajdującymi się w pre-
zentowanym katalogu przez otoczenie nazw tych ostatnich nawiasami kwadratowymi.
Natomiast w przypadku dysków usunęliśmy znak ukośnika (slash) i pozostawiliśmy
jedynie symbol dysku typu  C: , który otoczyliśmy znakami .
Sama pętla użyta w powyższym kodzie jest również interesująca. Zastosowaliśmy
konstrukcjÄ™
for sciezka in listaPlikow do
listBox1.Items.Add(Path.GetFileName(sciezka));
Konieczne jest oczywiście zadeklarowanie zmiennej sciezka typu String, która będzie
reprezentowała bieżący element tablicy lub kolekcji wskazanej za słowem kluczowym in.
Jest to konstrukcja analogiczna do znanej z C# foreach o identycznym działaniu jak
zwykła pętla for następującej postaci:
for i:=0 to Length(listaPlikow)-1 do
listBox1.Items.Add(Path.GetFileName(listaPlikow[i]));}
Przejdzmy na zakładkę pliku WinForm.pas. W widoku projektowania formy, na której
umieszczony został komponent, powinna być widoczna zawartość katalogu projektu.
Możemy skontrolować, czy zmiany w kodzie odniosły zamierzony skutek (wcześniej
należy koniecznie kod skompilować). Po tych zmianach komponent powinien prezen-
tować się znacznie lepiej (rysunek 7.2).
Projekt 126. Uwzględnić filtrowanie plików
z maską określoną przez pole filtr
Wzorem analogicznego komponentu VCL dodamy możliwość filtrowania prezento-
wanej listy plików zgodnie z ustaloną przez użytkownika maską. Wystarczy do kodu
metody PobierzZawartoscKatalogu dodać jedną linię, która w przypadku gdy referencja
268 Część III f& Projektowanie komponentów
Rysunek 7.2.
PodglÄ…d formy
w widoku
projektowania
filtr nie jest równa nil (nie jest pusta), wykorzystuje ją jako drugi argument przecią-
żonej metody Directory.GetFiles (listing 7.7)
Listing 7.7. Uwzględniamy możliwość określenia maski plików w metodzie PobierzZawartoscKatalogu
if uwzglednijPliki then
begin
if (filtrnil) then
listaPlikow:=Directory.GetFiles(sciezkaKatalogu,filtr)
else
listaPlikow:=Directory.GetFiles(sciezkaKatalogu);
System.Array.Sort(listaPlikow);
for i:=0 to Length(listaPlikow)-1 do
listBox1.Items.Add(Path.GetFileName(listaPlikow[i]));
end;
Aby przetestować działanie filtru:
1. zmieniamy na chwilÄ™ polecenie inicjacji pola filtr w konstruktorze na:
filtr:='*.pas';,
2. kompilujemy kod projektu i komponentu naciskajÄ…c klawisze Ctrl+F9,
3. przechodzimy do widoku projektowania formy WinForm.
Wykorzystaliśmy wersję przeciążonej metody Directory.GetFiles, w której drugi argu-
ment jest maską plików zwracanych w tablicy łańcuchów przez tę funkcję. Efekt wi-
doczny jest na rysunku 7.3. Podobnie przeciążona jest metoda Directory.GetDirectories.
Po sprawdzeniu działania filtra przywracamy pierwotną postać inicjującego go pole-
cenia, a mianowicie filtr:=nil;.
Wykonajmy jeszcze jeden test. Zmieńmy podaną w listingu 7.2 ścieżkę tak, żeby wska-
zywała na katalog główny jakiegoś dysku w celu upewnienia się, że w takiej sytuacji
nie są pokazywane dwie kropki symbolizujące katalog nadrzędny. Warto również prze-
testować pola uwzglednijKatalogi, uwzglednijPliki i uwzglednijDyski.
Rozdział 7. f& Kontrolka Windows Forms 269
Rysunek 7.3.
Efekt działania
filtra *.pas [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • oralb.xlx.pl