Free Pascal programlama dili ile pencereli uygulamalar

İlk önce Lazarus’u kuralım.

sudo pacman -S lazarus-gtk2

Lazarus açıldıktan sonra Dosya->Yeni->Uygulama yolunu takip edip TAMAM düğmesine basarak yeni bir uygulama oluşturalım.

Dosya->Kaydet yolunu izleyerek uygulamayı selam.lpi ismi ile kaydedelim.

Kaynak kütüğünün adını da ana.pas olarak değiştirelim ve kaydedelim.

Sol tarafta bulunan Nesne denetçisinden Form1’in Caption özelliğini Selam olarak değiştirelim.

İsterseniz Proje->Proje Seçenekleri->Başlık yolunu takip ederek uygulamanın başlığını da değiştirebilirsiniz.

Standard bölümünden bir düğme Button1 ekleyelim. Düğmenin Caption özelliğini yani başlığını gene Nesne denetçisinden Tıklayınız olarak değiştirelim.

İsterseniz Font Size özelliğini metin boyutunu 15 yapabilirsiniz.

Dosya->Hepsini kaydet yolunu takip ederek kaydedelim.

image

Bu aşamada uygulama tasarımı şu hale geldi.

Nesne denetçisinden Button1 seçili iken Olaylar sekmesini açıyoruz. OnClick olayının yanında bulunan ... noktalara tıklıyoruz.

Tıklama olayına şunları giriyoruz :

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Selamün Aleyküm');
end;

Uygulamayı derlemek için F9 tuşuna basınız.

Eğer çalıştıysa tebrikler! Free Pascal ve Lazarus kullanarak bir yazılım geliştirmiş oldunuz.

Uygulamanın kaynak ve çalıştırılabilir kütüklerini buradan indirebilirsiniz
Bu arada Free Pascal ve Lazarus diğer programlama dilleri, geliştirme ortamlarında bulunmayan (ya da bulunsa bile benim pratiğe dökmekte zorlandığım) bir özellik sunuyor.

Acaba bu özellik ne?

Free Pascal ve Lazarus diğer işletim sistemleri için de çalıştırılabilir kütük üretebiliyor.

Bil’in işletim sisteminden hazzetmiyoruz.

Diğer taraftan bu teknik olarak çok ilginç bir özellik.

Geliştirdiğimiz selam uygulamasının kaynak kütüklerine bakarsanız diğer işletim sistemi için de çalıştırılabilir kütüklerin üretildiğini görebilirsiniz.

Bu kütükler Arch Linux altında üretildi.

Diğer programlama dillerinde ve geliştirme ortamlarında bu özelliğe ben henüz rastlamadım.

Daha önce sadece Linux altında diğer işletim sistemi için komut satırından çalışan uygulama geliştirmiştim. Bu uygulama çalıştı.

Ama pencereli uygulama bir türlü derlenmemişti.

C++ ve Qt kütüphanesi ile geliştirilen uygulamalar benzer bir özellik sağlıyor.

Ama bildiğim kadarıyla, kaynak kodu aynı olsa da her işletim sisteminde ayrı ayrı derlemek gerekiyor.

Bu sefer Allah’ın izniyle basit bir saat uygulaması geliştireceğiz.

Lazarus açıldıktan sonra Dosya->Yeni->Uygulama yolunu takip edip TAMAM düğmesine basarak yeni bir uygulama oluşturalım.

Dosya->Kaydet yolunu izleyerek uygulamayı saat.lpi ismi ile kaydedelim.

Kaynak kütüğünün adını da ana.pas olarak değiştirelim ve kaydedelim.

Sol tarafta bulunan Nesne denetçisinden Form1’in Caption özelliğini Saat olarak değiştirelim.

İsterseniz Proje->Proje Seçenekleri->Başlık yolunu takip ederek uygulamanın başlığını da değiştirebilirsiniz.

Standard bölümünden bir etiket Label1 ekleyelim. Etiket
olduğunu üzerindeki Abc ifadesinden görebilirsiniz.

Etiketin Caption özelliğini yani başlığını gene Nesne denetçisinden --:-- olarak değiştirelim.

