Free pascal, ücretsiz ve açık kaynaklı bir bilgisayar yazılımı derleyicisidir. Derleyicisi, kısaca FPC olarak anılmaktadır.
Derleyici : Yazılımcının yazdığı programı, bilgisayarın anlayacağı makine koduna dönüştürür.
Hacettepe Elektrik bölümünde 1. sınıfta Fortran 77 dersimiz vardı. Bizden sonraki dönemlerde pascal'a geçilmişti. Aradan 35 yılcık geçmiş ve pascal ile ancak şimdi tanışıyorum. Basic dilinden çok da farklı değilmiş. Pascal programlama dili ile ilgili birçok türkçe veya ingilizce kaynak internette bulunmaktadır. Bu nedenle, kullanıcı sayısının epey fazla olduğunu tahmin ediyorum.
Pascal ailesinin diğer derleyicileri olan Turbo Pascal veya Delphi için youtube eğitim videolarını izlersen de pascal programlama dilinin temel komutlarını öğrenebilirsin. Örneğin bu listede ve burada bulunan türkçe videolarda geçen kodları free pascal ile rahatlıkla test edebilirsin. Delphi ticari bir yazılım olarak satılmaktadır. Delphi yeni sürümlerinde hangi yeni komutu sisteme eklediyse, free pascal da onu hemen kendisine eklemiş. Dolayısıyla Delphi kitaplarını da kaynak olarak inceleyebilirsin. Durum böyle olsa da, kütüphaneleri farklı olduğundan Delphi ile yazılan her program, free pascal ile de çalışır diye de bir kural yoktur..
Lazarus
Ne lazlarla ne de ruslarla ilgisi vardır. Kendisi, free pascal ile kolayca program oluşturmamızı sağlayan bir Cross-Platform IDE'nin ismidir. Kullanımı kolay bir arayüze sahiptir.
Cross-Platform : Yazdığımız program, Windows, WinCE, Linux, MacOS veya Raspberry Pi (ARM) için derlenebilmektedir.
IDE : Tümleşik Geliştirme Ortamı anlamına gelir. Yazılımın geliştirildiği ortam da diyebiliriz. Visual Studio benzeri ortamı bize sunar. Örneğin kolaylıkla kullanıcı formu oluşturabiliriz. (Lazarusla ilgili türkçe online bir kitapçık)
PureBasic ve Lazarus’u karşılaştırmak gerekirse; PB, 800 satıra kadar, Lazarus ise tamamen ücretsiz. PB, Lazarus’a göre çok daha küçük .exe oluşturabiliyor. PB’de GUI (form) hazırlama desteği zayıfken, Lazarus’ta çok iyi durumda. Kullanıcı sayısı ve kütüphane desteği olarak Lazarus, PB’i ezecektir. Örneğin, TLS/SSL desteği PB de yokken, Lazarus’un bunu destekleyen kütüphaneleri (LNet, indy) mevcut. Yine PB için modbus kütüphanesi yokken, Lazarus için yaptığım araştırmada PascalScada adında bir kütüphane buldum. Burada bulunan video’da kullanımı, türkçe olarak anlatılıyor. Video’da online paket yöneticisi ile nasıl kolayca kütüphanenin Lazarus’a yüklendiği de gösteriliyor. Lazarus forumunda delphi-modbus adında bir kütüphanenin de olduğu belirtilmiş. Resmi Lazarus kütüphanelerini veya paketlerini, buradan da inceliyebilirsin. Örneğin Excel dosya'dan bilgi almak için kullanılan FPSpreadsheet komponenti burada gözükmüyor. Lazarus içinde bulunan Package > Online Package Manager... daha güncel diyebilirim.
Daha fazla lakırtı yapmadan hemen konuya girelim...
Windows için https://www.lazarus-ide.org sayfasında bulunan Download Now linkinden dosyayı indirip, bilgisayara kurabiliriz. Veya bu linkin hemen altında bulunan Other (diğer) linkine tıklayıp Windows 32 Bits sürümünü indirebilirsin ki ben öyle yaptım. Böylece, yapacağın programlar hem 32-bit hem de 64-bit bilgisayarlarda çalışacaktır.
Kurulumdan sonra IDE'nin, 4-5 tane yüzen yani birbirinden bağımsız pencerelerden oluştuğunu göreceksiniz. Bunlar dilersen, birleşip tek pencereye girebiliyorlar. Package > Install/Uninstall Package... menüsüne giriyoruz. Resimdeki gibi 2 paketi Ctrl tuşu ile seçip Install selection butonuna tıklıyoruz. İşlem tamamlanınca, altta bulunan Save and rebuild IDE butonuna tıklıyoruz. IDE kapanıp açılacaktır.
IDE'nin son hali resimdeki gibidir. Üstte normal menü ve kurulan kütüphaneler (components), solda bir kontrolün özelliklerini ayarlayabildiğimiz Object Inspector, ortada kod yazılan Source editor görülecektir. F12 tuşu ile form ve kod görünümü arasında geçiş yapılmaktadır.
Konsol (komut satırı) uygulamaları
Türkçe menü var ama tercih etmiyorum. Bir form oluşturmak gerekmiyorsa, konsol uygulaması yazabiliriz. Dil öğrenirken de genelde konsol uygulamaları ile başlanır. Örneğin, yukarıda linkini paylaştığım, PASCAL-PROGRAMLAMA-01.pdf dosyasında, 5. sayfada bulunan programı deneyelim. Project > New Project ... > Simple Program menüsünü seçelim. Sadece aşağıdaki kodu içeren yeni bir editör sayfası açılacaktır.
program Project1;
begin
end.
Pdf dosyasındaki kodu aşağıdaki gibi girelim.
program Project1;
var
a, b, t: integer;
begin
readln(a, b);
t:= a + b;
writeln('Sonuc : ', t);
readln;
end.
Run (F9) butonuna tıklayınca siyah pencere yani komut satırı açılacaktır. Klavyeden sırayla 3 > Enter > 4 > Enter tuşlarına bastığımızda Sonuc : 7 olarak ekranda belirecektir. Sondaki readln komutu, komut satırı penceresinin kapanmaması için kullanıldı. Tekrar Enter'a basarsak pencere kapanır.
Form (GUI) uygulamaları
Kullanıcı arayüzü için bir form tasarlanır. Örnek olarak, etiket yazıcısına da bağlanabilen, tcpclient uygulaması yapalım. Yazıcı yerine, Hercules programında TCP Server sekmesine geliyoruz. Port olarak 9100 yazıp, Listen butonuna tıklıyoruz.
Lazarus'da Project > New Project ... > Application menüsünü seçerek boş bir sayfa açıyoruz. Tcp haberleşmesi için LNet adında bir kütüphane (paket veya komponent diye de adlandırılıyor) kurmamız gerekiyor. Package > Online Package Manager... menüsünü seçip, kutucuğa LNet yazıyoruz. Aşağıdaki kutuyu işaretleyip, aşağıdaki Install butonuna tıklıyoruz. Çıkan soruya da Yes olarak cevap veriyoruz. En altta bulunan Messages penceresinden olan biteni izleyebilirsin.
Daha sonra standart komponent paletini kullanarak aşağıdaki formu oluşturuyoruz.
Edit kutuları için Text, butonlar ve form için Caption özelliğini ayarlıyoruz. Memo için Lines özelliğinde bulunan ... yı kullanarak, memo içeriğini silebiliriz. Yukarıda paletlerin olduğu bölümde bulunan lNet paletinden TLTCPComponent'i form üzerine bırakıyoruz. Özellikler penceresinden adını TCP olarak değiştiriyoruz.
Form üzerinde boş bir yere çift tıklayınca kod editöründe TForm1.FormCreate prosedürü oluşacaktır. Formda butona çift tıklayınca TForm1.Button1Click prosedürü oluşacaktır. Bunlara olaylar (events) diyoruz. Forma eklediğimiz TCP komponentine tıklayalım. Ardından solda özelliklerin yanında bulunan Events sekmesine tıklıyoruz. OnConnect yanındaki kutuya tıklayınca ... çıkacaktır. ... sembolüne tıklayınca kod editöründe TForm1.TCPConnect prosedürü oluşacaktır. Bağlantı kurulduğunda ne yapılacağını bu prosedürün içine yazıyoruz.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, lNet, Graphics, Dialogs, StdCtrls,
lNetComponents;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
TCP: TLTCPComponent;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TCPConnect(aSocket: TLSocket);
procedure TCPDisconnect(aSocket: TLSocket);
procedure TCPError(const msg: string; aSocket: TLSocket);
procedure TCPReceive(aSocket: TLSocket);
private
public
fnet : TLconnection;
end;
var
Form1: TForm1;
implementation
uses lcommon;
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
fnet:= TCP;
TCP.SocketNet:= LAF_INET;
end;
procedure TForm1.TCPConnect(aSocket: TLSocket);
begin
memo1.Lines.add('connected');
end;
procedure TForm1.TCPDisconnect(aSocket: TLSocket);
begin
memo1.Lines.add('disconnected from ' + aSocket.PeerAddress);
end;
procedure TForm1.TCPError(const msg: string; aSocket: TLSocket);
begin
memo1.Lines.add(aSocket.PeerAddress + ' ' + msg);
end;
procedure TForm1.TCPReceive(aSocket: TLSocket);
var
s: string;
begin
aSocket.GetMessage(s);
memo1.Lines.add('server : ' + s);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
fnet.Connect(edit2.text, strtoint(edit3.text));
memo1.Lines.add('bağlantı sağlanıyor...');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if length(edit1.Text)>0 then
begin
fnet.SendMessage(edit1.text + #13#10);
memo1.Lines.add('client : ' + edit1.text);
edit1.text:= '';
end
else
showmessage('bir mesaj yazın..');
end;
end.
Programı Run ikonuna tıklayarak çalıştıralım. Connect butonuna tıklayalım. Hercules, utf-8'i desteklemiyor. Pascal'ın desteklediğini görebiliriz. C59E hex olarak Ş harfini ifade eder. 0D0A ise CRLF yani enter karakterlerini ifade eder. Button2Click olayına #13#10 eklemeden programı çalıştırdığımdan resimde denemedeneme yapışık çıktı. 13 ve 10 da 0D0A değerlerinin desimal halidir. Windows'da bulunan hesap makinesinde modu programlayıcı seçersen bu çevrimleri (hex-dec) kolayca yapabilirsin.
Hercules programı gelen bilgileri hex olarak da gösterebiliyor. Bunun için gelen data penceresinde sağ klik yap ve Special Chars > Hexadecimal'i seç. Aynı yerde yine sağ klik yap ve HEX Enable'ı seç. Programımızdan Ş yollayınca Hercules'de C59E 0D0A göreceksin.
Programı kaydetmek için sol üstte bulunan SaveAll ikonuna tıklayın. .lpi uzantılı dosya adını belirleyin. unit1 de form dosyasının ismidir, ben dokunmuyorum. Programı çalıştırınca .exe dosyası programı kaydettiğin dizinde oluşacaktır. Hata ayıklama ile ilgili bilgiler de exe'ye dahil edildiğinden dosya büyümüştür. Daha küçük bir exe elde etmek için bunları çıkarıp Release olarak projeyi derlemek gerekiyor. Project > Project Options... > Compiler Options... menüsüne tıklayalım. Sağda Build modes yanında bulunan ... 'ya tıklayalım. Açılan pencerede Create debug and release modes butonuna tıklayalım. Ardında OK ve yine OK butonlarına basarak çıkalım. Üst menüde, Run ikonunun solunda bulunan change build mode ikonunda (dişli çark) bulunan küçük ok'a tıklayıp Release'i seçelim. Run yani programı tekrar çalıştıralım. exe dosyanın küçüldüğünü göreceksiniz.
Program ikonunu değiştirmek için, yine Project > Project Options... menüsünde, sağda Load Icon butonu ile istediğin bir png veya ico dosyasını seçebilirsin.
Yorumlar
Yorum Gönder