yardım

sanes
25-12-2006, 23:35   |  #1  
OP Yeni Üye
Teşekkür Sayısı: 0
24 mesaj
Kayıt Tarihi:Kayıt: Ara 2006

merhaba arkadaşlar ben bil.böl öğrenciyim ve final ödevim için sizden yardım isteyecektim.delphide bilgisayarın herhangi bir yerinde bulunan resim belgelerini bulan bir program yapmam lazım ama daha önde bu programı kullanmadığım için nasıl yapılacağını bilmiyorum.bana yardımcı olursanız sevinirim.şimdiden saolun.

muammerturkmen
26-12-2006, 12:09   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
359 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Delphi Türk KodBank 3.1 de olması lazım bir gözat olmayabilirde

birden çok mesajda gönderme

Memik_
26-12-2006, 16:10   |  #3  
Yeni Üye
Teşekkür Sayısı: 0
22 mesaj
Kayıt Tarihi:Kayıt: Ara 2006

Aşağıda verdiğim metni yakında piyasaya çıkacak Turbo Delphi kitabımdan aynen aldım. Umarım size fikir verir.

Programcılar genel alışkanlık ile üzerinde işlem yapmak istedikleri dosyanın mevcut olup olmadığını kontrol etmeden dosya üzerinde işlem yapmaya başlamazlar. Delphi’de ilgilendiğiniz dosyanın varlığını kontrol etmek istiyorsanız FileExists() metodunu kullanabilirsiniz. Bu metot kendisine parametre olarak verilen dosya işaret edilen klasörde varsa geriye True bilgisini göndermektedir.

If not FileExists('C:\Athena.bmp') Then
   ShowMessage('Dosya bulunamadı');

Herhangi bir sürücü veya klasörde dosya aramak istiyorsanız FindFirst(), FindNext() ve FindClose() metotlarını kullanabilirsiniz. Bu metotlar ile dosya aranırken Delphi’nin TSearchRec tipinden yararlanılmaktadır. Toplam 7 elemana sahip bu tipin yapısı aşağıda verildi.

TSearchRec = record     Time: Integer;     Size: Integer;     Attr: Integer;     Name: TFileName;     ExcludeAttr: Integer;     FindHandle: THandle;     FindData: TWin32FindData; end;

Dosya araması yaparken Delphi’in bu tipini kullanmak yerine benzer özellikte elemanlara sahip kendi tipinizi tanımlayıp kullanabilirsiniz. “\Windows” klasöründeki ilk EXE dosyanın adını öğrenmek üzere FindFirst() metunu aşağıdaki gibi kullandım. Bu kodu dikkatlice incelerseniz FindFirst() metodu 3 parametreye sahiptir.

İlk parametrede aranmak dosya veya dosyalar işaret edilmektedir. 2. parametrede ise aranmak istenen dosya tipi belirtilmektedir. Örneğin arama gizli dosyalar arasında yapılmak isteniyorsa 2. parametre olarak “aHidden” seçeneği kullanılmalıdır.

Var
   Dosya : TSearchRec;
Begin
    FindFirst(‘C:\Windows\*.exe, faAnyFile, Dosya);
     ShowMessage(Dosya.Name);               
End;

Bu kod işletildiğinde işaret edilen klasördeki ilk EXE dosyanın adı ekrana getirilir. Belirtilen şartları sağlayan herhangi bir dosya yoksa TSearchRec yapısının Name elemana boşluk aktarılır.  Aranıp bulunan dosyanın diğer özellikleri görebilmek için projenin formunu 3 ListBox ve 1 Edit yerleştirdim.

Kullanıcı aramanın yapılacağı yolu ve dosya arama kriterini Edit’e yazıp “İlk Dosya” başlıklığını verdiğim  düğmeyi tıkladığı zaman bulunacak ilk dosyanın adının ilk ListBox’a, tarih ve saat bilgisinin 2. ListBox’a yazılmasını sağlamak aşağıda verdiğim kodu yazdım. Bu kod sayesinde ilk dosyanın adı, tarih-saati ve büyüklüğü ListBox’lara aktarılır.

procedure TForm1.ilk_dosyaClick(Sender: TObject);
Var
   Dosya : TSearchRec;
Begin
   FindFirst(Edit1.Text, faAnyFile, Dosya);
   ListBox1.Items.Add(Dosya.Name);
   ListBox2.Items.Add(DateTimeToStr(FileDateToDateTime(Dosya.Time)));
   ListBox3.Items.Add(IntToStr(Dosya.Size));
end;

FindFirst() metoduna 1. parametre olarak verilen klasör ve şartlara uygun birden fazla dosya varsa bir sonraki dosya hakkında bilgi edinmek için FindNext() metodu kullanılabilir. FindNext() metodu araka arkaya birden fazla kez kullanılarak ilgili klasördeki bütün dosyalar bulunabilir. C: sürücüsünün \Windows klasöründeki bütün EXE dosyaları ListBox’lara aktarmak için aşağıda verdiğim kodu hazırladım.

Var
   Dosya : TSearchRec;
begin
   FindFirst('C:\Windows\*.EXE', faAnyFile, Dosya);
   Repeat
      ListBox1.Items.Add(Dosya.Name);
      ListBox2.Items.Add(DateTimeToStr(FileDateToDateTime(Dosya.Time)));
      ListBox3.Items.Add(IntToStr(Dosya.Size));
   Until FindNext(Dosya) <> 0;
   FindClose(Dosya);
end;