Programirane pod Linuks. Vuvedenie za nachinaeshti.
Sudurzhanie:
Vuvedenie v statiiata
Instalatsiia i podgotovka na sistemata za rabota
Kratko vuvedenie v Lazarus
Nashata purva programa - Hello World
Izrabotka na Prost tekstov redaktor
Dobaviane na novi komponenti kum Lazarus. Dobaviane na dostup do baza danni chrez instalirane na TDbf.
Izrabotka na Lichen telefonen ukazatel
Rabota s Timer i grafika v rezhim na izpulnenie
Vuprosi i otgovori
Vuvedenie v statiiata
Dinamichnata sreda na softuernata industriia iziskva guvkavi, stabilni, mnogofunktsionalni i priiatni za okoto produkti. Vazhno naposleduk preimushtestvo e vuzmozhnostta na programite da se startirat na raznoobrazni operatsionni sistemi. Razrabotvaneto na takuv softuer e chesto slozhno, trudoemko i otnema poveche vreme.
V tazi statiia, shte se opitam da vi predostavia reshenie na tozi problem. Statiiata e izklyuchitelno podhodiashta za hora raboteshti s Delphi, kakto i za tezi zanimavashti se s ezika Paskal. SHTe vi zapoznaia s prekrasnata sreda za programirane Lazarus i vuzmozhnostite koito predostavia tia. Statiiata mozhe da se izpolzva i ot nachinaeshti v programiraneto s elementarni poznaniia na ezika Paskal. Imate vuzmozhnost da se zapoznaete s edna ot nai-interesnite sredi za programirane na Linux, Windows i Mac OS prilozheniia.
Instalatsiia i podgotovka na sistemata za rabota
Ofitsialniia sait na Lazarus e http://lazarus.freepascal.org ;
Za da raboti uspeshno Lazarus iziskva da imate instalirani FreePascal i FreePascal Sources. Neobhodimite paketi mozhe da svalite ot: http://sourceforge.net/project/showfiles.php?group_id=89339 ;
Svalete slednite failove:
> fpc-2.0.0-0.i586.rpm – Posledna versiia na FreePascal;
> fpcsrc-2.0.0-0.i386.rpm – Tova e source koda na vsichki paketi kum FreePascal;
> lazarus-0.9.8-fpc_2.0.0_0.i386.rpm – Posledna stabilna versiia na Lazarus.
Sled kato veche ste svalili paketite, pristupvame kum tiahnoto instalirane. Otvorete terminal i preminete v rezhim na root. Ako ne znaete kak, prosto napishete “su” i vuvedete root parolata. Preminete v direktoriiata na paketite. Ako ne znaete kak, izpolzvaite komandata “cd” za izbirane na direktoriia i “ls” za spisuk na sudurzhanieto na direktoriiata. Taka naprimer ako ste svalili failovete na Desktop-a na potrebitel MyUser stupkite, koito predpriemate sa slednite:
>su
Enter Password: *****
>cd /
> cd /home/MyUser/Desktop/
Pristupvate kum instalirane na paketite po sledniia nachin:
rpm -i fpc-2.0.0-0.i586.rpm
rpm -i fpcsrc-2.0.0-0.i386.rpm
rpm -i lazarus-0.9.8-fpc_2.0.0_0.i386.rpm
Ako poluchite suobshtenie, che lipsvat neobhodimi paketi e neobhodimi da gi instalirate i da povtorite instalatsiiata. V SuSe mozhe da instalirate lipsvashtite paketi chrez YaST, v drugi distributsii s pomoshtta na “apt-get” ili predostaveniia ot tiah softuer za rabota s paketi.
Pozdravleniia! Preminahte prez nai-trudnata chast, a imenno instaliraneto :)
Kratko vuvedenie v Lazarus
Lazarus e proekt, koito ima za tsel da izraboti integrirana sreda za razrabotvane na softuer, vuzmozhno nai-blizka do svetovno izvestniia produkt Delphi. Razgranichava se ot drugite podobni produkti s lesnotata i burzinata za izrabotvane na programi s baza danni i programi, za koito grafichniia interfeis e ot goliamo znachenie. Interesno e tova, che vednuzh napisaniiat softuer na Lazarus mozhe da se kompilira na Linux, Windows i Mac OS bez da se nalaga promiana na source koda.
Fig. 1
Neka startirame Lazarus. Mozhe da go namerite lesno v menyuto na KDE(fig. 1). Ako ste polzvali niakoga Delphi, shte ustanovite, che s Lazarus si prilichat mnogo. SHTe opisha naburzo nai-vazhnite chasti ot interfeisa. Gore na ekrana vizhdate osnovniia prozorets na programata(fig. 2-a). Tuk e menyuto, vsichki butoni za upravlenie, kakto i palitrata s taka narechenite LCL(Lazarus Component Library). Ot liavo se namira taka narecheniia “Object Inspector”(fig. 2-b). Tuk mozhete da nastroivate obektite, da prikachite kum tiah razlichni zadachi za izpulnenie i dr. Ostanaloto koeto vizhdate e prozoretsa, koito redaktirate(fig. 2-v), a pod nego e redaktora na source-a(fig. 2-g).
Fig. 2
Veche mozhe da preminem kum izrabotvaneto na primerni programi. SHTe izrabotim slednite programi:
HelloWorld;
Prost tekstov redaktor;
Lichen telefonen ukazatel( demonstrira izpolzvaneto na baza danni).
2D demo(grafiki v rezhim na izpulnenie i Timer);
Nashata purva programa - Hello World