Standard bölümünden bir giriş kutusu Edit1 ekleyelim. Giriş kutusu olduğunu üzerindeki ab ifadesinden görebilirsiniz. Giriş kutusunun Text özelliğini silelim.

Dilerseniz tüm bu bileşenler için Font Size özelliğini metin boyutunu 15 yapabilirsiniz.

System bölümünden bir zamanlayıcı Timer1 ekleyelim. Zamanlayıcı olduğunu üzerindeki saat simgesinden görebilirsiniz.

image

Standard bölümünden iki tane etiket ekleyelim : Label2 ve Label3

Bunların da başlığını Caption sırasıyla Saat ve Alarm olarak değiştiriniz.

Öncekilerde olduğu gibi eğer isterseniz, bu bileşenler için Font Size özelliğini metin boyutunu 15 yapabilirsiniz.

Bileşenleri biraz hizaladıktan sonra tasarımımız aşağıdaki gibi oldu :

image

Şimdi zamanlayıcıyı Timer1 çift tıklayıp içine şunları girelim :

procedure TForm1.Timer1Timer(Sender: TObject);

begin
  Label1.Caption := FormatDateTime('hh:nn', Time);
  if (Edit1.Text = Label1.Caption) then
  begin
    ShowMessage('Alarm çalıyor');
    Close();
  end;
end;

Burada FormatDateTime zamanı istediğimiz biçime koyuyor. Örneğin FormatDateTime('hh:nn:ss', Time); deseydik zamanı saat, dakika ve saniyler olarak göstermek istediğimizi belirtecektik.

FreePascal’da diğer dillerden farklı olarak atama için := ifadesi, karşılaştırma için = kullanılıyor.

Alarm saati ile saat eşit olduğunda Alarm çalıyor diye bir ileti gösteriyoruz.

Uygulamayı derleyip, çalıştırmak için F9 tuşuna basınız.

image

Alarm çaldığı zaman da bir ileti görebilirsiniz.

image

Uygulamanın kaynak ve çalıştırılabilir kütüklerini buradan indirebilirsiniz.

Lazarus’un çoklu dil desteği güzel bir özellik.

Örneğin kısa bir hikayemiz olsun.

image

Can Azerbaycan Türkçesini ekleyebiliriz.

image

İngilizce tuşuna basalım.

image

Ya da Arapça mı okumak istersiniz?

image

Lazarus’u başlattıktan sonra Dosya->Yeni->Uygulama->Tamam yolunu izleyerek yeni bir uygulama oluşturalım.

Dosya->Kaydet yolunu izleyerek uygulamayı dil.lpi ismiyle kaydedelim. Birim ismi olarak da ana.pas girelim.

Sol tarafta bulunan nesne denetçisinden Form1’in başlık Caption özelliğini Diller olarak değiştirelim.

Proje->Proje Seçenekleri->i18n yolunu takip ederek yerelleştirme ayarları bölümüne gelelim.

Burada i18n aktif seçeneğini etkinleştirelim.

PO çıktı klasörü ismi, yani çeviri çıktı dizinin isminilocale girelim.

Bu dizinin ismini locale ya da languages girmek önemli, aksi halde yereller gözükmeyebilir.

Uygulamanın kaynak görünümünü açalım. Göstermek için Görünüm-> Kaynak Düzenleyici yolunu takip edebiliriz.

uses bölümüne DefaultTranslator ekleyelim.


image

Burada otomatik tamamlama özelliğinden faydalanabiliriz. Örneğin De yazdık. Ctrl - Boşluk tuşuna basarsak otomatik tamamlama bölümü açılacaktır.

Dosya->Hepsini Kaydet yolunu takip ederek uygulamayı kaydedelim. F9 ile uygulamayı çalıştıralım.

Uygulamayı çalıştırdıktan sonra çeviri çıktı dizini olarak belirtiğimiz dizinde *.pot uzantılı bir kütük oluşacak.

Bu sefer uç birim kullanarak aynı dizine geliyoruz.

