delphi tutorial

Upload: amerkrivokapa

Post on 11-Jul-2015

477 views

Category:

Documents


3 download

TRANSCRIPT

Poto je Delphi kompletan programski jezik, razumljivo je da postoje mnogi aspekti programiranja. Tako recimo, programer moe kucati kod koji nee imati nikakvog spoljanjeg efekta ( primjer : stvaranje vlastitih komponenti ), ili moe praviti Windows aplikaciju koja moe biti i te kako interaktivna. Ovaj site je predvien za poetnike u Delphiju, pa ak i u programiranju uopte ( znanje Pascal-a je ipak poeljno ), te moda za one koji su taj nivo ve prerasli neka od gore navedenih podruja ne budu dovoljno opirno izloena, pa im ih preporuujem samo za ponavljanje, ne obavezno za uenje novog. Treba takoe istai da je ovaj site apsolutno obrazovnog karaktera i na njemu se ne nalaze stvari koje bi mogle initi bilo kakvu tetu ( kodovi virusa i sl. ). Objekti su ustvari bit Delphija. Nema Delphija bez objekata. Naime, sve to vidite u Delphiju i sa ime radite su objekti. Tako, recimo, im otvorite Delphi, dobijate prvi i glavni objekt sa kojim ete raditi, a to je Form. Form je ustvari prozor na koji se stavljaju ostali objekti ( vidi Komponente ). Naravno, Delphi ne bi bio to to jeste da se objektima ne moe manipulisati. Tako moemo pored fizikih promjena ( mijenjanje irine, visine, boje... ) stvarati i akcije za taj objekt ( na pritisak mia, na pomjeranje mia... ). Vrlo vana odlika objekata je nasljeivanje. Naime, kad god se jedan objekat stavi na drugi ( npr. Label na Form ) ovaj prvi postaje 'dijete' ( engl. Child ), a drugi 'roditelj' ( engl. Parent ), te e, po toj logici, prvi objekt naslijediti neke osobine od drugog ( npr. boju, font... ). Vano je napomenuti da broj 'dijete' objekata uopte nije ogranien za jedan 'roditelj' objekt. To doputa itekako veliku slobodu programeru. Kao i sve u Delphiju, programer moe sam stvarati objekte po svom nahoenju i svojim eljama. No, o tom potom. Najvanije na kraju: za svaki objekt vezane su njegove osobine ( engl. Properties ). Pomou njih se manipulie objektima. Kako su one vrlo znaajne za programiranje u Delphiju, stavljene su u posebno poglavlje ( vidi Osobine ). Osobine se mijenjaju na dva naina. Onaj koji se prvi naui je pomou Object Inspectora. To je prozor koji se nalazi sa lijeve strane i uvijek je otvoren. On sadrava osobine svih objekata koje trenutno programer koristi, ali je samo jedna vidljiva i to ona koja je pod fokusom ( na koju je

kliknuto miem ). Tako recimo Form, kao glavni objekt, sadri slijedee osobine:Action Izaberete neku proceduru koja e biti obavljena pri otvaranju prozora ActiveControl Pokazuje objekat koji je aktivan nakon otvaranja prozora Align Prijanjanje uz neku od ivica ekrana Anchors Pokazuje kako je objekat vezan za 'roditelj' objekat AutoScroll Odreuje da li e se automatski pojaviti scrollbarovi ako je to potrebno AutoSize Odreuje da li e objekt tako prilagoditi veliinu da nema slobodnog prostora

BiDiMode Pravac objekata BorderIcons Ikone poput minimize, maximize, close BorderStyle Odreuje stil prozora ( npr. Sizeable - mogue je mijenjati veliinu u radu )

