Btgunluk.com
Kişisel bir bilişim blogu
Delphi'de Dosya Adından Boşluk ve Parantez Silme
Windows'un güncel sürümlerinde bulunan güzel bir dosya adlandırma özelliği var. Kullanabilmek için birden fazla dosyayı seçip sonra sağ tıklayıp Yeniden Adlandır'ı seçiyoruz.
Daha sonra bir dosya ismi yazıyoruz.
Windows dosyalara otomatik olarak aşağıdaki gibi isimler veriyor.
Biz web sitesi sahipleri bu dosya isimlerinden çok memnun olmuyoruz çünkü web sitelerinde boşluk karakteri sıkıntı çıkarabilir. Dosya isimlerinde boşluk ve parantezlerden kurtulmak için ne yapıyoruz, hemen Delphi'de bir program yazıyoruz :)
Programımız şu şekilde çalışsın, adı değiştirilecek dosyaları programımıza sürükleyelim, sonra bir düğmeye bastığımızda dosya adınan boşluk ve parantezler silinsin.
Programı yazmak için Delphi'de yeni bir VCL Form Application projesin oluşturuyoruz. Ekrana gelen forma bir tane TButton bileşeni koyup özellikerini şu şekilde ayarlıyoruz:
object btnAdlandir: TButton Align = alTop Caption = 'Adlandır'
Yukarıdan da anlaşılacağı gibi düğmeminizin adını btnAdlandir yaptık, Align özelliğini alTop yaptık. Align özelliğine bu değeri vermemiz sayesinde düğmemiz formun boyutları ne olursa olsun her zaman formun üst kısmını kaplayacak.
Forma bir tane de TMemo bileşeni kyouyoruz ve onun özelliklerini de şu şekilde ayarlıyoruz.
object mmoDosyalar: TMemo Align = alClient
Burada da mmoDosyalar'ın Align özelliğine alClient değerini atadığımız için, formda TButton'dan kalan tüm alanı mmoDosyalar kaplayacak.
Formumuza Delphi dışından, Windows gezgininden dosya sürükleyeceğimiz işin içine Windows Api'leri giriyor, bu yüzden uses kısmına ShellApi'yi ekliyoruz.
uses ShellApi;
Sürükle bırak olaylarını yönetebilmek için private bölümünde aşağıdaki gibi bir alt program tanımlıyoruz:
procedure AppMessage(var Msg: Tmsg; var Handled: Boolean);
Bu alt programı aşağıdaki gibi yazıyoruz:
procedure TForm1.AppMessage(var Msg: Tmsg; var Handled: Boolean); const BufferUzunlugu: DWORD = 511; var SuruklenenDosyaAdi: string; DosyaSirasi: DWORD; SuruklenenDosyaSayisi: DWORD; diziSuruklenenDosyaAdi: array [0..511] of Char; SuruklenenDosyaUzunlugu: DWORD; begin if Msg.message = WM_DROPFILES then begin DosyaSirasi := $FFFFFFFF; SuruklenenDosyaSayisi := DragQueryFile(Msg.WParam, DosyaSirasi, diziSuruklenenDosyaAdi, BufferUzunlugu); for DosyaSirasi:=0 to (SuruklenenDosyaSayisi - 1) do begin SuruklenenDosyaUzunlugu:=DragQueryFile(Msg.WParam, DosyaSirasi, diziSuruklenenDosyaAdi, BufferUzunlugu); SuruklenenDosyaAdi:=StrPas(diziSuruklenenDosyaAdi); if Pos(SuruklenenDosyaAdi, mmoDosyalar.Text)=0 then mmoDosyalar.Lines.Add(SuruklenenDosyaAdi); end; DragFinish(Msg.WParam); Handled := true; end; end;
Yukarıdaki kodda 19. satırdaki kontrol sürüklenip bırakılan dosyaların TMemo'da tekrar etmesini engelliyor.
Sürükle bırakın çalışması için Form'un Create olayına aşağıdaki kodları ekliyoruz. Burada TMemo'nun bazı özelliklerini de ayarlıyoruz.
procedure TForm1.FormCreate(Sender: TObject); begin mmoDosyalar.Text:=''; mmoDosyalar.WordWrap:=False; mmoDosyalar.ScrollBars:=ssVertical; DragAcceptFiles(mmoDosyalar.Handle, True); Application.OnMessage:=AppMessage; end;
3. satır, TMemo'nun içeriğini siliyor. 4. satır satırların kaymasını önlüyor, 5. satır TMemo'da dikey kaydırma çubuğunun görünmesini sağlıyor. Diğer satırlar ise sürükle bırakın çalışması için gerekli.
Bir dosya isminden sayıyı ayıklayacak bir fonksiyona ihtiyacımız var. Bu fonksiyonu da şu şekilde yazıyoruz.
function SayiyiBul(metin: string): string; var i: integer; sonuc: string; begin for i:=1 to length(metin) do if metin[i] in ['0'..'9'] then sonuc:=sonuc+metin[i]; result:=sonuc; end;
Son olarak işi yapacak olan düğmemize şu kodları yazıyoruz.
procedure TForm1.btnAdlandirClick(Sender: TObject); var sayi, eskiad, yeniad: string; i: integer; begin for i:=0 to mmoDosyalar.Lines.Count-1 do begin if length(ExtractFileExt(mmoDosyalar.Lines[i]))<0 then exit; sayi:=SayiyiBul(mmoDosyalar.Lines[i]); eskiad:=mmoDosyalar.Lines[i]; yeniad:=StringReplace(eskiad, ' ('+sayi+')',sayi,[rfReplaceAll, rfIgnoreCase]); mmoDosyalar.Lines[i]:=yeniad; RenameFile(eskiad, yeniad); end; end;
Kodun 6. satırında TMemo'daki satır sayısı kadar bir döngü oluşruyoruz. Eğer satırdaki dosya isminde uzantı yoksa dikkate alınmamasını 8. satırdaki koşul ile sağlıyoruz. 10. satırda dosya adındaki sayıyı tespit ediyoruz. 12. satırda StringReplace fonksiyonu ile dosyamızın adını boşluk ve paranez içermeyecek şekilde oluşturuyoruz. 14. satırdaki RenameFile fonksiyonu ile dosyamızın adını değiştiriyoruz.
Programın exe'sine buradan ulaşabilirsiniz.
Programın kodlama sürecini buradan video olarak izleyebilirsiniz.
01.01.2017 01:01:01
Etiketler: delphi fonksiyonları
Yorumlar
Yazı hakkında yorum yapmak için, buraya tıklayın.
Kategoriler :
- Bilişim (52)
- C Sharp (1)
- Delphi (44)
- Duyuru (8)
- Excel (8)
- Fıkralar (9)
- Flash (2)
- Javascript (3)
- Kategorisiz (2)
- Kıssa'dan Hisse (5)
- Php (20)
- Program Tanıtımı (1)
- Python (2)
Arşiv :
- Kasım 2008 (11)
- Ekim 2010 (6)
- Kasım 2010 (11)
- Aralık 2010 (3)
- Ocak 2011 (2)
- Mayıs 2011 (1)
- Temmuz 2011 (4)
- Ağustos 2011 (10)
- Ekim 2011 (2)
- Ocak 2012 (2)
- Şubat 2012 (1)
- Mart 2012 (1)
- Nisan 2012 (3)
- Haziran 2012 (2)
- Temmuz 2012 (1)
- Ağustos 2012 (1)
- Kasım 2012 (1)
- Mart 2013 (1)
- Mayıs 2013 (1)
- Temmuz 2013 (1)
- Ekim 2013 (2)
- Kasım 2013 (2)
- Şubat 2014 (1)
- Ekim 2014 (1)
- Kasım 2014 (3)
- Şubat 2015 (1)
- Ağustos 2015 (3)
- Eylül 2015 (1)
- Ekim 2015 (1)
- Ocak 2016 (3)
- Nisan 2016 (1)
- Ekim 2016 (1)
- Aralık 2016 (8)
- Ocak 2017 (27)
- Şubat 2017 (1)
- Haziran 2017 (1)
- Eylül 2017 (1)
- Kasım 2017 (1)
- Ocak 2018 (2)
- Temmuz 2018 (2)
- Kasım 2018 (1)
- Aralık 2018 (1)
- Şubat 2019 (1)
- Ağustos 2019 (2)
- Aralık 2019 (1)
- Ocak 2020 (1)
- Nisan 2020 (10)
- Kasım 2020 (1)
- Aralık 2020 (1)
- Ocak 2021 (1)
- Mayıs 2022 (1)
- Kasım 2022 (1)
- Mart 2023 (1)
- Mayıs 2023 (2)
- Haziran 2023 (1)
- Ocak 2024 (2)
- Temmuz 2024 (1)
Etiketler :
- 3d acar baltas Android asp.net banana pi c sharp delphi fonksiyonları excel Firefox flash flowplayer ipucu opencv pascal pdf php fonksiyonları python super pi ttnet veritabanı video visual studio Windows word