cp dil.pot dil.po
cp dil.pot dil.en.po

ile bu kütüğü kopyalıyoruz.

Çevirileri oluşturmak için PoEdit yazılımından faydalanabiliriz. Kurmak için :

sudo pacman -S poedit

komutunu verebiliriz.

Uç birimden

poedit dil.po

komutunu vererek kütüğü açıyoruz.

Burada PoEdit dil ayarlı değil diyor.

Dili Türkçe olarak seçiyoruz.

Tamam dedikten sonra Kaydet diyoruz.

Bu oluşturduğumuz kütük ana dil zaten Türkçe olduğu için bir çeviri yapmamıza gerek yok.

Kaydet dedikten sonra aynı dizinde dil.mo isimli derlenmiş çeviri kütüğünün oluştuğunu görebilirsiniz.

Benzer şekilde

poedit dil.en.po

komutu ile İngilizce çeviri kütüğünü açıyoruz.

Çeviriyi yaptıktan sonra kaydedip çıkıyoruz.

Bu işlemlerden sonra çeviri çıktı dizininde locale şu kütükler oluştu :

dil.en.mo dil.en.po dil.mo dil.po dil.pot

Şimdi uç birimden bir üst dizine uygulamanın çalıştırılabilir kütüğünün olduğu dizine gelelim.

cd ..

Ve uygulamayı şu şekilde uç birimden çalıştırmayı deneyelim:

./dil --lang en

image

Eğer bu pencereyi görüyorsanız tebrikler. Çeviriler çalışıyor demektir.

./dil --lang tr

Uygulamayı Türkçe yerel kullanarak çalıştıralım.

image

Uygulamanın kaynak, çalıştırılabilir kütüklerini ve yerellerini buradan indirebilirsiniz

Yerellerin bulunduğu locale/ klasörü uygulamanın çalıştırılabilir kütüğünün bulunduğu dizinin bir alt dizini olması gerekiyor.

├── dil <- Uygulamanın çalıştırılabilir kütüğü
|
├── locale/ <- Yerellerin bulunduğu alt dizin (klasör)

Dil uygulamasına kaldığımız yerden devam ediyoruz.

Uygulamanın birinci sürümünden dil.tar.gz ve locale.tar.gz kütüklerini indirelim.

Sağ tıklayıp çıkar diyoruz. Açıldıktan sonra locale kütüğüne sağ tıklayıp kes diyoruz.

dil klasörünü açıyoruz. ana.pas gibi kaynak kütükleri görebilirsiniz. Sağ tıklayıp yapıştır diyoruz.

Böylece locale dizinini dil dizinin altına taşımış olduk.

Lazarus’u başlattıktan sonra Dosya->Aç yolunu takip ediyoruz ve dil klasörünü açıyoruz.

Buradan dil.lpr kütüğünü seçiyoruz ve düğmesine basıyoruz. Gelen ekranda Projeyi Aç seçeneğini seçiyoruz.

F12 tuşuna basarak kaynak ve form görünümü arasında geçiş yapabilirsiniz. F11 tuşu ile nesne denetçisini gösterebilirsiniz.

F12 tuşuna basarak form görünümünü açıyorum. Formu köşelerinden tutup sürükleyerek genişletebiliriz. Çünkü 5 tane düğme ekleyeceğiz.

Standard bölümünden bir tane düğme ekliyorum.

F11 nesne denetçisini açarak başlık Caption olarak Türkçe yazıyoruz. Yüksekliği Height 45 , genişliği ise Width 240 yapalım. Yazı tipi büyüklüğünü FontSize ise 15 yapalım.

Sonra düğmenin üzerine sağ tıklayıp kopyala diyelim. Formun üzerinde bir yere sağ tıklayıp yapıştır diyelim.

Bu şekilde toplam 5 düğme olana kadar yapıştıralım.

Diğer düğmelerin isimleri sırasıyla Azeri Türkçesi, İngilizce, Arapça ve Göster olacak. Nesne denetçisinden düğmelerin başlığını Caption değiştirebilirsiniz.

