TSearchRec fonksiyonu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

TSearchRec fonksiyonu

Mesaj gönderen Serhan01 »

arkadaşlar bir programın kodlarını inceliyorum. aşağıdaki kodlara takıldım kaldım. kod c:\windows içindeki .bmp dosyalarını buluyor ve listbox a ekliyor ama kullanılan if bloğu baya bir karışık geldi, içinden çıkamadım. if bloğunun türkçesini anlabilir misiniz? teşekkürler.

Kod: Tümünü seç

procedure TForm1.FillListBoxFor1stTime;
var  x : integer;
     DirInfo : TSearchRec;
     NamaFolderWindows : string;
     Buffer : array [0..255] of char;
begin
     GetWindowsDirectory (buffer, sizeof(buffer)-1);
     NamaFolderWindows := StrPas(Buffer);             //'c:\windows\';

// cari file-file BMP
     x := FindFirst (NamaFolderWindows + '\*.bmp', FaAnyFile, DirInfo);
     while x=0 do
     begin
           if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
              (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then

           ListBox1.Items.Add (NamaFolderWindows + '\'+ DirInfo.Name);
           Application.ProcessMessages;

           x := FindNext(DirInfo);
     end;
     SysUtils.FindClose (DirInfo);

end;
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: TSearchRec fonksiyonu

Mesaj gönderen tayipk »

Kod: Tümünü seç

if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
              (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
merhaba yukarıdaki kodun yani if bloğununTürkçe Meali

Kod: Tümünü seç

eğer ((DirInfo.Attr ve FaDirectory "Eşit Değilse" FaDirectory) ve 
        (DirInfo.Attr ve FaVolumeId "Eşit Değilse" FaVolumeID)) 
umarım soruyu doğru anlamışımdır :D kolay gelsin
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: TSearchRec fonksiyonu

Mesaj gönderen Serhan01 »

:) eyvallah hocam doğru bakış açısı ama benim istediğim değil, o kadarını anlayabiliyorum. if yapısını biliyorum ama if yapısı ile neyi hedeflediğini anlamayamadım.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: TSearchRec fonksiyonu

Mesaj gönderen warder »

http://docwiki.embarcadero.com/Librarie ... TSearchRec
Sizin için daha doyurucu olabilir.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TSearchRec fonksiyonu

Mesaj gönderen mrmarman »

Serhan01 yazdı:arkadaşlar bir programın kodlarını inceliyorum. aşağıdaki kodlara takıldım kaldım. kod c:\windows içindeki .bmp dosyalarını buluyor ve listbox a ekliyor ama kullanılan if bloğu baya bir karışık geldi, içinden çıkamadım. if bloğunun türkçesini anlabilir misiniz? teşekkürler.
Bu haliyle elde ettiğiniz liste ile İf bloğunu kaldırınca elde edilen listeyi karşılaştırma yaparak inceleyin. Farkı görerek daha akılda kalıcı bir şekilde anlayabilirsiniz.
Resim
Resim ....Resim
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: TSearchRec fonksiyonu

Mesaj gönderen xxxjedixxx »

Merhaba,

FindFirst (NamaFolderWindows + '\*.bmp', FaAnyFile, DirInfo);
Fonksiyonu ile windows dizininde ne kadar ".bmp" ile biten dosya veya klasör varsa aratıldığı için gelen sonuçlardan klasörlerin elenmesi gerekiyor. Bu yüzden aşağıdaki ifade kullanılmıştır.

(DirInfo.Attr and FaDirectory <> FaDirectory) ifadesinin anlamı şudur;

Bulunan her bir DirInfo sonucunun Attr değerinde, bulunan dosya yada klasörün sahip olduğu nitelikler (attribute) mevcuttur. Bu İşlemde, öncelik sırasına göre "and" operatörünün sonucu hesaplanır. Yani (DirInfo.Attr and faDirectory) işlemi önce yapılıyor sonra sonucun faDirectory değerinden faklı olup olmadığı karşılaştırılıyor.

faDirectory: sabit olup değeri 16 dır.

Örneğin; bulunan gizli bir klasör olsun.
Bu durumda, DirInfo.Attr değeri 18 olarak gelecektir. Çünkü, faHidden: 2'dir. Bu durumda, (faDirectory or faHidden) = 18'dir.
(18 and 16) işleminin sonucu 16 dır.

işleme devam ettiğimizde;
(DirInfo.Attr and faDirectory) <> fadirectory
16 <> 16 kalır. Yani karşılaştırmanın sonucu false çıkar ve bulunanın bir klasör olduğu anlaşılmış olur.

FaVolumeId ile kısmı da aynı şekilde hesaplanır. Ama volumeid ile ilgili kontrolün neden yapıldığını tam olarak anlamadım.
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: TSearchRec fonksiyonu

Mesaj gönderen Serhan01 »

arkadaşlar süpersiniz. konu anlaşılmıştır. çok teşekkür ederim.
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: TSearchRec fonksiyonu

Mesaj gönderen Serhan01 »

başka bir başlık açmadan burdan devam etmek daha uygun galiba.

c ve d sürüclerinde dosya ve klasör araması yapabilecek bir program yapmaya çalışıyorum ama şöyle bir problemle karşılaştım. programda bulunan dosyalar bir listbox da listelenecek. arama butonuna bastığımda listbox temizleniyor ve dosyaArama ismiyle tanımladığım prosedüre parameteleri gönderiyor. dosyaArama prosedüründe arama kritlerine yazıyorum buraya kadar problem yok. fakat listbox a listele kodlarını yazdığım zaman listbox ı dosyaArama fonksiyonu görmüyor. programı çalıştır dediğim de [dcc32 Error] Unit1.pas(43): E2003 Undeclared identifier: 'listbox' hatası alıyorum. prosedürü private kısmına tanımlamakla mı hata yaptım acaba? listbox ı bir yere declare etmem gerekiyor galiba. type kısmına baktığımda ListBox1: TListBox; şeklinde declare edildiğini görebiliyorum. hata nerde olabilir?

teşekkürler.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: TSearchRec fonksiyonu

Mesaj gönderen xxxjedixxx »

Listbox'ı formunun adı ile birlikte kullanmalısın. Arama fonksiyonu form'a ait olmadığı için form'a ait bir özelliği yada bileşeni kullanırken form.bilesen şeklinde kullanılır.
Yani; Form1.listbox.add(...); gibi.

Yada arama prosedürünü form'a tanımlarsın. Şöyle,

Diyelim formun sınıf adı TForm1 ve prosedurün adı da DosyaAra olsun. Bunu prosedürü formunun private yada public kısmına aşağıdaki gibi ekle

Kod: Tümünü seç

class TForm1 = TForm
  ...
  private
    procedure DosyaAra(param1, param2, ..);
    ...
end;
ve prosedür isminin başına aşağıdaki gibi Tform1'i ekle

Kod: Tümünü seç

procedure TForm1.DosyaAra(param1, param2, ..);
begin
  ...
end;
Bir ipucu vereyim. Mevcut prosedürünün isimin başına yukarıdaki gibi "TForm1." ekle ve klavyeden Shift+Control+C kombinasyonunu yap. Otomatik olarak fomun sınıf tanımlarına private bölümüne prosedürün eklenecektir.
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: TSearchRec fonksiyonu

Mesaj gönderen Serhan01 »

xxxjedixxx cevap için çok teşekkürler. problem çözülmüştür.
Cevapla