BorderWidth irina okvira Caption Naslov ( npr. u ovom prozoru je naslov 'Programiranje: Osobine...' ) ClientHeight Visina 'korisnog' dijela prozora ClientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranienja ( npr. visine ) Ctl3D Odreuje da li e objekat biti 3D renderisan Cursor Odreuje kakav e kursor biti iznad objekta DefaultMonitor Odreuje koji objekat e biti glavni DockSite Odreuje da li je objekat vezan DragKind Odreuje vrstu povlaenja objekta DragMode Odreuje nain povlaenja objekta Enabled Pokazuje da li je objekat 'iv' Font Odreuje font na objektu FormStyle Stil prozora ( npr. MDIChild - prozor unutar drugog prozora ) Height Visina objekta ( dimenzija po y-osi ) HelpContext Dio Help file koji e biti prikazan po pritisku na 'What's this?' HelpFile Odreuje koji file slui kao Help file Hint Tekst koji se nalazi u utom okviru koji slui kao objanjenje HorzScrollBar Odreuje osobine horizontalnog scrollbara Icon Ikona u gornjem lijevom uglu prozora KeyPreview Odreuje da li e objekat reagovati na tastaturu prije aktivne kontrole Left Udaljenost objekta od lijeve strane 'roditelj' objekta ( ovdje ekrana ) Menu Pokazuje na meni tog prozora Name Ime objekta ( automatski je Form1, ali se moe mijenjati ) ObjectMenuItem Pokazuje na jedan dio menija

OldCreateOrder Odreuje kreiranje i unitavanje objekta ParentBiDiMode Nasljeivanje BiDiMode ParentFont Nasljeivanje fonta PixelsPerInch Broj taaka po inu PopupMenu Odreuje popup meni za objekat Position Odreuje poziciju prozora ( npr. ScreenCentar - uvijek u centru ekrana )

PrintScale Skala za printanje Scaled Skaliranje ShowHint Odreuje da li e Hint biti prikazan Tag Brojna oznaka objekta Top Udaljenost objekta od gornje strane 'roditelj' objekta ( ovdje ekrana ) UseDockManager Odreuje koritenje dock managera pri pomjeranju prozora VertScrollBar Odreuje osobine vertikalnog scrollbara Visible Pokazuje da li je objekat vidljiv Width Odreuje irinu objekta ( dimenzija po x-osi ) WindowMenu Odreuje meni ako je FormStyle MDIForm WindowState Stanje prozora ( npr. Maximized - starta se maximizovan )

Naravno, nisu iste osobine za sve objekte, ali je princip isti. Drugi nain mijenjanja osobina je mijenjanje u radu. Ovo je programerski nain. Naime, dok program radi programer nema mogunost mijenjati osobine pomou Object Inspectora. Tako recimo ako hoemo da u toku rada programa, prozor ( npr. Form1 ) promijeni visinu ( koja je iznosila npr. 375 ) na 400, treba da ukucamo ovo:Form1.Height := 400;

Dakle, prvo upisujemo ime objekta, pa stavljamo taku. Delphi je toliko razvijen da e automatski izbaciti listu osobina, pa se lako moe izabrati Height ( visina ). Ko je nestrpljiv moe sam da ukuca ovo Height. Mala i velika slova nisu vana, tj Delphi ne pravi razliku, ali je koritenje istih preporuljivo radi lakeg snalaenja, ali i estetike. Poznavatelji Pascal-a prepoznaju ovdje standardni nain dodjeljivanja vrijednosti promjenljivoj. Vano je napomenuti da ovaj kod moemo kucati samo kao dio neke procedure.

For petlja je najpoznatija petlja, ali ne uvijek i najbolja. U ovoj petlji programer definie broj ponavljanja i radnje koje se vre za vrijeme tog ponavljanja. Primjer, da se irina i visina mijenjaju za 10, i to 3 puta:for i := 1 to 3 do begin Form1.Width := Form1.Width + 10; Form1.Height := Form1.Height + 10; end;

Dakle, ako se izvrava vie naredbi, koristi se begin..end blok. REPEAT Repeat..until petlja se koristi ako broj ponavljanja nije apsolutan. To u praksi znai da e se neto ponavljati dok se odreeni uslov ne ispuni. Primjer, prozor ( Form1 ) mijenja irinu za 1 dok ona ne pree vrijednost od 600.repeat Form1.Width := Form1.Width + 1; until Form1.Widht = 600;