Vsiaka sreda za programirane i vseki samouchitel, za
koito i da e ezik zapochva s izrabotvaneto na nai-prostata programa. V nashiia
sluchai shte izrabotim malko prozorche s edin buton. Pri natiskane na butona shte se
poiaviava suobshtenie “Hello World”. SHTe obiasnia
izrabotvaneto na stupki:
1)
Startirame Lazarus i suzdavame nov
proekt ot menyu File-New… i posle
Project->Application;
2)
Izbirame TButton ot lentata s komponenti
(LCL) i go postaviame chrez natiskane na prazniia
prozorets (Form1);
3)
Markirame novosuzdadeniia buton i ot “Object
Inspector” promeniame “Caption” na
“Click Me”;
4)
SHTrakame dva puti na butona za da suzdadem protsedura, koiato shte se izpulni
pri natiskaneto mu;
5)
Otvaria ni se “Source Editor”. Vuvezhdame:
Showmessage(‘Hello World’);
TSialata protsedura na butona
izglezhda taka:
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(‘Hello World’);
end;
6)
Mozhe da natisnete na prozoretsa, no izvun butona za da markirame
Form1 i da smenite “Caption”
na “Hello World”;
7)
Neka probvame programata. Za da kompilirame i startirame natiskame
F9.
Pozdravleniia! Veche napisahte
purvata si programa na Lazarus. Ako ste poluchili
greshka, molia proverete dali ste izpulnili vsichko pravilno ili puk svalete
proekta ot:
http://www.violin-bg.com/doc/HelloWorld.tar.bz2 i go sravnete s vashiia.
Izrabotka na Prost tekstov redaktor
Adres na izhodniia kod:
http://www.violin-bg.com/doc/SimpleEditor.tar.bz2
Izbrah da vi pokazha kak da napravite prost tekstov
redaktor, zashtoto ne e trudoemko i shte vi pokazhe kak za nula vreme mozhe da
izrabotite raboteshta programa na Lazarus.
Eto i stupkite:
1)
Zapochvame otnovo sus startirane na Lazarus
i suzdavane na nov proekt ot menyu File-New… i
Project->Application;
2)
Neka promenim zaglavieto na prozoretsa na “Simple text editor”.
Predpolagam che se doseshtate, che predi tova triabva da se markirali prozoretsa “Form1”
i che zaglavieto se smenia, kato promenite “Caption” ot
“Object Inspector”;
3)
Sega neshto mnogo vazhno za povecheto programi, a imenno menyu. Neka suzdadem
edno menyu i za nashiia softuer. Izberete “TMainMenu” ot
“Standard” na lentata s komponenti(LCL).
Natiskame na prozoretsa za da vmuknem komponenta. Poiaviava se malko kvadratche
32h32 piksela. Tova oznachava, che komponenta ne e vidim po vreme na izpulnenie na
programata ili inache kazano tova kvadratche niama da se vizhda. Natisnete go dva
puti. Otvaria se prozorets s ime “Menu Editor” ili
prevedeno na bulgarski “Redaktor na menyu”. Markirame “New
Item 1” i zadavame “Caption” na “File”.
Natiskame s desniia buton na mishkata vurhu menyuto v “Menu
Editor”. Izbirame “Insert New Item (After)”
za da dobavim novo menyu. Izbirame novosuzdadenoto menyu i nastroivame “Caption”
na “Options”. Kato natisnem na “File” s desniia buton i
izberem “Create Submenu” shte suzdadem podmenyu. Neka go
napravim. Sega v podmenyuto mozhe da suzdavame menyuta prinadlezhashti kum “File” po
sushtiia nachin, po koito suzdadohme “Options”. Eksperimentiraite dokato razuchite
protsesa po suzdavane na menyuto. Sled kato razuchite vsichko suzdaite menyu sus
slednata struktura:
>File
>New
>Open
>Save as...
>Exit
>Options
>Font
4)
Veche suzdadohme menyu. Red e da vuvedem poleto, kudeto shte se redaktira
teksta. Otnovo ot “Standard” na palitrata s komponenti
vuvezhdame ‘TMemo”. Postavenoto pole ne pokriva tseliia
prozorets. Bihme mogli da go razpunem po prozoretsa, no kakvo shte stane, kogato
potrebiteli promeni goleminata mu? Dobur vupros. Reshenieto tuk e po-prosto,
ot kolkoto ochakvate. Lazarus mozhe da podrezhda i razpuva komponentite avtomatichno
spored razmera na prozoretsa. Za da okazhem na Lazarus, che iskame komponenta
vinagi da zapulva tseliia prozorets zadavame “Align” ot “Object
Inspector” na “alClient”. Vednaga zabeliazvame
promianata, koiato ni udovletvoriava;
5)
Ostana da dobavim komponenti na prozortsite za SHrifta, Otvariane i
Zatvariane.Ot palitrata s komponenti v razdel “Dialogs”
dobaviame kum prozoretsa “TOpenDialog”, “TSaveDialog”,
“TFontDialog”;
6)
Stignahme do momenta, v koito shte pishem koda. Ot menyu-to na prozoretsa(VNIAMANIE:
tuk ne stava na vupros za Menu Editor, a za menyuto,
koeto se e poiavilo v posledstvie) izbirame “File” i tikame na “New” za da
otvorim redaktora na kod i dobaviame slednoto kum protsedurata, koiato se
suzdava avtomatichno:
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
7)
Po sushtiia nachin vuvezhdame koda za menyu “Open” :
procedure TForm1.MenuItem4Click(Sender: TObject);
begin
if OpenDialog1.Execute and not(OpenDialog1.FileName
= '') then
begin
memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
8)
Za menyu “Save as..”:
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
if not FileExists(SaveDialog1.FileName) then
Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
end;
end;
9)
Za menyu “Exit”:
procedure TForm1.MenuItem6Click(Sender: TObject);
begin
application.Terminate;
end;
10)
Menyu Options->Font:
procedure TForm1.MenuItem7Click(Sender: TObject);
begin
FontDialog1.Font := Memo1.Font;
if FontDialog1.Execute then
begin
Memo1.Font := FontDialog1.Font;
end;
end;
11)
Ostanaha niakolko neshta za opraviane. Purvo v poleto za vuvezhdane na tekst
niama lenti za skrolirane. Markirame poleto i v “Object
Inspector” zadavame na “Scrollbars” stoinost “ssBoth”.
Pri zapazvane i otvariane na failove iskame da ogranichim da se pokazvat samo
failove s razshirenie “.txt”. Izbirame
OpenDialog1 i na Filter
pishem “Text|*.txt”. Sushtoto pravim i za SaveDialog1;
Programata e zavurshena. Ako ne
iska da se kompilira ili izkarva greshka, molia sverete i sravnete proekta ot:
http://www.violin-bg.com/doc/SimpleEditor.tar.bz2
Dobaviane na novi komponenti kum
Lazarus. Dobaviane na dostup do baza danni chrez instalirane na
TDbf.
Za da izrabotim programa
polzvashta baza danni, e neobhodimo da instalirame podhodiashta biblioteka za dostup
do takava baza. SHTe instalirame Tdbf. Tova e komponent za dostup do dBASE
failove. Mozhe da go namerite v direktoriiata na Lazarus i ne e nuzhno da go
teglite. Startiraite Lazarus. Sled tova menyu
Components->Open package file(.lpk).
Izbirame paketa na Tdbf, koito se namira v direktoriia
“/usr/share/lazarus/components/tdbf”
. SHTe se otvori prozorche sus sudurzhanieto na paketa i niakolko butona. Natisnete “Install”
i turpelivo izchakaite dokato Lazarus se prekompilira i
restartira. Veche imame instaliran neobhodimiia paket i mozhe da produlzhim napred
kum izrabotvaneto na primerna programa, polzvashta baza danni.
Izrabotka na Lichen telefonen ukazatel