Düğmeleri çoğalttıktan sonra gene Standard bölümünden üzerinde kalem simgesi bulunan bir yazı kutusu Memo ekliyoruz.

Memo1 in satırlar Lines özelliğini seçip ... düğmesine tıklıyoruz. Buradan Temizle düğmesine basıyoruz ve tamam diyoruz.

Bileşenleri hizaladıktan sonra formumuzun görünümü aşağıdaki gibi oldu.

image

Dosya->Kaydet yolunu takip ederek uygulamayı kaydedebiliriz.

Şimdi F12 tuşuna basarak kaynak görünümünü açalım.

implementation bölümünden sonra {$R *.lfm} ifadesinin altına aşağıdaki bölümü ekleyelim.

resourcestring
zengintuccar='Abdullah baba gerçekten zengin bir tüccardı.';
bagdat='Halife Harun Reşid zamanında Bağdat''ta yaşıyordu';

Tekrar F12 tuşu ile formu gösterelim. Eğer nesne denetçisi gözükmüyorsa F11 ile açalım.

Göster düğmesini seçip nesne denetçisinden Olaylar tıklandığında OnClick yanındaki ... tıklayalım.

procedure TForm1.Button5Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add(zengintuccar);
  Memo1.Lines.Add(bagdat);
end;

Yukarıdaki satırları ekleyelim. Burada düğme ismi sizde Button4 olabilir. Önemli olan begin ve end arasını eklemek.

Göster düğmesine tıkladığımız zaman yazı kutusunun satırlarını siliyor. Oluşturduğumuz cümleleri buraya ekliyor.

Bu aşamada F9 tuşu ile uygulamayı çalıştırıp deneyebilirsiniz. Uygulamayı kaydedebilirsiniz.

Yazı kutusunun Memo1 yazı tipi büyüklüğünü dilerseniz nesne denetçisinden Font->Size 15 olarak ayarlayabilirsiniz.

Tekrar F12 ile form görünümüne geçiş yapıyoruz. Türkçe düğmesini seçip olaylar tıklama olayına yazıyoruz.

procedure TForm1.Button1Click(Sender: TObject);
begin
     SetDefaultLang('tr');
end;

Bunu diğer diller için de yazalım. Tek farklılık burada az en ar gibi iki haneli dil kodunu değiştireceğiz.

Örneğin Azeri dili düğmesine tıklanınca begin end arasına yazmamız yeterli olacaktır.

SetDefaultLang('az');

F12 ile kaynak görünümü açtıktan sonra uses kısmına virgülle ayırarak LCLTranslator ekliyoruz.

Bu aşamada F9 tuşu ile uygulamayı çalıştıralım.

Türkçe seçip göster tuşuna basınız. İngilizce tuşuna basar basmaz pencere başlığının Languages olduğunu görebilirsiniz.

Bu da uygulamamızın doğru çalıştığını gösteriyor.

Eksik çevirileri tamamlayabiliriz.

Uç birim kullanarak yerel ‘locale’ dizinine geliyoruz.

cp dil.pot dil.po

ile bu kütüğü kopyalıyoruz.

Uç birimden

poedit dil.po

komutunu vererek kütüğü açıyoruz.

Burada PoEdit dil ayarlı değil diyor.

Burada eklediğimiz çevirilerin geldiğini görebilirsiniz.

Dili Türkçe olarak seçiyoruz.

Tamam dedikten sonra Kaydet diyoruz.

Uç birimden bu sefer İngilizce çeviri kütüğünü açalım.

poedit dil.en.po

Burada dikkat ederseniz, sadece ilk yaptığımız çeviriler var.

Çeviri->Pot dosyasından güncelle yolunu takip ederek dil.pot kütüğünü seçiyorum.

Gördüğünüz gibi çeviriler geldi.

Şimdi çevirileri yapalım ve kütüğü kaydedelim.

Çevirileri ekledikten sonra F9 ile uygulamayı tekrar çalıştıralım.

İngilizce düğmesine tıkladıktan sonra Show düğmesine tıklarsanız uygulamanın ara biriminin artık İngilizce olduğunu görebilirsiniz.

image