Lako se zakljuuje da e se radnja obaviti bar jednom. ak i ako se vri vie radnji begin..end blok nije potreban. WHILE Kao i Repeat petlja i While se koristi ako broj ponavljanja nije apsolutan. Meutim, razlika je u tome to se ponavljanje vri dok je uslov ispunjen. Primjer, prozor ( Form1 ) poveava irinu dok god je ona manja od 600.while Form1.Width < 600 do Form1.Width := Form1.Widht + 1;

Ovdje se radnja nece izvriti nijednom ukoliko je irina ve vea od 600. Ukoliko se vri vie radnji koristi se, kao i kod for petlje, begin..end blok.

Konano malo konkretnog programiranja. Procedure su intelektualna osovina Delphija. Svaka radnja je, ustvari, jedna procedura. Prvo, upoznavanje sa jedinicom ( engl. Unit ). Prvi kontakt je svakako zbunjujui i jedinica djeluje krajnje komplikovano. Meutim, sve je potputno jasno. Zatamnjene rijei odvajaju cjeline i to malo pojanjava stvar. A tu je i veza sa procedurama. Naime, u oi odmah upadaju rijei private i public. Iznad private su procedure definisane od strane samog Delphija. Na samom poetku nema nijedne procedure. Ispod private su procedure koje definie sam programer. Mogu biti privatne i javne. Privatne su samo za taj prozor, a javne za sve prozore u tom projektu. Dakle, kad startamo Delphi dobijamo prazan Form i skoro prazan Unit. Da ne bi sve bilo turo tivo, evo primjera. Recimo da elimo da se poslije klika miem na prozor, boja prozora promijeni u crvenu.1. Kliknimo jednom na Form. 2. Sa lijeve strane tu je Object Inspector koji sadri dvije trake : Properties i Events. Biramo Events. 3. Od mnogih mogunosti biramo onu OnClick. Dvoklikom na prazno desno polje pored OnClick Delphi stvara procedure FormClick. 4. U jedinici se prikazuje sljedei tekst:procedure TForm1.FormClick(Sender: TObject); begin end;

i u prazan prostor u begin..end bloku upisujemo: Primjeujemo da boje imaju prefiks cl.Form1.Color := clRed;

Za pisanje privatnih procedura potrebno je definisati proceduru ispod rijei private. Definiemo je na sljedei nain: - ispisujemo rije procedure, - ispisujemo ime procedure ( npr. Bojenje ), - nakon imena mogu se u zagradi definisati neke varijable koje e procedura koristiti, ali to nije obavezno. Zatim se ispod implementation pie sama procedura. Prostor nije teko nai. Uostalom tamo su sve procedure, pa i one koje Delphi definie. Evo i primjera. Recimo da elimo definisati privatnu proceduru koja e bojiti prozor u crveno, a zatim i proceduru da na klik miem obojimo prozor.

1. Kliknimo na Unit i izaberimo mjesto ispod rijei private. Tu upiimo:procedure Bojenje;

2. Zatim ispod rijei piemo:implementation {$R *.DFM} procedure TForm1.Bojenje; begin Form1.Color := clRed; end;

3. Zatim ponovimo prva 3 koraka iz prolog primjera. 4. U prazan prostor begin..end bloka upisujemoBojenje;

Dakle proceduru definiemo i determiniemo. Determiniemo je kao privatnu, a definiemo je u implementaciji. Primjeujemo rije TForm1. To je oznaka 'roditelja' ove procedure, a u naem sluaju to je Form1. Da se objekat zvao 'Prozor' pisali bismo 'TProzor'. Ovo 'T' daje do znanja Delphiju da je to objekat i koristi se samo pri definisanju procedura i funkcija. Iako poglavlje nosi naslov 'Funkcije', a u poglavlju 'Procedure' je ve bilo govora o jedinicama, ipak je ovo pravi trenutak da se dublje pozabavimo njima. Naime, ako opet pogledamo kako to izgleda jedan Unit, primjeujemo rezervisanu ( podebljanu ) rije uses. Nakon nje slijedi spisak svih jedinica koje koristi va projekt. To su posebne jedinice koje nemaju svoj prozor, ve samo sadravaju odreene funkcije. Tako, recimo, Math unit sadri mnoge matematike funkcije, neke i vrlo vane, kojih nema u Delphiju. Uzmimo primjer funkcijePower(Base: Extended; Exponent: Extended): Extended.

