ot Violin Iliev(25-08-2005)

reiting (1106)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

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)



    << Vuvedenie v dinamichnata optimizatsiia | Moderni metodi za upravlenie na pametta v C++ >>