Adres na izhodniia kod:
http://www.violin-bg.com/doc/Database.tar.bz2
Imame vsichko neobhodimo za izrabotvane na nashiia telefonen
ukazatel. Eto i stupkite, prez koito triabva da preminem:
1)
Startirame Lazarus i zapochvame nov proekt.
Nastroivame “Caption” na prozoretsa na “Address
Book”;
2)
Postaviame dva butona v gorniia liav ugul na prozoretsa, kato gi razpolagame
horizontalno edin do drug. Zaglavieto na purviia buton pravim na “New”,
a na vtoriia “Open“;
3)
Dobaviame “TOpenDialog” i “TSaveDialog”.
Tiah shte izpolzvame pri izpulnenieto na butonite, koito tukmo suzdadohme. Dobre e
sushto da zadadem “Filter” na tezi dva komponenta
“DataBase|*.dbf”;
4)
Sega e vreme da postavim komponentite za dostup do baza danni. Mozhete da
gi namerite v razdel “Data Access” i “Data
Controls”. Ot “Data Access” dobaviame kum
prozoretsa komponent “Tdbf”. Tova e tozi, koito
instalirahme v prednata tema. Toi shte chete faila na bazata danni i shte predava
informatsiiata kum komponentite ot “Data Controls”, no
za da mozhe da komunikira s tiah e nuzhen posrednik. Tova e “Tdatasource”
namirasht se v sushtiia razdel. Postaviame go na prozoretsa;
5)
Za da napravi zhivota ni po-lesen i da ne se nalaga da pishem vsichko v
po-prosti programi kato tazi, Lazarus razpolaga s
bogata gama ot komponenti. Mnogo polezen komponent ot “Data
Controls” e “TDBNavigator”. Toi shte se grizhi za
vuvezhdaneto, redaktiraneto, iztrivaneto i priemaneto na zapisi kum bazata danni,
kato po tozi nachin shte si spestim dosta butoni i kod. Postaviame “TDBNavigator”
tochno pod butonite, kato razpuvame desniia mu krai do kraia na prozoretsa.
Nastroivame mu Anchors->akRight na
“True” ot “Object Inspector”;
6)
Dobaviame i “TDBGrid” i razpuvame komponenta,
taka che da populni ostanalata chast ot prozoretsa. Sled tova za komponenta
nastroivame vsichko v Anchors na “True”;
7)
Ostana da svurzhem komponentite, koito shte komunikirat pomezhdu si, predi da
preminem kum pisaneto na koda. Izbirame “TDBGrid”,
poglezhdame v “Object Inspector” i ot padashtoto menyu na
“DataSource” izbirame “datasource1”.
Izbirame “TDBNavigator” i zadavame “datasource1”
za “DataSource”. Sega izbirame samiia “Datasource1”
i zadavame “Tdbf” za “DataSet”;
8)
Sega preminavame kum pisane na koda za buton “New”.
Pri natiskaneto mu, programata shte suzdava nov fail s baza danni.
Eto i koda za
tozi buton:
procedure TForm1.Button1Click(Sender: TObject);
begin
if savedialog1.Execute and not(savedialog1.FileName
= '') then
begin
Dbf1.Active := false;
Dbf1.FilePathFull := extractfilepath(savedialog1.filename);
Dbf1.TableLevel := 4;
Dbf1.TableName := extractfilename(savedialog1.filename)+'.dbf';
With Dbf1.FieldDefs do
begin
Clear;
Add('NAME', ftString, 25, True);
Add('TELEPHONE', ftInteger, 10, True);
End;
Dbf1.CreateTable;
Dbf1.Exclusive := true;
Dbf1.Open;
Dbf1.Active := true;
end;
end;
9)
Za buton “Open” koda e samo:
procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute and not(opendialog1.FileName
= '') then
begin
Dbf1.Active := false;
Dbf1.FilePathFull := extractfilepath(opendialog1.filename);
Dbf1.TableName := extractfilename(opendialog1.filename);
Dbf1.Open;
Dbf1.Active := true;
end;
end;
E tova e nashata primerna programka. Prosta no funktsionalna,
nali? :) Znam che informatsiiata za rabota s baza danni e nedostatuchno. Ako iskate
da nauchite oshte, mozhe da posetite:
http://wiki.lazarus.freepascal.org/index.php/Lazarus_Tdbf_Tutorial
Rabota s Timer i grafika v
rezhim na izpulnenie