Ova funkcija izraunava xy. Recimo da elimo izraunati 733 i tu vrijednost dodijeliti promjenljivoj a, pa piemo: Primjeujemo da je kao baza uneseno 7, a kao eksponent 33. Sve u svemu vrlo jednostavno. Meutim, da smo htjeli sami da definiemo takvu funkciju morali bismo raditi sljedee:1. Kliknimo na Unit i izaberimo mjesto ispod rijei private. Tu upiimo:function Stepenovanje(Baza: Integer, Eksponent: Integer): Integer; a := Power(7, 33);

2. Zatim ispod rijei piemo:implementation {$R *.DFM}

function TForm1.Stepenovanje(Baza: Integer, Eksponent: Integer): Integer;

var i, t: Integer; begin t := 1; if i 0 then for i := 1 to Eksponent do t := t * Baza; Stepenovanje := t; end;

Dakle, funkcije se definiu tako to se nakon imena u zagradu upisuju promjenljive koje definie korisnik, a nakon zagrade tip koji funkcija vraa. U gornjem primjeru to je Integer, najei tip brojevnih promjenljivih. Ovako se pie funkcija za jednokratnu upotrebu. Ali ako elimo da napiemo jednu ili vie funkcija koje moemo koristiti u svim projektima, definiemo funkcije kao public, a unit uvamo kao poseban, bez prozora. U projektima u kojima elimo da upotrebimo taj unit, u gore pominjanu listu uses dodajemo i ime tog unita ( ako je sauvan pod imenom MyUnit, piemo upravo MyUnit ). Isto vai i za jedinice koje nisu ve navedene ( Delphi smatra samo odreene jedinice za default i kao takve ih ispisuje automatski, ali onih koje ne spadaju u takve ima puno vie. One dolaze sa Delphijem. Takve su recimo Math, Chart, Db... ). Oigledno je da su funkcije veoma sline procedurama. Ustvari, jedina razlika je to funkcije daju neku povratnu vrijednost, a procedure samo obavljaju odreene radnje, te se moe rei da su funkcije proirene procedure. JEDNA VRLO VANA PROCEDURA: FormIme.Show; ( FormIme je ime prozora koji elimo otvoriti ) Ova procedura je specifina po tome to se u jedinicu prozora iz kojeg elimo otvoriti prozor treba unijeti sljedei kod: uses UnitIme; ( UnitIme je ime jedinice prozora koji elimo otvoriti ) Meutim, za razliku od gore pominjanih jedinica, ovaj kod se unosi, kao i procedure i funkcije, izmeu rezervisane rijei implementation i {$R *.DFM}. Ovo poglavlje posveeno je posebnoj vrsti objekata koja je od ogromnog znaaja. tavie, komponente ine Delphi ovim to jeste. Poto je Delphi izuzetno razvijen, pored velikog broja ugraenih komponenti mogue je stvarati i nove, te e i tome biti posveen dio ovog poglavlja. U narednoj tabeli se nalaze sve ugraene komponente i njihovo kratko objanjenje.

Standard MainMenu Glavni meni ( npr File, Edit... ) PopupMenu Meni koji se otvara desnim klikom mia Label Tekst Edit Prostor za unos teksta Memo Prostor za unos teksta sa veim kapacitetom Button Dugme CheckBox Kutija za oznaavanje jedne ili vie opcija RadioButton Kutija za oznaavanje jedne od opcija ListBox Lista ComboBox Padajua lista ScrollBar GroupBox Grupa komponenti RadioGroup Grupa RadioButtona-a Panel Panel ActionList Lista Akcija Additional BitBtn Dugme sa slikom pored teksta SpeedButton Dugme sa slikom umjesto teksta, ali sa mogunou ispisa teksta MaskEdit Prostor za unos maskiranog teksta StringGrid Vrsta Tabele za tekst DrawGrid Vrsta Tabele koja se moe docrtavati Image Slika Shape Oblik Bevel Kutija ScrollBox Kutija sa ScrollBar-ovima CheckListBox ListBox sa mogunou za oznaavanje Splitter Rastavlja StaticText Tekst sa okvirom ControlBar Toolbar Chart Grafikon Win32 TabControl Dijeli prostor na table PageControl Dijeli prostor na stranice ImageList Lista slika RichEdit Prostor za unos teksta sa vrlo velikim kapacitetom TrackBar Bar sa klizaem ProgressBar Bar sa postotkom

