delphi 4 za 21 dan

901
   

Upload: aruen79

Post on 29-Oct-2015

236 views

Category:

Documents


1 download

DESCRIPTION

udzbenik programiranje

TRANSCRIPT

  • O autoruKent Reisdorph je glavni inenjer za softver u preduze}u TurboPower Software Co.,a samostalno radi i konsultacije. Kent je saradnik ~asopisa C++Builder DevelopersJournal firme Cobb Group i redovno pi{e ~lanke za Delphi Developers Journal.Tako|e je ~lan grupe TeamB, Borland-ove volonterske grupe za podr{ku. Kao ~langrupe TeamB, Kent provodi veliki broj sati u toku nedelje odgovaraju}i na pitanja uBorland-ovoj grupi za vesti, uglavnom o C++Builder-u i Windows programiranju.Autor je knjiga Sams nau~ite C++Builder za 21 dan i Sams nau~ite C++Builder 3za 21 dan. Kent ivi u Colorado Springs-u, drava Colorado, sa enom Jennifer i{estoro dece James, Mason, Mallory, Jenna, Marshall i Joshua.

    xxiii

  • PosvetaOva knjiga je posve}ena mojoj eni Jennifer. Ne mogu da pomislim da je posvetimbilo kojoj drugoj osobi. Kao i obi~no, hvala Jen {to odrava{ sve, dok sam zatvoren usvom svetu.

    Re~i zahvalnostiOvaj deo knjige mi je veoma lak. Lako je setiti se ljudi koji su u~estvovali uzavr{avanju projekta. Prvo bih eleo da se zahvalim Brian Gill-u za njegov predanrad na projektu. U par navrata sam poku{ao da prodrmam Brian-a, ali se nije nipomerio (ili nisam primetio da se pomerio!). Tako|e, elim se zahvalim KeziaEndsley za njen rad na ovoj knjizi. Kezia je odradila veliki deo posla na razvoju.Siguran sam da mi je rad sa njom veoma pomogao. Od ljudi u firmi MacmillanPublishing, eleo bih da se zahvalim Dana Leash i Heather Urschel.

    Postoji nekoliko ljudi u Inprise Corporation (nekada Borland International) kojimaelim da se zahvalim. Iako nisam imao puno direktnog kontakta sa Nan Borreson utoku ovog projekta, znao sam da je, rade}i u senci, uradila svoj uobi~ajeni posaoveoma dobro. @eleo bih da se zahvalim tehni~kim urednicima Bill Fisher i ElliePeters. Oboje su uradili dobar posao. Ne mogu da napomenem Ellie, a da ne dodamda mi je drago {to mi je Ellie prijatelj i tehni~ki urednik. Tako|e, elim da se zahvalim Steve Teixeira, Steve Trefthen i Ryder Rishel koji su brzo odgovarali napitanja koja sam im postavljao u toku rada na ovom projektu.

    Na kraju, elim da se zahvalim svojoj eni Jennifer. Ovo je tre}i projekt koji sam odra-dio, a Jennifer mi je uvek bila snana podr{ka. Daleko je dogurala i navikla je da me vidisa glavom na dole i slu{alicama na glavi. Ovih dana }u joj to nadoknaditi, obe}avam.

    xxiv

  • Recite nam {ta misliteKao ~italac, Vi ste najvaniji kriti~ar i komentator ove knjige. Mi procenjujemo Va{emi{ljenje, jer elimo da saznamo, {ta smo uradili dobro, {ta smo mogli bolje, koje oblastibiste eleli da obradimo u na{im izdanjima i kao i sva ona druga mudra zapaanja kojaelite da nam uputite. Vi moete da nam pomognete da napravimo jaku knjigu, koja }ezadovoljiti Va{e potrebe i da Vam ponudimo ra~unarski vodi~ kakav ste eleli.

    Da li imate pristup Word Wide Web-u? Pristupite na{em sajtu na adresi:

    http://www.kombib.co.yu

    Preuzmite kompletne sadraje knjiga, kompletna poglavlja. Saznajte koji su nasloviu pripremi. I jo{ mnogo toga...

    Sajt se menja dva puta nedeljno. Moete nas kontaktirati na slede}i na~in:

    E-mail: [email protected]

    xxv

  • Uvod: Vi se nalazite ovdeZar nije zgodno kada strelica na mapi pokazuje mesto na kom se nalazite? Pa, Vi steovde! Moda se ovde nalazite zato {to ste i ranije koristili Delphi i elite da vidite{ta ima novo u Delphi-ju 4. Moda ste ovde zato {to Vam je {ef rekao da treba dabudete ovde. Moda ste ovde i zato {to ste apsolutni po~etnik koji bi eleo da istraidivan svet Windows programiranja.

    Bez obzira na razlog Va{eg dolaska, dobro do{li! Mogu Vas uveriti da }e ovaj put bitiinteresantan. Bez sumnje }ete uivati u njemu. Uklju~i}e malo rada, ali }e biti izabave, ne{to kasnije. Verujte mi da se ni{ta ne moe porediti sa pretvaranjem Va{ihmisli u Windows program. Nadam se da }e Vas uhvatiti groznica programiranja i da}ete uroniti u sate i sate rada na programima.

    Ohrabrujem Vas da eksperimenti{ete u toku rada sa ovom knjigom. Odlaganje knjigei igranje moe da bude dobar na~in u~enja. Prolazak kroz knjigu nije trka. Prvi kojistigne do kraja ne dobija nagradu. Bolje da provedete 21 nedelju u~e}i Delphi pro-gramiranje, nego da jurite i da ne posve}ujete vreme konceptima koji su obra|eni uovoj knjizi. Bez sumnje, moje iskustvo mi govori da je najbolji na~in za u~enje, radna aplikaciji. Zamislite Va{u aplikaciju i radite na njoj u toku ~itanja knjige. Re{ava-nje pravih problema je jedan od na~ina za u~enje.

    Zbog toga i nije vaan razlog Va{eg dolaska. Mnogo je vanije da ste ovde. Drago mi je{to ste do{li i nadam se da }ete uivati u Delphi iskustvu. Opustite se, podignite nogena sto i zabavljajte se u~e}i kako da koristite Delphi. Siguran sam da }e Vam prijati.

    1

  • Kratak sadrajPrva nedelja na prvi pogled 3

    Dan 1: Po~etak rada sa Delphijem 52: Vi{e o Pascalu 473: Klase i objektno orijentisano programiranje 854: Istraivanje Delphijevog okruenja (Delphi IDE) 1175: Model vizuelnih komponenti 1696: Rad sa dizajnerom formi i dizajnerom menija 1997: VCL komponente 245

    Pregled sadraja prve nedelje 291

    Druga nedelja na prvi pogled 295Dan 8: Kreiranje aplikacija u Delphiju 297

    9: Projekti, editor koda (Code Editor) i prozor za ispitivanje koda (Code Explorer) 339

    10: Debagiranje Va{ih aplikacija 38911: Delphi-jevi alati i opcije 42912: Programiranje grafike i multimedije 45913: Iza osnova Delphi-ja 49914: Napredno programiranje 545

    Pregled sadraja druge nedelje 587

    Tre}a nedelja na prvi pogled 591

    Dan 15: COM i ActiveX 59316: Arhitektura baza podataka u Delphi-ju 52917: Pravljenje formi za rad sa bazama podataka 56718: Pravljenje programa za rad sa bazama podataka 58719: Pravljenje i kori{}enje DLL-ova 61120: Pravljenje komponenti 64121: Delphi i C++Builder 681

    Pregled sadraja tre}e nedelje 697Dodatni dan 799

    DodaciA: Odgovori na test pitanja 817B: Sadraji na Internet-u vezani za Delphi 839

    Index 843

    v

  • SadrajPrva nedelja na prvi pogled 3Dan 1: Po~etak rada sa Delphijem 5

    [ta je Delphi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5Kratak pogled na Delphi okruenje (Delphi IDE) . . . . . . . . . . . . . . . . . . . . .6

    Inspektor objekata (object Inspector) . . . . . . . . . . . . . . . . . . . . . . . . . . .7Delphi radni prostor (workspace) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

    Va{ prvi program: Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8Kreiranje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8Izmena programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9Zatvaranje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10

    Va{ drugi program Hello World, deo II . . . . . . . . . . . . . . . . . . . . . . . . . . .10Pisanje programa Hello World II . . . . . . . . . . . . . . . . . . . . . . . . . . . .11Izmena programa Hello World II . . . . . . . . . . . . . . . . . . . . . . . . . . . .11

    Pregled jezika Object Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12Na po~etku... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13Pascal juniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15Komentari u okviru koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23Promenljive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24Tipovi podataka Object Pascal-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26Operatori jezika Object Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30Konstante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32Nizovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32Stringovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46

    Dan 2: Vi{e o Pascalu 47if, then, else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47

    Izvr{avanje vi{estrukih instrukcija . . . . . . . . . . . . . . . . . . . . . . . . . . . .48Dodavanje iskaza else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49Ugnjedeni iskazi if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50

    Kori{}enje petlji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52Petlja for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53Petlja while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57Petlja repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59Iskaz goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60Procedure Continue i Break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61

    Iskaz case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62

    vii

  • Opseg (scope) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64Slogovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66Iskaz with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68

    Nizovi slogova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69Priklju~ene datoteke (include files) . . . . . . . . . . . . . . . . . . . . . . . . . . . .69

    Funkcije, procedure i metode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71Deklaracija i definicija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75Vrednosti, konstante i referentni parametri . . . . . . . . . . . . . . . . . . . . .76Lokalne funkcije i procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79Preoptere}enje metoda (method overloading) . . . . . . . . . . . . . . . . . . .80Generi~ki parametri za funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84

    Dan 3: Klase i objektno orijentisano programiranje 85Skupovi (sets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85Raspore|ivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87Pointeri (pointers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88

    Lokalno kori{}enje memorije nasuprot dinami~kom kori{}enju memorije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89Dinami~ko rezervisanje memorije i pointeri . . . . . . . . . . . . . . . . . . . . .91Uklanjanje reference pointera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92

    [ta je klasa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93Anatomija klase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94

    Nivoi pristupa klasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94Konstruktori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96Destruktori (destructors) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99Polja podataka (data fields) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101Metode (methods) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102O polju Self . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103Primer klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105

    Nasle|ivanje( inheritance) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110Preskakanje metoda (overriding methods) . . . . . . . . . . . . . . . . . . . . .111Klju~na re~ class: is i as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116

    Dan 4: Istraivanje Delphijevog okruenja (Delphi IDE) 117Delphi okruenje (Delphi IDE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117Projekti u Delphiju . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119

    Nau~ite za 21 dan Delphi 4

    viii

  • Datoteke koje se koriste u Delphi projektima . . . . . . . . . . . . . . . . . .119Juniti izvornog koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123

    Delphijev glavni meni (main menu)i traka sa alatima (toolbar) . . . . . . . .123Kori{}enje palete komponenti (Component palette) . . . . . . . . . . . . . . . . .125

    Postavljanje vi{e kopija komponenti . . . . . . . . . . . . . . . . . . . . . . . . . .125Postavljanje i centriranje komponenti na formi . . . . . . . . . . . . . . . . .126Meni sadraja palete komponenti (Component palette context menu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127

    Kretanje po paleti komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127Aplikacija sa vi{e formi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128Dodavanje junita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129

    Prevo|enje, kreiranje i povezivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130Prevo|enje i kreiranje drugih Object Pascal programa . . . . . . . . . . . . . .132

    Vi{e o Delphijevim formama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133Forme glavnog prozora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133Forme okvira za dijalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133Sekundarni prozori nasuprot okvirima za dijalog . . . . . . . . . . . . . . . .139Model interfejsa sa vi{esturkim dokumentima . . . . . . . . . . . . . . . . .139Karakteristike Key za forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140Metode forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143

    Object Inspector (inspektor objekata) . . . . . . . . . . . . . . . . . . . . . . . . . . . .147Selektor komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147Kartica Properties (karakteristike) . . . . . . . . . . . . . . . . . . . . . . . . . . .148Kartica Events (doga|aji) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151

    Usidreni IDE prozori (Dockable IDE Windows) . . . . . . . . . . . . . . . . . . . .152Sidri{ta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152Eksperimentisanje sa usidrenim prozorima . . . . . . . . . . . . . . . . . . . .153Zabranjeno usidravanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155

    Primer MDI programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155Kreiranje forme glavnog prozora . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156Pisanje koda za stavke menija FileOpen i FileSave As . . . . . . . .158Pisanje koda za meni Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160Kreiranje MDI forme potomka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160Kreiranje okvira About . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161Doterivanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164Radionoica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166

    Dan 5: Model vizuelnih komponenti 169Osnove kostura (frameworks) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169

    Za{to onda treba da brinem o kosturima programa? . . . . . . . . . . . . .170U ~emu je {tos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172

    Sadraj

    ix

  • Biblioteka vizuelnih komponenti (VCL) . . . . . . . . . . . . . . . . . . . . . . . . . . .173Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174Karakteristike, metode i doga|aji . . . . . . . . . . . . . . . . . . . . . . . . . . . .174

    Otkrivanje VCL-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187Klase forme i aplikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189Klase komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189I ovo ne bi bilo sve... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198

    Dan 6: Rad sa dizajnerom formi i dizajnerom menija 199Rad sa dizajnerom forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199

    Meni sadraja dizajnera forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200Postavljanje komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201Mrea dizajnera forme (Form Designer grid) . . . . . . . . . . . . . . . . . . .202Odabiranje komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202Pomeranje komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207Spre~avanje komponenti da se pomeraju, odnosnoda im se menja veli~ina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209Re|anje, isecanje, kopiranje i lepljenje komponenti . . . . . . . . . . . . . .209Promena veli~ine komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211Poravnavanje komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214Postavljanje redosleda tabulatora (tab order) . . . . . . . . . . . . . . . . . . .220

    Kreiranje primera aplikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221Korak 1: Po~etak rada na novoj aplikaciji. . . . . . . . . . . . . . . . . . . . . . .222Korak 2:Dodavanje trake sa alatima. . . . . . . . . . . . . . . . . . . . . . . . . . .222Korak 4: Dodavanje memo komponente. . . . . . . . . . . . . . . . . . . . . . .223Pokretanje programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224

    Molim Vas pokaite mi menije! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224Kreiranje glavnog menija (main menu) . . . . . . . . . . . . . . . . . . . . . . . .225Pisanje koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233A sada, trenutak na koji ste ~ekali... . . . . . . . . . . . . . . . . . . . . . . . . . .239Slobodni meniji (meniji sadraja) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240Kreiranje i snimanje obrazaca menija . . . . . . . . . . . . . . . . . . . . . . . . .241

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244

    Dan 7: VCL komponente 245Pregled komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245

    Vizuelne komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246

    Nau~ite za 21 dan Delphi 4

    x

  • Nevizuelne komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246Karakteristika Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247Vane uobi~ajene karakteristike . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248

    Karakteristika Align (poravnavanje) . . . . . . . . . . . . . . . . . . . . . . . . .248Karakteristika Color (boja) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248Karakteristika Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250Karakteristika Enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250Karakteristika Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251Karakteristika Hint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253Karakteristike ParentColor, ParentCtl3D, ParentFont i ParentShowHint . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254Karakteristika Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254Ostale uobi~ajene karakteristike . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254

    Primarne metode komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255Uobi~ajeni doga|aji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257Klasa TStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258Standardne Windows komponente za kontrolu . . . . . . . . . . . . . . . . . . . . .260

    Edit kontrole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261Komponente ListBox i ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . .266Tipovi VCL dugmadi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270Komponenta Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278Komponenta ScrollBar (traka za pomeranje teksta) . . . . . . . . . . . .279

    Komponenta Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280I to nije sve... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280Uobi~ajeni okviri za dijalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281

    Metoda Execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281Okviri za dijalog File Open i File Save . . . . . . . . . . . . . . . . . . . . . . . .282Okviri za dijalog File Open Picture i File Save Picture (Otvori datoteku slike i Snimi datoteku slike). . . . . . . . . . . . . . . . . . .285

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .289Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .289

    Pregled sadraja prve nedelje 291

    Druga nedelja na prvi pogled 295Dan 8: Kreiranje aplikacija u Delphiju 297

    Rad sa skladi{tem objekata (Object Repository) . . . . . . . . . . . . . . . . . . . .298Kartice i opcije skladi{ta objekata . . . . . . . . . . . . . . . . . . . . . . . . . . . .298Kreiranje novih objekata u skladi{tu objekata . . . . . . . . . . . . . . . . . .302Dodavanje objekata u skladi{te objekata . . . . . . . . . . . . . . . . . . . . . . .303Dodavanje projekata u skladi{te objekata . . . . . . . . . . . . . . . . . . . . . .305

    Sadraj

    xi

  • Kreiranje formi i aplikacija kori{}enjem ~arobnjaka (Wizards) . . . . . . . . .307Kori{}enje ~arobnjaka za dijaloge . . . . . . . . . . . . . . . . . . . . . . . . . . . .308Kreiranje aplikacija kori{}enjem ~arobnjaka za aplikacije (ApplicationWizard) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309

    Dodavanje metoda i polja podataka u kod . . . . . . . . . . . . . . . . . . . . . . . . .313Kako Delphi upravlja dekleracijama klasa . . . . . . . . . . . . . . . . . . . . . .314Dodavanje metoda u Va{ kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316Dodavanje polja podataka klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318Brisanje koda koje je Delphi generisao . . . . . . . . . . . . . . . . . . . . . . . .318

    Kreiranje obrazaca komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319Kori{}enje resursnih datoteka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

    Resursi u Delphiju . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322Prevo|enje resursnih datoteka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323Povezivanje resursnih datoteka sa izvr{nom datotekom . . . . . . . . . .325Primer programa koji koristi resurse . . . . . . . . . . . . . . . . . . . . . . . . .325

    Kori{}enje paketa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330[ta je paket? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330Stati~ko povezivanje nasuprot dinami~kog povezivanja . . . . . . . . . . .331Kori{}enje paketa koji se koriste u toku rada Va{ih aplikacija . . . . . .334Isporu~ivanje aplikacija koje koriste pakete . . . . . . . . . . . . . . . . . . . .334

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .335Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337

    Dan 9: Projekti, editor koda (Code Editor) i prozor za ispitivanje koda (Code Explorer) 339Svakome treba projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339Kori{}enje menadera projekta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340

    Projektne grupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340Prozor menadera projekta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342Kreiranje i kori{}enje projektnih grupa . . . . . . . . . . . . . . . . . . . . . . .346Pravljenje projekata, ili projektnih grupa . . . . . . . . . . . . . . . . . . . . . .347

    Razumevanje opcija projekta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348Kartica Forms (forme) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348Kartica Application (aplikacija) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .351Kartica Compiler (prevodilac) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352Kartica Linker (program za povezivanje) . . . . . . . . . . . . . . . . . . . . . .353Kartica direktorijumi/uslovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355Kartica za podatke o verziji (Version Info) . . . . . . . . . . . . . . . . . . . . .357Kartica paketa (Packages) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359

    Delphi-jev editor koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359Osnovne operacije editora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360Posebne mogu}nosti editora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365

    Nau~ite za 21 dan Delphi 4

    xii

  • Meni sadraja editora koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374Promena opcija editora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376

    Prozor za ispitivanje koda (Code Explorer) . . . . . . . . . . . . . . . . . . . . . . . .381Meni sadraja prozora za ispitivanje koda . . . . . . . . . . . . . . . . . . . . . .381Navigacija junitom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382Dodavanje koda kori{}enjem prozora za ispitivanje koda . . . . . . . . .382Opcije prozora za ispitivanje koda . . . . . . . . . . . . . . . . . . . . . . . . . . . .384

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .385Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .385

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .385Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .386Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .387

    Dan10: Debagiranje Va{ih aplikacija 389Za{to koristiti debager? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390Opcije menija za debagiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390Kori{}enje ta~aka prekida (breakpoints) . . . . . . . . . . . . . . . . . . . . . . . . . .392

    Postavljanje i uklanjanje ta~aka prekixda . . . . . . . . . . . . . . . . . . . . . .392Prozor sa spiskom ta~aka prekida . . . . . . . . . . . . . . . . . . . . . . . . . . . .393Jednostavne ta~ke prekida (simple breakpoints) . . . . . . . . . . . . . . . .396Uslovne ta~ke prekida (conditional breakpoints) . . . . . . . . . . . . . . . .396Komanda za rad do kursora (Run to Cursor) . . . . . . . . . . . . . . . . . . .397

    Pra}enje promenljivih . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .398Obla~i} za savet za izra~unavanje izraza . . . . . . . . . . . . . . . . . . . . . . .398Meni sadraja liste za pregled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400Kori{}enje okvira za dijalog Watch Properties (karakterisatike pregleda) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400Aktiviranje i deaktiviranje elemenata za pregled . . . . . . . . . . . . . . . .402Dodavanje promenljivih na listu za pregled . . . . . . . . . . . . . . . . . . . .402Kori{}enje spiska za pregled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .402

    Debager inspektor (Debug Inspector) . . . . . . . . . . . . . . . . . . . . . . . . . . . .405Kartice debager inspektora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .406Meni sadraja debager inspektora . . . . . . . . . . . . . . . . . . . . . . . . . . . .406

    Ostali alati za debagiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407Okvir za dijalog za prikazivanje/izmenu (Evaluate/Modify) . . . . . . . .407Prozor steka poziva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409Prozor procesora (CPU window) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410Komanda za prelazak na adresu (Go to Address) . . . . . . . . . . . . . . . .410

    Prolazak kroz kod korak po korak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411Simboli ljeba za debagiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411Presko~i (Step Over) i prati kroz (Trace Into) . . . . . . . . . . . . . . . . . .412

    Debagiranje DLL datoteka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414Prozor za evidenciju doga|aja (Event Log window) . . . . . . . . . . . . . . . . .415Prozor modula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416Tehnike debagiranja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .417

    Sadraj

    xiii

  • Funkcija OutputDebugString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .417Pra}enje gre{aka pristupa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418Kratki saveti za debagiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420

    Opcije debagera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421Kartica General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421Kartica Event Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .422Kartica Lenguage Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423Kartica OS Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427

    Dan 11: Delphi-jevi alati i opcije 429Kori{}enje editora slika (Image Editor) . . . . . . . . . . . . . . . . . . . . . . . . . . .429

    Boje prednjeg plana (foreground) i pozadina (background) . . . . . . . .430Transparentne i inverzne boje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431Alati za crtanje editora slika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .432Zumiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433Paleta Line Width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434Rad sa bitmapiranim datotekama . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434Rad sa ikonama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436Rad sa kursorima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438Meniji sadraja editora slika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .439Kreiranje resursnih projekata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .439

    WinSight: {pijuniranje Windows-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .441Windows sistem za poruke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .442Stablo prozora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443Prozor za pra}enje poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .444[pijuniranje prozora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445Opcije za pra}enje poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .445Druge mogu}nosti programa WinSight . . . . . . . . . . . . . . . . . . . . . . . .447Traenje prozora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448

    TDUMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448Package Collection Editor (editor zbirke paketa) . . . . . . . . . . . . . . . . . . .450Konfigurisanje Delphi-jevog menija alata . . . . . . . . . . . . . . . . . . . . . . . . . .450

    Kori{}enje okvira za dijalog za konfigurisanje alata . . . . . . . . . . . . . .450Dodavanje alata u meni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451Alati za editovanje u okviru menija . . . . . . . . . . . . . . . . . . . . . . . . . . .452Pode{avanje opcija okruenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .452Kartica Preferences (prioriteti) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453Kartica Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .454Kartica Palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .455

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456

    Nau~ite za 21 dan Delphi 4

    xiv

  • Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458

    Dan 12: Programiranje grafike i multimedije 459Grafika na jednostavniji na~in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .459Kontekst ure|aji i klasa TCanvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460GDI objekti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463

    Pera, ~etke i fontovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463Bitmape i palete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468Regioni za isecanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468

    Osnovne operacije crtanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470Crtanje teksta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .471Crtanje bitmapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477

    Vanekranske bitmape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479Kreiranje memorijske bitmape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479Snimanje memorijske bitmape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .480Primer programa za memorijsku bitmapu . . . . . . . . . . . . . . . . . . . . .482

    Programiranje multimedije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .484Wave audio u saradnji sa Windows API-jem . . . . . . . . . . . . . . . . . . . .485Komponenta TMediaPlayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .486Karakteristike, metode i doga|aji komponente MediaPlayer . . . . .487Wave audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .489Pode{avanje izlazne ja~ine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490Snimanje wave audio datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491MIDI audio datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .493

    CD audio datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .494AVI video datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .495

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .497

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .497Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .498Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .498

    Dan 13: Iza osnova Delphi-ja 499Kreiranje ukrasa za prozore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .499

    Trake sa alatima (toolbars) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .499Komponenta CoolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501Komponenta ToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .504Usidrene trake sa alatima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511Statusne trake (status bars) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512

    Dodavanje funkcionalnosti sa aktiviranjem komandi . . . . . . . . . . . . . . . . .518Aktiviranje komandi kori{}enjem komponenti TActionList i TAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519Implementacija aktiviranja komandi . . . . . . . . . . . . . . . . . . . . . . . . . .519

    Sadraj

    xv

  • [tampanje u Delphi aplikacijama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525Uobi~ajeni okviri za dijalog Print ({tampanje) . . . . . . . . . . . . . . . . . .526[tampanje na jednostavan na~in . . . . . . . . . . . . . . . . . . . . . . . . . . . . .529[tampanje kori{}enjem komponente QuickReport . . . . . . . . . . . . .530[tampanje na tei na~in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .531[tampanje bitmape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .537

    Kori{}enje kursora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .537Osnovni pojmovi o kursorima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .537U~itavanje i kori{}enje stek kursora . . . . . . . . . . . . . . . . . . . . . . . . . .539U~itavanje i kori{}enje korisni~ki definisanih kursora . . . . . . . . . . . .540

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543

    Dan 14: Napredno programiranje 545Pravljenje kontekstno osetljive pomo}i . . . . . . . . . . . . . . . . . . . . . . . . . . .545

    Pravljenje fajla sa tekstom pomo}i . . . . . . . . . . . . . . . . . . . . . . . . . . .546Identifikatori konteksta i HelpContext osobina . . . . . . . . . . . . . . . . .547Obezbe|ivanje kontekstno osetljive pomo}i . . . . . . . . . . . . . . . . . . . .548Kori{}enje fajlova zaglavlja sa sistemom za pomo} . . . . . . . . . . . . . .550Zaokruivanje sistema za rad sa konteksno osetljivom pomo}i . . . .552

    Kontrola gre{aka kori{}enjem obrade izuzetaka . . . . . . . . . . . . . . . . . . . .553Klju~ne re~i za obradu izuzetaka: try, except, finally i raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .554Generisanje izuzetaka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .555Kori{}enje klju~ne re~i finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . .559Prihvatanje neobra|enih izuzetaka na nivou programa . . . . . . . . . . .559Otkrivanje gre{aka u programima u kojima se koristi obrada izuzetaka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560

    Kori{}enje Registry-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .561Registry klju~evi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .562Tipovi podataka u Registry-ju . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563Klasa TRegistry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563Kori{}enje klase TRegistry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .566

    Posebna obrada poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .573Detaljnije upoznavanje sa Windows-ovim porukama . . . . . . . . . . . . .574Dva na~ina za slanje poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .576Obrada doga|aja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .577Obrada ostalih Windows-ovih poruka . . . . . . . . . . . . . . . . . . . . . . . . .578Korisni~ki-definisane poruke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .582

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .583Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .583

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .584

    Nau~ite za 21 dan Delphi 4

    xvi

  • Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .585Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .585

    Pregled sadraja druge nedelje 587

    Tre}a nedelja na prvi pogled 591Dan 15: COM i ActiveX 593

    Razumevanje COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .594Terminologija COM-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .595Brojanje referenci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .597IUnknown interfejs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .597Kreiranje COM objekta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .598

    Obja{njenje ActiveX-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .612Kori{}enje tu|ih ActiveX kontrola . . . . . . . . . . . . . . . . . . . . . . . . . . .612Kreiranje novih ActiveX kontrola . . . . . . . . . . . . . . . . . . . . . . . . . . . .614Izmena podrazumevane ikone u paleti komponenti . . . . . . . . . . . . . .621

    Kori{}enje ActiveX kontrola i aktivnih formi na Web-u . . . . . . . . . . . . . .622Web Deployment opcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .622Postavljanje kontrole na Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .625

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .625Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .626

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .626Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .628

    Dan 16: Arhitektura baza podataka u Delphi-ju 629Osnove baza podataka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .629

    Lokalne baze podataka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .631Klijent/server baze podataka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .631Single-tier, Two-tier i Multitier arhitektura baza podataka . . . . . . . .632

    Borland Database Engine (BDE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .633BDE drajveri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .633BDE alias-i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .634Baze podataka koje su ugra|ene u Delphi . . . . . . . . . . . . . . . . . . . . .634SQL Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .635

    Delphi-jeve komponente za rad sa bazama podataka . . . . . . . . . . . . . . . .635TDataSet Klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .637Table komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .642Query komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .649StoredProc komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .652UpdateSQL komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .654DataSource komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .654Session komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655Database komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655BatchMove komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .657

    Sadraj

    xvii

  • Field komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658Komponente za klijent/server baze podataka . . . . . . . . . . . . . . . . . . . . . .662Kreiranje BDE alias-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .662

    Kreiranje alias-a uz pomo} BDE Administrator-a . . . . . . . . . . . . . . .662Kreiranje alias-a kroz kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .664

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .664Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .664

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .664Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .665Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .666

    Dan 17: Pravljenje formi za rad sa bazama podataka 667Database Form Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .667

    Pravljenje jednostavne forme kori{}enjem Database Form Wizard-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .668Nova forma na delbnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .672Pravljenje master/detail forme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .673

    Ru~no pravlje formi za rad sa bazama podataka . . . . . . . . . . . . . . . . . . . .675Pogled iz blizine na komponente za rad sa podacima . . . . . . . . . . . . . . . .677

    Zajedni~ke osobine komponenti za rad sa podacima . . . . . . . . . . . . .678DBGrid komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .678DBNavigator komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .679DBText komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .680DBEdit komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .680DBMemo komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .680DBImage komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .680DBListBox i DBComboBox komponente . . . . . . . . . . . . . . . . . . . . . . .681DBCheckBox komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .681DBRadioGroup komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682DBLookupListBox i DBLookupComboBox komponente . . . . . . . . . . .682DBRichEdit komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682DBCtrlGrid komponenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682Ostale komponente za rad sa podacima . . . . . . . . . . . . . . . . . . . . . . .684

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .684Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .684

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .684Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .685Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .686

    Dan 18: Pravljenje programa za rad sa bazama podataka 687Programiranje baza podataka bez vizuelnih komponenti . . . . . . . . . . . . .687

    ^itanje iz baze podataka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .688Pravljenje baze podataka kroz kod . . . . . . . . . . . . . . . . . . . . . . . . . . .691

    Kori{}enje modula za rad sa podacima . . . . . . . . . . . . . . . . . . . . . . . . . . . .698Postavljanje jednostavnog modula za rad sa podacima . . . . . . . . . . . .699

    Nau~ite za 21 dan Delphi 4

    xviii

  • Dodavanje modula za rad sa podacima na formu . . . . . . . . . . . . . . . .700Pokretanje modula za rad sa podacima . . . . . . . . . . . . . . . . . . . . . . . .701

    Generisanje izve{taja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .702Pregled QuickReport komponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . .702Ru~no generisanje izve{taja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .705Jednostavnije kreiranje izve{taja . . . . . . . . . . . . . . . . . . . . . . . . . . . . .707

    Isporu~ivanje programa za rad sa bazamapodataka napravljenog u Delphi-ju . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .708Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .708Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .709

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .709Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .710Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .710

    Dan 19: Pravljenje i kori{}enje DLL-ova 711Upoznavanje sa DLL-ovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .711

    [ta je DLL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .712Za{to biste trebali da koristite DLL-ove? . . . . . . . . . . . . . . . . . . . . . .713

    Sastav celine DLL-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .716Osnove pisanja DLL-ova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .717

    Funkcije i procedure u DLL-ovima . . . . . . . . . . . . . . . . . . . . . . . . . . .717Klju~na re~ exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .718Kori{}enje DLLProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .719

    U~itavanje DLL-ova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .721Stati~ko u~itavanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .721Dinami~ko u~itavanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .722

    Pozivanje funkcija i procedura koje se nalaze u DLL-u . . . . . . . . . . . . . . .722Pozivanje kori{}enjem stati~kog u~itavanja . . . . . . . . . . . . . . . . . . . .722Pozivanje funkcija i procedura kori{}enjem dinami~kog u~itavanja . . . . . . . . . . . . . . . . . . . . . . . . . . .724

    Pravljenje DLL projekta sa Object Repository-jem . . . . . . . . . . . . . . . . .725Kori{}enje formi u DLL-ovima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .730

    Pravljenje DLL-a koji sadri formu . . . . . . . . . . . . . . . . . . . . . . . . . . .730Pozivanje MDI forme iz DLL-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .733

    Kori{}enje resursa iz DLL-ova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .735Pravljenje DLL-a sa resursima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .736Kori{}enje DLL-a sa resursima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .736

    Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .737Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .737

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .737Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .738Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .739

    Dan 20: Pravljenje komponenti 741Pravljenje nove komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .741

    New Component dijalog-prozor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .742

    Sadraj

    xix

  • Pravljenje FlashingLabel komponente . . . . . . . . . . . . . . . . . . . . . .744Register procedura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .745

    Osobine i metode komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .746Osobine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .746Pisanje metoda za komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .752

    Dodavanje funkcionalnosti TFlashingLabelkomponenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .752

    Deklaracija klase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .756Published deo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .756Implementation deo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .757SetFlashRate procedura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .757ComponentState osobina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .758

    Testiranje komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .759Postavljanje komponente na paletu sa komponentama . . . . . . . . . . . . . . .762

    Postavljanje proizvoljne bitne mape na taster komponente . . . . . . . .763Pravljenje doga|aja za komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .764

    Pregled doga|aja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .765Prepisivanje doga|aja bazne klase . . . . . . . . . . . . . . . . . . . . . . . . . . . .770

    Sastavljanje celine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .771Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .777Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .777

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .777Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .778Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .779

    Dan 21: Delphi i C++Builder 781Sli~nosti izme|u Delphi-ja i C++Builder-a . . . . . . . . . . . . . . . . . . . . . . . .781

    Razvojna okruenja (IDE-ovi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .781VCL (Visual Component Library) . . . . . . . . . . . . . . . . . . . . . . . . . . . .783Fajlovi sa formama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .784Paketi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .784

    Razlike izme|u Delphi-ja i C++Builder-a . . . . . . . . . . . . . . . . . . . . . . . . .784Programski jezik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .785Ekstenzije fajlova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .785Razvojno okruenje (IDE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .785Editor koda (Code Editor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .786Code Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .786Unapre|enja VCL-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .786C++Builder moe da prevodi Pascal celine . . . . . . . . . . . . . . . . . . . .787Podr{ka za ActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .787Delphi prevodi bre i proizvodi manje EXE fajlove . . . . . . . . . . . . . .787

    Konvertovanje iz Delphi-ja u C++Builder . . . . . . . . . . . . . . . . . . . . . . . .788Kopiranje Delphi-jevih formi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .788Konverzija koda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .790

    Nau~ite za 21 dan Delphi 4

    xx

  • Ponovno kori{}enje formi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .794Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .794Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .794

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .795Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .795Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .796

    Pregled sadraja tre}e nedelje 797Dodatni dan: Pravljenje Internet programa 799

    Delphi-jeve Internet komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .799Pravljenje WebBrowser-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .801

    Kome treba jo{ jedan Web Browser? . . . . . . . . . . . . . . . . . . . . . . . . .801Prvi koraci u pravljenju Va{eg Web Browser-a . . . . . . . . . . . . . . . . . .802Dodavanje pokaziva~a procesa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .804Zavr{ne operacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .805

    Kori{}enje Internet Explorer-a u obliku ActiveX kontrole . . . . . . . . . . . .810Slanje elektronske po{te . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .812Isporu~ivanje Internet programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .814Zaklju~ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .815Radionica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .815

    Pitanja i odgovori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .815Kviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .816Vebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .816

    DodaciA: Odgovori na test pitanja 817B: Sadraji na Internet-u vezani za Delphi 839

    Kompanija INPRISE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .839Komercijalni Web sajtovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .839Korisni~ki Web sajtovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .840News grupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .841Publikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .841Indeks 843

    Sadraj

    xxi

  • xxii

  • Po~etak rada sa Delphijem^estitamo - odabrali ste jedan od trenutno najaktuelnijih alata za programiranje! Prenego {to po~nete da koristite sve {to Delphi moe da ponudi morate nau~iti ne{to oDelphi IDE i o Object Pascal-u. U ovom poglavlju }ete na}i:

    44Brz pregled Delphija.

    44Uvod u jezik Object Pascal.

    44^injenice o Pascal junitima (units), promenljivima i tipovima podataka.

    44Diskusiju o nizovima.

    44 Informacije o stringovima u Pascal-u.

    [ta je Delphi?Do sada ste verovatno znali da je Borlandov Delphi najbolje prodavani proizvod zabrzo razvijanje aplikacija (RAD - Rapid Application Development) koji se koriti zapisanje Windows aplikacija. Sa Deflijem moete pisati Windows programe bre i jednostavnije nego {to je to bilo mogu}e ranije. Moete kreirati Win32 konzolneaplikacije, odnosno Win32 programe za grafi~ki korisni~ki interfejs (GUI - GraphicalUser Interface). Kada kreirate Win32 GUI aplikacije koriste}i Delphi, dostupna Vamje sva snaga istinskog prevodioca (Object Pascal programski jezik) uba~enog u RADokruenje. Ovo zna~i da moete da kreirate korisni~ki interfejs za program (korisni~ki interfejs zna~i menije, dijalog bokseve, glavni prozor, itd.) kori{}enjemtehnike prevuci-i-pusti (drag-and-drop) koja se koriste kod pravih okruenja za brzi

    Dan 1

  • razvoj aplikacija. Tako|e, moete da koristite ActiveX kontrole u Va{im formamakako biste kreirali specijalizovane programe poput Web browsera za par minuta.Delphi Vam daje sve to bez dodatnih tro{kova: Ne morate rtvovati brzinuizvr{avanja programa, po{to Delphi generi{e brz prevedeni kod.

    Mogu Vas ~uti kako govorite, Ovo }e biti kul! I poga|ate, u pravu ste! Ali pre nego{to se suvi{e uzbudite, moram Vam napomenuti da jo{ uvek treba da radite i u~ite oPascal programiranju. Ne elim da Vam se u~ini da moete da kupite program poputDelphija i postanete majstor za Windows programiranje preko no}i. Potrebno jepuno raditi da biste postali dobar Windows programer. Delphi obavlja veliki deoposla rade}i u pozadini sa detaljima niskog novoa koji ~ine osnovu Windows progra-ma, ali Delphi ne moe pisati programe umesto Vas. Na kraju Vi jo{ uvek morate bitiprogramer i to zna~i da morate nau~iti da programirate. Ovo moe biti dugo penjanje uz brdo jednog dana. Dobre vesti su da Delphi moe da u~ini Va{ putuglavnom bezbolnim i ~ak zabavnim. Da, moete raditi i zabavljati se uz rad!

    Zato zasucite rukave i obujte cipele za {etnju. Delphi je odli~an proizvod, zato sezabavljajte.

    Kratak pogled na Delphi okruenje (Delphi IDE)Ovo poglavlje sadri kratak pregled Delphi integrisanog okruenja za razvoj (IntegratedDevelopment Environment - IDE). Sada }u Vam ukratko predstaviti okruenje, adetaljnije }u ga objasni}u u lekciji dana 4, Istraivanje Delphi okruenja. Po{to ste seprihvatili Windows programiranja, pretpostavljam da ste dovoljno napredovali dashvatite kako da startujete Delphi. Kada ste prvi put startovali program, pred Vama sena{la prazna forma i okruenje, kao {to je prikazano na slici 1.1.

    Slika 1.1 Delphi okruenjei inicijalna praznaforma

    Nau~ite za 21 dan Delphi 4

    6

    1

  • Delphi okruenje je podeljeno na tri dela. Gornji prozor se moe uzeti kao glavniprozor. On sadri trake za alate (tool bars) i paletu komponenti (component palette).Delphi traka za alate Vam omogu}ava da jednim klikom mi{a pokrenete poslove kao{to je otvaranje, snimanje i prevo|enje projekta. Paleta komponenti sadri {irokspektar komponenti koje moete ubaciti u Va{e forme (komponente su tekst natpisi,kontrole za editovanje, list boksevi, dugmad i sli~no). Radi udobnosti komponente supodeljene u grupe. Da li ste zapazili jezi~ke du gornjeg dela palete komponenti?Kliknite na ove jezi~ke i istraite koje su Vam komponente dostupne. Da bistepostavili komponentu na Va{u formu jednostavno kliknite na dugme komponente uokviru palete komponenti a zatim kliknite na mesto u okviru forme gde biste elelida se pojavi Va{a komponenta. Nemojte brinuti o tome {to jo{ uvek ne znate kakose koriste komponente. Ovo }ete nau~iti za kratko vreme. Kada ste zavr{ili saistraivanjem, kliknite na jezi~ak sa natpisom Standard, po{to }e Vam ubrzo bitipotreban.

    Komponenta (component) je odvojena softverska komponenta kojaizvr{ava odre|enu unapred definisanu funkciju, kao {to je tekst natpis, edit kontrola, odnosno okvir za liste (list box).

    Inspektor objekata (object Inspector)Ispod glavnog prozora na levoj strani ekrana se nalazi Object Inspector. Koriste}iObject Inspector moete menjati karakteristike komponenti i doga|aja. U toku radasa Delphijem uvek }ete koristiti Object Inspector. Object Inspector ima dva jezi~ka:jezi~ak Properties (karakteristike) i jezi~ak Events (doga|aji). Karakteristike komponenata upravljaju radom komponenti. Na primer, promenom karakteristikeColor odre|ene komponente menja se boja pozadine ove komponente. Lista kara-kteristika koje su dostupne razlikuje se od komponente do komponente, iako kom-ponente uglavnom imaju nekoliko zajedni~kih elemenata (karakteristike Width iHeight - {irina i visina, na primer).

    Karakteristika (property) odre|uje operaciju komponente.

    Jezi~ak Events sadri listu doga|aja za odre|enu komponentu. Doga|aji se pojavlju-ju kada korisnik interaguje sa komponentom. Na primer, kada se klikne na kompo-nentu, generi{e se doga|aj koji govori o tome da je na komponentu kliknuto. Moetepisati kod koji odgovara na ove doga|aje, izvr{avaju}i posebna dejstva kada sedoga|aj pojavi. Kao {to je to slu~aj sa karakteristikama i doga|aji na koje kompo-nenta moe reagovati se razlikuju od komponente do komponente.

    Doga|aj (event) je ne{to {to se pojavljuje kao rezultat interakcije komponente sa korisnikom, ili sa Windows operativnim sistemom.

    Upravlja~ doga|ajima (event handler) je deo koda koji se poziva u okviruVa{e aplikacije kao odgovor na doga|aj.

    Po~etak rada sa Delphijem

    7

    1

  • Delphi radni prostor (workspace)Glavni deo Delphi okruenja je radni prostor. Radni prostor inicijalno prikazuje diza-jner forme (Form Designer). Ne treba da Vas iznenadi ~injenica da Vam dizajnerformi (Form Designer) omogu}ava da kreirate forme. U Delphiju forma predstavljaprozor u okviru Va{eg programa. Forma moe biti glavni prozor programa, dijalogboks, odnosno bilo koji drugi tip prozora. Moete koristiti Form Designer dapostavite, pomerite, odnosno promenite veli~inu komponente u toku procesa njenogkreiranja.

    Iza Form Designer-a se krije editor koda (Code Editor). U editor koda (Code Editor)upisujete kod kada pi{ete Va{e programe. U toku kreiranja aplikacije Object Inspector,Form Designer, Code Editor i Component Palette se koriste za interaktivni rad.

    Sada kada ste videli od ~ega se sastoji Delphi okruenje, krenimo da uradi-mo ne{to.

    Va{ prvi program: Hello WorldOvo je tradicionalno. Gotovo sve knjige o programiranju za po~etak Vam nude danapravite program koji prikazuje na ekranu natpis Hello World. Bio sam uisku{enju da uradim ne{to drugo, ali tradicija nije snaga na koju ne treba ra~unati,zato evo programa Hello World. Potrebno je da uradite neke poslove unapred okojima }ete u~iti u narednim poglavljima, zato }u Vam pruiti ose}aj Delphijevihdobrih strana pre nego {to po~nete da u~ite, o~ito manje glamurozne, osnove Pascaljezika. Zato se prvo zabavite. Delphi (i njegov ro|ak C++Builder) Vam dajeverovatno najbri na~in da stignete do Hello World u odnosu na bilo koje Windowsprogramsko okruenje dana{njice.

    Kreiranje programaVerovatno Vam je do sada Delphi pokrenut i verovatno ve} gledate u praznu formu.Ova forma je generi~ki nazvana Form1. (Naziv forme je vaan u Delphiju, ali }u Vamne{to vi{e re~i o tome malo kasnije.) Na levoj strani forme, Object Inspectorpokazuje karakteristike forme. Kliknite na naslovnu traku Object Inspector-a.Karakteristika Caption je istaknuta i kursor stoji na njoj, ~ekaju}i da ne{to uradite(ako karakteristika Caption nije vidljiva, moda }ete morati da pomerite prozorObject Inspector-a da biste je prona{li. Karatkeristike su pore|ane abecednimredom.) Kucajte Hello World!, da biste promenili naslov forme.

    Kako modifikujete karakteristike, Delphi istovremeno prikazuje ove rezultate, ukoliko jemogu}e da se promena karakteristike prikae. Kada menjate naslov, zapazite da se naslov prozora forme menja kao odraz teksta koji ste ukucali.

    Nau~ite za 21 dan Delphi 4

    8

    1

  • Sada kliknite na dugme Run u okviru trake sa alatima (dugme sa zelenom strelicom).(Moete isto tako pritisnuti taster F9, odnosno izabrati opciju Run/Run iz glavnogmenija.) Pre nego {to budete shvatili {ta se de{ava, Delphi je napravio program.Forma je prikazana, a naslov ispisuje Hello World!. U ovom slu~aju pokrenuti program izgleda potpuno isto kao prazna forma. Moda }ete sa uasom primetiti dase program prikazuje na istoj lokaciji gde je prikazana forma u okviru FormDesigner-a. (Postoji razlika u pojavi po{to Form Designer prikazuje mreu za pora-vnavanje, dok je pokrenuti program ne prikazuje.) ^estitamo- upravo ste napisaliVa{ prvi Windows program na Delphiju. Hej, ovo je bilo lako!

    Ali {ta je to? pita}ete. Ovo ba{ i nije ne{to. Slaem se, ali ovo je pravi Windowsprogram. Probajte ga i uveri}ete se. Glavni prozor programa moe biti pomerenhvatanjem za naslovnu traku, moe mu biti promenjenja veli~ina, moe biti umanjen,moe biti maksimiziran i moe se zatvoriti klikom na taster Close. Moete ~akprona}i ovaj program u okviru Windows Explorer-a (verovatno }e biti u Va{emdirektorijumu \Delphi40\Bin pod nazivom Project1.exe) i pokrenuti gadvostrukim klikom.

    Izmena programaU redu, moda je prikazivanje natpisa Hello World u okviru naslova bila malavarka. Hajde da ga malo pro{irimo. Ukoliko je Va{ program Hello World jo{ uvekaktivan, zatvorite ga klikom na dugme Close u gornjem desnom uglu prozora. FormDesigner je prikazan ponovo i omogu}eno Vam je da izmenite formu (a kao rezultattoga izmenite i program).

    Da biste pobolj{ali program dodajte tekst u sredi{te prozora. Ovo moete u~initidodavanjem tekst naslova formi:

    1. Prvo kliknite na jezi~ak Standard u okviru palete komponenti. Tre}e dugmekomponenti na paleti sadri slovo A. Ako postavite kursor mi{a na ovo dugme,obla~i} za savet (tooltip-mali prozor) }e prikazati natpis Label.

    2. Kliknite na dume za natipis a zatim kliknite na bilo koje mesto u okviru forme.Komponenta natpis }e biti postavljena na formu sa generi~kim naslovomLabel1.

    3. Sada prebacite panju na Object Inspector. On sada prikazuje karakteristikekomponente Label1 (zapamtite da je prethodno prikazivao karakteristike komponente Form1). Ponovo je karakteristika Caption istaknuta.

    4. Kliknite na naslovnu traku Object Inspector-a, odnosno na karakteristikuCaption i ukucajte Hello World!. Sada natpis na formi prikazuje HelloWorld!.

    Po~etak rada sa Delphijem

    9

    1

  • 5. Koliko god elite moete menjati veli~inu teksta natipisa. Dva puta kliknite nakarakteristiku Font. Karakteristika }e se pro{iriti kako bi prikazali dodatniatributi fonta.

    6. Prona|ite karakteristiku Size unutar karakteristike Font i promenite veli~inufonta na 24 (trenutno je pode{eno na 8). Ubrzo nakon {to ste pritisnuli tasterEnter, odnosno kliknuli na formu, natpis }e promeniti veli~inu.

    Po{to natpis najverovatnije ne}e biti centriran, moda }ete poeleti da ga pomerite.Da biste pomerili komponentu, jednostavno kliknite na nju i odvucite je na mesto nakom elite da se nalazi. Kada se natpis bude nalazio na mestu na kom elite da bude,spremni ste da ga ponovo prevedete i pokrenete program. Ponovo kliknite na dugmeRun i u slede}em trenutku program }e biti pokrenut. Sada vidite natpis HelloWorld! koji je prikazan u sredini forme na isti na~in na koji je upisan u karakteri-stiku Caption. Slika 1.2 prikazuje rad programa Hello World!.

    Zatvaranje programaSa ovim kratkim osvrtom na Delphi moete videti da je pisanje Windows programakori{}enjem Delphija puno interesantnije nego {to je to bilo u starim dobrim vremenima. Da biste se pripremili za ono {to }ete raditi slede}e, treba da zatvoriteteku}i projekt u okviru Delphi okruenja. Odaberite opciju FileClose All izglavnog menija. Kliknite na dugme No kada budete upitani da snimite promene u okviru projekta Project1, odnosno snimite projekt, ako Vam je stalo do Va{e nove kreacije.

    Va{ drugi program Hello World, deo IIPre nego {to pre|emo na u~enje jezika Pascal potrebno Vam je jo{ malo informacija otome kako Delphi radi. Ove informacije su Vam potrebne da biste testirali razli~itemogu}nosti Pascal jezika koje }ete obraditi u narednih nekoliko dana. Ovo poglavlje }esadrati samo kratak pogled na snagu Delphija. U lekcijama dana 4, 5 i 6 u~i}etedetaljnije o tome kako Delphi radi.

    Slika 1.2. Va{ programHelloWorld! u radu

    Nau~ite za 21 dan Delphi 4

    10

    1

  • Pisanje programa Hello World IICilj ove vebe je da se tekst Hello World, Part II pojavi na ekranu nakon pri-tiska na dugme. Ova veba }e Vam dati obrazac koji treba da pratite kada budetetestirali razli~ite delove koda, koje }ete obra|ivati u narednih nekoliko dana. Izvr{iteslede}e radnje:

    1. Odaberite opciju FileNew Application iz glavnog menija da biste pokrenulinovu aplikaciju (kliknite na No ukoliko budete upitani da snimite teku}i projekt).

    2. Kliknite na jezi~ak Standard u okviru palete komponenti a zatim kliknite naikonu koja ima taster sa natpisom OK (komponenta Button).

    3. Pomerite kursor bilo gde u okviru forme, a zatim kliknite. Na formi }e bitiprikazano dugme.

    4. Odaberite komponentu Label i postavite je blizu centra forme.

    U ovom trenutku Va{a forma bi trebalo da bude sli~na formi na slici 1.3. Primetiteda komponenta Label ima generi~ki naslov Label1, a dugme generi~ki naslovButton1.

    Izmena programa Hello World IIU prvoj verziji programa Hello World, koristili ste Object Inspector da biste prome-nili karakteristiku Caption komponente Label. Ova promena je bila usvojena u tokudizajniranja i mogla se isto tako videti u toku rada programa. U ovom primeru,mo}i}ete da promenite naslov komponente Label koriste}i programski kod.

    Kada menjate karakteristike komponenti koriste}i Object Inspector i Form Designer, re}i}ete da~inite promene u toku dizajniranja. Kada menjate karakteristike preko programskog koda (oveizmene se izvr{avaju u toku rada programa), re}i}ete da radite izmene u toku rada programa(runtime).

    Slika 1.3 Nova forma,nakon {to supostavljene komponenteButton i Label

    Po~etak rada sa Delphijem

    11

    1

  • Da biste promenili karakteristiku Caption u toku rada programa, izvr{ite slede}ekorake:

    1. Dva puta kliknite na dugme u okviru Va{e forme. Ubrzo nakon {to ste ovouradili, Delphi generi{e upravlja~ doga|ajima za doga|aj OnClick koji seodnosi na dugme. Generisani kod izgelda otprilike ovako:

    procedure TForm1.Button1Click(Sender: TObject);begin

    end;

    2. U ovom trenutku ne treba da budete zabrinuti svim onim {to ovde vidite. Jedino{to treba da razumete je da je upravlja~ doga|ajima OnClick deo koda koji }ebiti izvr{en svaki put kada se klikne na dugme (sve dok program radi, ovo }ebiti aktuelno). Kursor za editovanje se nalazi izme|u iskaza begin i end, i ~ekada ukucate kod. Ubacite ovaj kod na mesto kursora:

    Label1.Caption := Hello World, Part II;

    Programske linije uvek uvla~im za dva prazna mesta ( {to mnogi programerismatraju da je odgovaraju}e za kodiranje) pa bi kompletan upravlja~ doga|ajimaizgledao ovako:

    procedure TForm1.Button1Click(Sender: TObject);begin

    Label1.Caption := Hello World, Part II;end

    Ovaj kod je veoma jednostavan. On jednostavno dodeljuje vrednost HelloWorld, Part II karakteristici Caption, koja pripada natpisu (karakteristikaCaption se koristi da dodeli tekst koji ovaj natpis prikazuje).

    3. Sada kliknite na dugme Run u okviru trake za alat, da biste pokrenuli program.Kada pokrenete program, zapazite da je natpis zadrao stari naslov Label1.Kliknite na dugme forme i naslov natpisa }e biti promenjen u Hello World,Part II. Hej, kako se ovo dogodilo! Magija? Ne, samo su Delphi na delu!

    U narednih nekoliko dana, radi}ete mnogo sli~nih vebi, tako da }ete imati dostaiskustva u postavljanju natpisa, dugmadi i ostalih komponenti na formu. Shvatam danisam u potpunosti objasnio {ta se ovde doga|a u pozadini, ali ne elim da govorimo tome sada, po{to sam sa~uvao obja{njenje za kasnije.

    Pregled jezika Object PascalPre nego {to nau~ite ne{to o Delphijevim RAD mogu}nostima, potrebno je danau~ite osnove jezika Object Pascal. Ovaj deo knjige moda ne}e biti najuzbudljivijiza Vas, ali Vam je potrebno osnovno razumevanje Object Pascal-a pre nego {tokrenete dalje.

    Nau~ite za 21 dan Delphi 4

    12

    1

  • Bilo bi dobro ukoliko bi predstavljanje jezika Object Pascal moglo da se odvijasekvencijalno. Ovo nije mogu}e po{to su sve mogu}nosti koje }ete u~iti me|usobnoispreplitane. Prikaza}u Vam pojedine delove slagalice, a zatim ih uklapati.

    Na kraju lekcije dana 3, uglavnom }ete kompletirati sliku jezika Object Pascal.Nemojte se zabrinuti ukoliko trenutno ne moete da zapamtite svaki koncept koji jepredstavljen. Neki od njih zahtevaju potpuno razumevanje jezika Object Pascal imogu se shvatiti tek nakon iskustva sa realnim aplikacijama.

    U toku narednih nekoliko dana vide}ete kratke ise~ke kodova koji ilustruju pojedinemogu}nosti jezika Object Pascal. Tako|e }ete raditi vebe koje }e Vam omogu}iti datestirate Va{e novoste~eno znanje. U prvih nekoliko dana vide}ete Va{e Delphiaplikacije kao male ise~ke. Ne bih eleo da istr~avam i ulazim suvi{e duboko uDelphi okruenje, odnosno biblioteku vizuelnih komponenti (VCL) u ovoj ranoj fazi.Mora}ete da se zadovoljite par~i}ima i delovima, da biste kasnije u knjizi po~eli dasagledavate kompletnu sliku. Kod moete skinuti sa Web sajta knjige i on sadrikompletne programe za neke od vebi koje }ete raditi u toku narednih nekoliko dana.(Prebacite se na: http://www.mcp.com/info i kucajte 0-672-31286-7.)

    Na po~etku...Vratimo se u 1994. godinu. Borland po~inje rad na RAD alatu pod {ifrovanimnazivom Delphi. Kada je odlu~eno da arhitektura modela komponenti predstavljanajbolji na~in za inplementaciju RAD, bilo je neophodno opredeliti se za programskijezik koji }e biti srce sistema.

    U to vreme Borland je bio jedina firma na tri{tu prevodilaca koja je prodavao Pascalprevodioce. Borland je isto tako bio poznat kao kompanija koja proizvodi najboljealate za Pascal. Ako ste bili Pascal programer, verovatno ste koristili BorlandovTurboPascal u jednom, ili drugom obliku. Borland je vi{e ili manje posedovaoPascal. Naravno, legalno gledano Borland nije posedovao Pascal, ali nije bilo sumnjida njegova pozicija u svetu Pascala dozvoljava odre|ene slobode u implementacijinovih mogu}nosti i usavr{avanja. Dodatno, nije postojao komitet za Pascal standarde, niti je bilo koji pisani standard definisao Pascal jezik. Zato je Borlandnapravio Delphi koriste}i Pascal kao osnovni jezik (Borlandov interni {ifrovani nazivje ujedno postao slubeni naziv proizvoda).

    Pre nego {to je Delphi po~eo da postoji, Borland je ve} izmenio Pascal u pozitivnompravcu. Na primer, Borland je ve} pro{irio Pascal kreiranjem novog jezika podnazivom Object Pascal. Moglo bi se re}i da je Object Pascal u odnosu na Pascal isto{to i C++ u odnosu na C. Object Pascal je dodao klase Pascalu , i tako svrstao Pascalu svet objektno orijentisanih jezika (Object-Oriented Programing language - OOP).Kada je Delphi bio razvijen, dodata su nova pona{anja i klju~ne re~i koje su imaleveze sa modelom komponenti. Dodate su klju~ne re~i poput published i property,izme|u ostalog. Ovo je omogu}ilo Borlandu da u potpunosti implementira snagumodela komponenti. Modifikuju}i jezik Pascal tako da se uklopi u model kompone-

    Po~etak rada sa Delphijem

    13

    1

  • nti, Borland je bio u mogu}nosti da na ispravan na~in inplementira RAD. U osnovijezik Object Pascal je modifikovan koliko je to bilo potrebno, dok su stavke vezaneza dizajn do{le nakon razvoja tada nepoznatog proizvoda nazvanog Delphi. Kaorezultat dobio se jezik koji radi sa modelom komponenti.

    Iako je izmena jezika Pascal bila razmatrana kao veliki korak za Borland, ovo se nijedogodilo kao presedan. Prethodno je Microsoft modifikovao jezik Basic i napravionovi jezik pod nazivom Visual Basic. Ovaj novi jezik je bio skoro neprepoznatljiv upore|enju sa originalnim jezikom Basic, koji je posluio kao njegova osnova.

    Borland je preuzeo rizik da modifikuje Pascal. Nakon svega imao je osnovu lojalnihkupaca koji moda nisu mogli da prihvate izmene jezika koji su upoznali i zavoleli.Ipak Borland je bio u dobroj poziciji na tri{tu Pascala i krenuo je napred sa svojimplanovima. Rezultat je bio pravi hit, naravno.

    Ne}ete pogre{iti, Object Pascal je veoma mo}an programski jezik, a ovu izjavu nekoristim ~esto. Imam iskustva sa programskim jezikom C/C++, i poput ostalihC/C++ programera gledao sam u po~etku na Delphi sa dozom skepticizma. Ubrzosam otkrio da je jezik Object Pascal veoma mo}an. Ustvari, u rukama prose~nog programera skoro da nema razlike izme|u ova dva jezika u pogledu snage. ObjectPascal je jedinstven po tome da je mo}an i relativno lak za u~enje. Ne elim ni nakoji na~in da odam utisak da Object Pascal nije programski jezik koji prua punomogu}nosti. Pascal je obi~no bio shvatan kao manje ozbiljan programski jezik. Ovonikada nije bilo ta~no i nikada nije