Adres na izhodniia kod:
http://www.violin-bg.com/doc/demo2.tar.bz2
Tuk shte izrabotim prosta demonstratsiia na
Timer i TPaintBox, kakto i chertaneto na grafiki
v Lazarus. Neka da ne gubim vreme i da se zahvanem na
rabota:
1)
Kakto vinagi, zapochvame nov proekt i smeniame zaglavieto na prozoretsa na “Demo”;
2)
Tozi put iskame prozoretsa da ima tochno opredeleni razmeri i da ne mozhe da
se razpuva ot potrebitelia. Zatova zadavame “bsSingle”
na “BorderStyle“, “False” za “BorderIcons->biMinimize”,
“240” na “ClientHeight” i
“320” za “ClientWidth”;
3)
Postaviame TPaintBox, koeto shte namerite v razdel
“Additional”. Smeniame mu “Align”
na “clClient” za da go razpunem na prozoretsa;
4)
Posledniia komponent, koito postaviame e TTimer,
koito shte namerite v razdel “System”. Nastroite “Interval”
na taimera da e “1000” i se ubedete che “Enabled” e “True”;
5)
Otvariame koda na proekta i deklarirame slednoto sled “implementation”:
var
{31+1=32x10 = 320 /10 golemina na 1 kv./ analogichno: (23+1)x10=240}
Map: array[0..31,0..23] of integer;
6)
Zadavame kod za “OnCreate” na prozoretsa:
procedure TForm1.Form1Create(Sender: TObject);
var
x,y,i: integer;
begin
Randomize;
for x := 0 to 31 do
begin
for y := 0 to 23 do
begin
i := Random(3);
Map[x,y] := i;
end;
end;
end
7)
Koda na taimera(Timer1) e:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.OnCreate(self);
PaintBox1.Repaint;
end;
8)
I posledno ostana da dobavim metoda za izchertavane na grafikite kum “PaintBox1”.
Na “OnPaint” zadavame sledniia kod:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
i,z: integer;
begin
for i := 0 to 31 do
begin
for z := 0 to 23 do
begin
if map[i,z] = 0 then
begin
PaintBox1.Canvas.Brush.Color := clBlue;
PaintBox1.Canvas.Rectangle(i*10,z*10,(i*10)+10,(z*10)+10);
end
else if map[i,z] = 1 then
begin
PaintBox1.Canvas.Brush.Color := clYellow;
PaintBox1.Canvas.Rectangle(i*10,z*10,(i*10)+10,(z*10)+10);
end
else if map[i,z] = 2 then
begin
PaintBox1.Canvas.Brush.Color := clRed;
PaintBox1.Canvas.Rectangle(i*10,z*10,(i*10)+10,(z*10)+10);
end;
end;
end;
end;
S tova nashata demonstratsiia e zavurshena. Nadiavam se, che ste
dobili predstava kakva e funktsiiata na “TTimer” i “TPaintBox”.
Vuprosi i otgovori
V: Moga li da
napravia igra s Lazarus?
O: Da. Bihte
mogli da napravite pochti vsiaka igra, koiato si pomislite, stiga tia da vi e po
silite :) Preporuchvam vi da si svalite JediSDL, koeto
e biblioteka za SDL, koiato raboti na
FreePascal i Lazarus. Kato
primerna igra mozhe da poglednete “Zlaten vek 1” (http://openfmi.net/projects/goldencentury/);
V: Moga li da
razrabotvam 3D prilozheniia s
Lazarus?
O: Da. Posetete
http://www.glscene.org
Tova sa biblioteki za OpenGL, koito veche
rabotiat i na Lazarus.
V: Zashto
Lazarus se prekompilira pri instalirane na nov paket?
O: Lazarus e mlad proekt i
vse oshte niama zavurshena takava optsiia. Za sega e nuzhno prekompilirane.
V: Zashto programite,
koito Lazarus kompilira sa tolkova golemi, kak da gi
smalia?
O: Po podrazbirane Lazarus
kompilira zaedno s informatsiiata ot debug-era. Za da ia
premahnete izpolzvaite programata “strip” naprimer ot
komandniia red: “strip vashata_programa”.
Sled tova mozhe da izpolzvate UPX za da kompilirate
izpulnimiia fail i bihte mogli da stignete do priiatnite 400-500kb,
koito ne sa mnogo imaiki predvid mnozhestvoto biblioteki vklyucheni v nego, za
koito ne e spomenato v tozi dokument.
V:
Lazarus e 100% suvmestim s Delphi.
Taka li?
O: Ne. Toi ne e
100% suvmestim, no tseli da bude takuv.
V: Zashto primerite
v dokumenta sa na angliiski a ne na bulgarski. Zashto vmesto “File”
ne e “Fail”?
O: Izbrah da sa
na angliiski, zashtoto kirilizatsiiata pod Linux chesto
zatrudniava nachinaeshti, a tazi statiia e nasochena predimno za takiva potrebiteli;
Tozi dokument e
napisan ot Violin Georgiev Iliev.
Avtorski prava ©
Violin Georgiev Iliev 2005(www.violin-bg.com)