UpDown Dva dugmeta za gore i dole HotKey Pokazuje koji su tasteri stisnuti Animate Puta animaciju ili film DateTimePicker Bira datum i vrijeme MonthCalendar Kalendar TreeView Tree ( drvo ) pregled ListView Pregled u vidu liste HeaderControl Zaglavlje StatusBar Statusbar ToolBar Bar sa alatkama CoolBar ToolBar PageScroller Uljepani ScrollBar System Timer toperica PaintBox Kutija za crtanje MediaPlayer Player multimedijalnog sadraja OleContainer Kontejner za jednu aplikaciju DdeClientConv Slui za uspostavljanje DDE razgovora (stara tehnologija ) DdeClientItem DdeServerConv DdeServerItem DdeClientConv Internet ClientSocket Slui za stvaranje TCP/IP aplikacija ServerSocket Slui za stvaranje TCP/IP servera WebDispatcher Manipulie Web akcijama PageProducer Konvertira u HTML QueryTableProducer DataSetTableProduce r DataSetPageProduce r NMDayTime Nalazi datum i vrijeme sa internet servera NMEcho alje tekst i vraa ga NMFinger Nalazi podatke o korisniku NMFTP Slui za prenos podataka NMHTTP Otvara HTTP bez downloada NMMsg alje tekstualne poruke preko interneta NMMSGServ Prima gore navedene poruke

NMNNTP ita News servere NMPOP3 ita Pop3 e-mail NMUUProcesor Dekodira NMUU file-ove NMSMTP ita SMTP e-mail NMStrm alje stream podatke NMStrmServ Prima stream podatke NMTime ita datum i vrijeme sa interneta NMUDP Povezuje se sa UDP serverom PowerSock Osnova za kreiranje protokola NMGeneralServer Osnova za itanje viestrukih servera HTML ita HTML NMURL Dekodira URL Data Access DataSource Posrednik izmeu data kontrola Table ita podatke iz baze podataka Query SQL pretraiva baza StoredProc Omoguava aplikaciji kontakt sa BDE serverom Database Stvara konekciju sa bazom Session Prua kontrolu nad svim bazama BatchMove Omoguava mijenjanje formata baze UpdateSql Obnavlja SQL NestedTable Izdvaja podatke iz viestrukih baza Data Control DBGrid Ispisuje podatke u vidu tabele DBNavigator Omoguava navigaciju kroz bazu pomou dugmia Prvi, Proli, Sljedei...

DBText Ispisuje jedan podatak kao tekst DBEdit Ispisuje podatak kao tekst koji se moe mijenjati DBMemo Ispisuje neki vei podatak kao tekst koji se moe mijenjati DBImage Prikazuje sliku iz baze DBListBox Prikazuje podatke iz baze kao listu DBComboBox Prikazuje podatke iz baze kao padajuu listu DBCheckBox Prikazuje Boolean podatke iz baze DBRadioGroup Prikazuje podatke kao RadioGroup DBLookupListBox Stvara listu pomou podataka DBLookupComboBox Stvara padajuu listu pomou podataka DBRichEdit Ispisuje neki vei podatak kao tekst koji se moe mijenjati DBCtrlGrid Prikazuje podatke u viestrukoj tabeli DBChart Prikazuje podatke kao grafikon

