6 Temmuz 2017 Perşembe

Lazarusta kaynak(resource) dosya kullanımı




Lazarusta da delphi de olduğu gibi kaynak dosya kullanımı vardır. Sıkıntı çıkaran kısımlar windows kaynak dosyalarının linux tarafında ufak tefekte olsa uyumsuzluğunun olabilmesidir. Ancak lazarusun kendi kaynak dosya kullanım sistemini kullanırsanız hem windows hemde linux tarafında (osx tarafında da) çapraz platform uyumluluğu içinde rahatlıkla kullanabilirsiniz. Bu yazımızda lazarus-->tools dizini altındaki “lazres” uygulaması ile birden fazla raw dosyayı kaynağa gömüp kullanımını anlatmaya çalışacağız. Anlatacaklarımız hem windows hemde linux tarafında benzer şekilde uygulanabilir işlemlerdir.

İlk olarak iki tane örnek olması açısından gömeceğimiz dosyaları seçelim. Biz burada “kitap1.xlsx” çalışma kitabı ile “Dokuman1.odt” dosyasını seçtik. Bu dosyaların “lrs” uzantılı dosyasını oluşturalım. Biz bu dosyayı programımızın derlemesinde kaynak dosya olarak kullanacağız.

Linux için terminal penceresinde

/usr/share/lazarus/1.6.4/tools$ ./lazres /home/kaynakproje/resourcedosyam.lrs /home/kaynakproje/Kitap1.xlsx /home/kaynakproje/Dokuman1.odt

windows için komut satırında

c:\lazarus\tools\lazres.exe c:\kaynakproje\resourcedosyam.lrs c:\kaynakproje\kitap1.xlsx c:\kaynakproje\Dokuman1.odt

yazıp enterlıyoruz. Karşımıza aşağıdaki gibi bir pencere gelecek. (linux dosya sistemindeki görüntüsü aşağıdaki gibidir)

/home/ResourceProjesi/Kitap1.xlsx ResourceName='Kitap1' Type='XLSX'
/home/ResourceProjesi/Dokuman1.odt ResourceName='Dokuman1' Type='ODT'

windows kullanıyorsanız sonuç görüntüsü şu şekilde olur;

c:\ResourceProjesi\Kitap1.xlsx ResourceName='Kitap1' Type='XLSX'
c:\ResourceProjesi\Dokuman1.odt ResourceName='Dokuman1' Type='ODT'

Böylece nihayet iki dosyayı da içinde barındıran “resourcedosyam.lrs” kaynak dosyamızı oluşturmuş olduk.

Yukardaki işlemlerde iki dosyayı ayrı ayrı yazıp göstermek yerine dosyaların listesinin olduğu bir text dosyasını bunların yerine yazmış olsaydık yine aynı işi yapmış olurduk. Hatta bu liste gösterme şekli çok sayıda dosya olduğunda mantıklı bir işlem olacaktır.

Lazres resourcedosyam.lrs dosyalistesi.txt

Bundan sonraki aşamada programımız içinden bilgisayarımızda istediğimiz herhangi bir yere bu iki kitap1.xlsx ve Dokuman1.odt dosyalarımızı oluşturalım.

* Lazarusu açıyoruz
* Yeni bir boş proje oluşturuyoruz.
* unit1.pas dosyasının uses kısmına “Lresources” ifadesini ekliyoruz.
* unit1.pas dosyasının en altındaki “end.” ifadesinden önce

initialization
   {$I resourcedosyam.lrs}

ifadesini ekliyoruz.

* formun üzerine bir buton atalım ve onclick olayına aşağıdaki ifadeleri yazalım.

procedure TForm1.Button1Click(Sender: TObject);
var
  SList: TStringList;
  Res: TLResource;
  Veri: String;
begin
   Slist:= TStringList.Create;

   Res:= LazarusResources.Find('Kitap1');
   if Res= nil then Raise Exception.Create('Kitap1 kaynakta yok');

   Slist.Add(Res.Value);
   Slist.SaveToFile('Kitap1.xlsx');

   Slist.Clear;  //Bunu iki satırı yapmak çoğu durumda karışıklıkları önler.
   Res:= nil;    //iki jpeg dosyasında sıkıntı oluşturduğunu görmüştüm. o yüzden bu iki satır önemli.

   Res:= LazarusResources.Find('Dokuman1');
   if Res= nil then Raise Exception.Create('Dokuman1 kaynakta yok');

   Slist.Add(Res.Value);
   Slist.SaveToFile('Dokuman1.odt');

   Slist.Free;
end;

Bu kod çalıştırıldığında exenin içine gömülü durumdaki 2 adet kaynak dosyasını exenin bulunduğu yere müstakil olarak oluşturur. Bunun yanında resource deki image dosyalarına erişim ve işlem yapmak daha pratiktir. Aşağıdaki kaynakta bu işlem güzel bir şekilde anlatılmıştır.


Kaynak:
* http://wiki.freepascal.org/Lazarus_Resources