Midas ClientDataSet Stvara dataset bez baze DCOMConnection Uspostavlja DCOM konekciju CorbaConnection Uspostavlja CORBA konekciju SocketConnection Uspostavlja TCP/IP konekciju OLEnterpriseConnecti Uspostavlja OLEnterprise konekciju on DataSetProvider Dekodira podatke iz dataseta-a Provider Proireni DataSetProvider SimpleObjectBroker Locira server RemoteServer Uspostavlja DCOM konekciju u oba smjera MidasConnection Uspostavlja DCOM, TCP/IP i OLEnterprise konekcije u isto vrijeme Decision Cube DecisionCube Viedimenzionalna baza podataka DecisionQuery Specijalizovan Query za DecisionCube DecisionSource Odreuje stanje DecisionCube-a DecisionPivot Upravlja DecisionCube-om pomou dugmia DecisionGrid Ispisuje jednu dimenziju kao tabelu DecisionGraph Ispisuje jednu dimenziju kao grafikon QReport QuickRep Report form QRSubDetail Povezuje bazu sa reportom QRStringsBand Tekstualni kanal u reportu QRBand Manipulie kanalima QRChildBand Kanal u kanalu QRGroup Grupa komponenti u reportu QRLabel Tekst QRDBText Tekst iz baze QRExpr Ispisuje izraze i proraune QRSysData Ispisuje sistemske informacije QRMemo Vei tekst QRExprMemo Vea koliina izraza i prorauna QRRichText Tekst velikog kapaciteta QRDBRichText Tekst velikog kapaciteta iz baze QRShape Crte ( npr. pravougaonik ) QRImage Slika QRDBImage Slika iz baze QRCompositeReport Sloeni report QRPreview Preview report-a

QRTextFilter Tekst filter QRCSVFilter CSV filter QRHTMLFilter HTML filter QRChart Grafikon Dialogs OpenDialog DialogBox za otvaranje file-ova SaveDialog DialogBox za uvanje file-ova OpenPictureDialog DialogBox za otvaranje slika SavePictureDialog DialogBox za uvanje slika FontDialog DialogBox za biranje fonta ColorDialog DialogBox za biranje boje PrintDialog DialogBox za tampanje PrinterSetupDialog DialogBox za biranje printera FindDialog DialogBox za traenje ReplaceDialog DialogBox za zamjenu Win 3.1 ( stare komponente ) DBLookupList DbLookupListBox DBLookupCombo DbLookupComboBox TabSet TabControl Outline TreeView TabbedNotebook PageControl Notebook PageControl Header HeaderControl FileListBox Lista file-ova iz trenutnog direktorijuma DirectoryListBox Lista direktorijuma sa trenutnog drive-a DriveComboBox Padajua lista drive-ova FilterComboBox Lista filtera Samples Gauge Prikazuje procenat isteka vrene radnje ColorGrid Tabela boja SpinButton UpDown SpinEdit SpinButton vezan za Edit DirectoryOutline Spisak direktorijuma u vidu drveta Calendar Kalendar IBEventAlerter Alarm za odreene dogaaje ActiveX Chartfx Grafikon sa mnogo opcija VSSpell Provjerava spelling

F1Book Ispisuje formule VtChart 3D grafikon Graph 2D grafikon

A sad, da vidimo kako to naraviti komponentu. Krenimo od nule. Razmislimo kakvu elimo komponentu. Recimo, komponenta Clock koja izgleda kao Panel iji je Caption vrijeme. Biramo New Component ( Component meni ). Ancestor type - 'TPanel'. Class Name - 'TClock'. Stisnimo 'OK'. Delphi e stvoriti Clock.pas jedinicu koju treba dopuniti do:unit Clock; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TClock = class(TPanel) FTimer: TTimer; private { Private declarations } protected procedure OnTimer(Sender: TObject); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TClock]); end; constructor TClock.Create(AOwner: TComponent); begin inherited Create(AOwner); Caption := TimeToStr(Time); FTimer := TTimer.Create(Self); FTimer.OnTimer := OnTimer; end; procedure TClock.OnTimer(Sender: TObject); begin Caption := TimeToStr(Time); end;

destructor TClock.Destroy; begin FTimer := nil; inherited Destroy; end; end.

Zatim, idemo na 'Install Packages...' ( Component meni ). Biramo 'Borland user' i kliknemo na 'Edit'. Zatim 'Add' i biramo 'Clock.pas'. Kliknemo na 'Compile' i to je to. Nova komponenta Clock nalazi se u Samples tabli.