Objektově orientované programování. Doc. Ing. Vladimír Jehlička, CSc.



Podobné dokumenty
KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Dokument a jeho části oddíly, záhlaví, zápatí

Delphi popis prostředí

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Formátování pomocí stylů

Zpracování textu. K těmto speciálním symbolům se dostaneme přes záložku Vložení, na kartě Symboly je tlačítko Symbol.

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Realizace algoritmu v Delphi

CZ.1.07/1.5.00/

Reliance 3 design OBSAH

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

METODICKÝ POKYN PRÁCE S MS PowerPoint - ZAČÁTEČNÍCI. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

Print Version. Delphi

DUM 06 téma: Tvorba makra pomocí VBA

MS OFFICE, POWERPOINT

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Kapitola 11: Formuláře 151

MS Excel 2007 Kontingenční tabulky

MS SQL Server 2008 Management Studio Tutoriál

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

Gabriela Janská. Středočeský vzdělávací institut akademie J. A. Komenského

GOODWILL vyššší odborná škola, s. r. o. P. Holého 400, Frýdek-Místek

Microsoft Office. Word hromadná korespondence

Microsoft Office. Word vzhled dokumentu

METODICKÝ POKYN PRÁCE S MS Word MÍRNĚ POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Interaktivní tabule SMART Notebook

43 HTML šablony. Záložka Šablony v systému

MS OFFICE POWER POINT 2010

KAPITOLA 8 TABULKOVÝ PROCESOR

1. Základní pojmy, používané v tomto manuálu. 2. Stránky

METODICKÝ POKYN PRÁCE S MS PowerPoint - POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Vlastnosti dokumentu/stránky

Sestavy. Téma 3.3. Řešený příklad č Zadání: V databázi zkevidence.accdb vytvořte sestavu, odpovídající níže uvedenému obrázku.

Microsoft Word - Styly, obsah a další

Webové stránky. 4. Tvorba základní HTML webové stránky. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

Základní nastavení textového editoru Word 8.0 (Microsoft Office 97)

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

soubor dat uspořádaných do řádků a sloupců

Tvorba kurzu v LMS Moodle

Začínáme pracovat s tabulkovým procesorem MS Excel

Návod na tvorbu časové přímky v programu Microsoft PowerPoint 2013

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

MS Word 2007 Šablony programu MS Word

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

Studijní skupiny. 1. Spuštění modulu Studijní skupiny

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou...

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

MS Word. verze Přehled programů pro úpravu textu

František Hudek. leden Informační a komunikační technologie ZONER Práce s textem. Tvorba a editace odstavcového a uměleckého textu.

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

PRÁCE S DOKUMENTEM. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: srpen Ročník: šestý. Vzdělávací oblast: Informatika a výpočetní technika

Změna velikosti písmen

Kontingenční tabulky v MS Excel 2010

Spuštění a ukončení databázové aplikace Access

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_49_IVT_MSOFFICE_05_Word

1 Tabulky Příklad 3 Access 2010

dokumentu, respektive oddílu (více o oddílech v další kapitole). Nemůžeme

INFORMATIKA. aplikační software pro práci s informacemi TSUNAMI. Pracovní list pro žáky. Gymnázium K. V. Raise, Hlinsko, Adámkova 55

1. Otevřete dokument, který chcete číst. 2. Na kartě Zobrazení klikněte ve skupině Zobrazení dokumentů na položku Čtení na celé obrazovce.

Návod pro práci s aplikací

MS Excel makra a VBA

Vývoj objektových aplikací 1

7. Nástroje. 7.1 Pravopis. 7.2 Jazyk. Kapitola 7: Nástroje 47. Kontrola pravopisu

Programovací jazyk Pascal

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Rámcový manuál pro práci s programem TopoL pro Windows

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Nastavení stránky : Levým tlačítkem myši kliknete v menu na Soubor a pak na Stránka. Ovládání Open Office.org Draw Ukládání dokumentu :

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Nastavení programu pro práci v síti

Sada 1 - Základy programování

MS OFFICE MS WORD. Editor rovnic - instalace

Důležité: Pokud jako Caption zadáme (tj. pomlčku), je položka menu změněna na oddělovač.

MS Excel Filtr automatický, rozšířený

aplikační software pro práci s informacemi

František Hudek. duben 2013

2017 CARAT "New design"

6. Formátování: Formátování odstavce

3 Formuláře a sestavy Příklad 1 Access 2007

FORMÁTOVÁNÍ 2. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Programování v jazyce VISUAL BASIC.NET

1. Nastavení dokumentu

Jeden z mírně náročnějších příkladů, zaměřený na úpravu formátu buňky a především na detailnější práci s grafem (a jeho modifikacemi).

Masarykova ZŠ Klenčí pod Čerchovem OPERAČNÍ SYSTÉM

MS Word 2007 Elektronické formuláře

Základní vzorce a funkce v tabulkovém procesoru

Přehledy pro Tabulky Hlavním smyslem této nové agendy je jednoduché řazení, filtrování a seskupování dle libovolných sloupců.

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Obsah. při vyšetření pacienta. GDT souboru do programu COSMED Omnia GDT souboru z programu COSMED Omnia a zobrazení výsledků měření v programu MEDICUS

Transkript:

Objektově orientované programování Doc. Ing. Vladimír Jehlička, CSc.

Recenze: doc. RNDr. Štěpán Hubálovský, Ph.D. Doc. Ing. Václav Vrbík, CSc. Autor: Doc. Ing. Vladimír Jehlička, CSc. Název: Objektově orientované programování Rok a místo vydání: 2012, Hradec Králové Vydání: první NEPRODEJNÁ PUBLIKACE ISBN 978 80 7435 206 5

Tento materiál vznikl v rámci projektu Inovace doktorského studijního programu "ICT ve vzdělávání", reg. číslo: CZ.1.07/2.2.00/18.0005 a je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

1. Úvod Skriptum je určeno studentům doktorského studijního oboru Informační a komunikační technologie ve vzdělávání, kteří se chtějí seznámit se základy objektově orientovaného programování. Obsahuje popis základních principů tvorby objektově orientovaných aplikací. Konkrétní ukázky psaní jednotlivých projektů jsou demonstrovány na příkladech tvorby aplikací ve vývojovém prostředí Delphi. Skriptum není určeno naprostým začátečníkům v oblasti programování, ale předpokládá, že student se již dříve seznámil se základy algoritmizace a strukturovaného programování. Pro pochopení správného psaní zdrojových kódů ve vývojovém prostředí Delphi, které využívá jazyk Object Pascal, je vhodné, aby student měl základní zkušenosti s psaním programů v jazyku Pascal, s jeho využitím a s jeho syntaxí. Vedle úvodu je kniha rozdělena do dalších šesti kapitol. Ve druhé kapitole se čtenář seznámí se základy objektově orientovaného programování, jež není navázáno na žádný programovací jazyk. Jedná se tedy o obecné principy, které jsou platné pro psaní programů v jakémkoliv vývojovém prostředí a objektově orientovaném programovacím jazyku. Třetí kapitola obsahuje popis vývojového prostředí Delphi. Ve čtvrté kapitole je uveden postup vytvoření prvního programu ve vývojovém prostředí Delphi. Pátá kapitola obsahuje popis základních komponent, jaké lze využít pro komunikaci uživatele s vytvořeným projektem. Vždy je uvedeno hlavní využití dané komponenty a následuje popis nejdůležitějších vlastností komponenty a událostí, na které nejčastěji může komponenta reagovat. Vše je dokumentováno kopií okna se spuštěnou aplikací a výpisem zdrojového kódu vytvořené unity. V šesté kapitole je popsána problematika psaní aplikací s nově definovanými třídami objektů a unitami. Studenti se zde seznámí s praktickou tvorbou objektově orientovaných aplikací s využitím zapouzdření, dědičnosti i polymorfismu. Závěrečná kapitola obsahuje shrnutí základních informací, které je třeba mít na paměti, chceme li úspěšně vytvářet objektově orientované aplikace. [4]

2. Objektově orientované programování Z předcházejícího studia strukturovaného programování známe různé datové konstrukce, počínaje deklaracemi jednoduchých proměnných pro ukládání celých čísel, čísel s desetinnou částí, řetězců znaků, logických hodnot apod. Známe i vytváření složitějších konstrukcí, jako jsou jednorozměrná či vícerozměrná pole, případně záznamy, které se skládají z několika dílčích proměnných. V rámci strukturovaného programování lze definovat i objekty, které obsahují nejenom data, ale také procedury a funkce, jež mohou s těmito daty určitým předem definovaným způsobem pracovat. Objektově orientované programování (OOP) využívá k tvorbě aplikací základní stavební prvky, kterými jsou objekty obsahující atributy a metody. Atributy bývají označovány jako vlastnosti objektů a představují data, s nimiž daný objekt může pracovat. Metody jsou činnosti, které vykonává objekt. Jedná se o procedury a funkce, které jsou aktivovány jako odezvy na události vznikající za chodu aplikace a pracují s dostupnými daty. Objekty mezi sebou komunikují na základě definovaných rozhraní. Objektově orientované programování je založeno na třech základních principech: Zapouzdření: atributy a metody jsou vzájemně svázány a uzavřeny do jednotného celku, kterým je objekt. Díky zapouzdření jsou atributy a metody přístupné pouze těm objektům, jež mají příslušné oprávnění. Dědičnost: objekty jsou vytvářeny v rámci hierarchie, která umožňuje potomkům zdědit veškeré atributy i metody jejich předků a dále je využívat a rozvíjet. Polymorfismus: metody, které byly vytvořeny pro předky, jsou využitelné i jejich potomky a mohou být předefinovány. Základní stavební kameny objektově orientovaného programování představují pojmy třída a objekt. Třída je obecná datová struktura, která má svoje atributy a metody. Objekt je pak konkrétní instancí třídy, neboli proměnnou typu dané třídy. Mezi objektem a třídou lze tedy spatřovat stejnou souvislost, jakou známe ze strukturovaného programování mezi proměnnou a jejím datovým typem. Všechny objekty jedné třídy mají stejné atributy a metody. 2.1 Příklady tříd a instancí objektů Základní principy definování tříd a objektů si ukážeme na objektech, se kterými se běžně v našem životě setkáváme, a to na židlích a autech. 2.1.1 Třída židle Předpokládejme, že se nyní budeme zabývat židlemi v učebně, které jsou z běžného laického pohledu všechny stejné. Po nákupu se ničím neliší. Rozdíl je pouze v jejich umístění v rámci učebny. Můžeme tedy říci, že všechny židle jsou instancemi objektů stejné třídy, kterou pojmenujeme Židle. Všechny židle mají stejné hodnoty všech svých atributů, kromě specifikování jejich umístění v učebně. Hodnota tohoto atributu je specifická pro každou [5]

konkrétní židli. Díky tomu pak můžeme mluvit o jednotlivých židlích, které mají svoje vlastní pojmenování. Například Židle1 je židle, která se nachází v první řadě a je první židlí od okna. Vedle ní stojí Židle2, Židle3 atd. Tak specifikujeme konkrétní jednotlivé instance objektů třídy Židle. Je třeba zdůraznit, že všechny židle mají stejné atributy, a to včetně hodnot těchto atributů, s výjimkou hodnoty atributu, který specifikuje jejich umístění v učebně. Přemístímeli jednotlivé židle, pak se změní hodnota právě tohoto atributu, ale hodnoty všech ostatních atributů zůstanou zachovány. Je zřejmé, že postupem času dochází k opotřebování židlí, některá bude mít porušený lak na opěradle, jiná na sedáku, další může mít uvolněno opěradlo apod. Hodnoty atributů jednotlivých instancí se tak postupem času začnou rozcházet, ale všechny instance stále zůstávají instancemi jedné společné třídy Židle, a tedy mají stejné atributy. Podíváme li se ale do prodejny nábytku, pak tam spatříme velké množství nejrůznějších židlí, které se liší svým provedením. Pro každý typ židlí bychom tedy mohli definovat jejich vlastní třídu. Současně je ale zřejmé, že všechny takto definované třídy židlí mají společné atributy, kterými mohou být např. čtyři nohy, sedák a opěradlo. Lze tak definovat předka všech tříd židlí, a to jako třídu Židle, od níž mohou být odvozeny třídy potomků např. typu: Dřevěná židle, Kovová židle, Plastová židle. Od třídy Dřevěná židle můžeme vytvořit potomky: Dřevěná čalouněná židle, Dřevěná nečalouněná židle. Výsledná hierarchická struktura navržených tříd může mít následující podobu. Židle Dřevěná židle Kovová židle Plastová židle Dřevěná čalouněná židle Dřevěná nečalouněná židle Mezi vlastnosti židlí může patřit např. Barva, která je vlastností všech židlí. To znamená, že vlastnost Barva bude definována jako atribut prapředka všech židlí, tedy třídy Židle. Naopak Druh látky pro čalounění židlí bude vlastnost výhradně pouze čalouněných židlí. [6]

Je logické, že nečalouněné židle tuto vlastnost mít nebudou. Jedná se tedy o atribut třídy Dřevěná čalouněná židle. Při definování uvedených tříd ale můžeme postupovat i jinak. Vyjděme ze třídy Sedací nábytek. Zde můžeme definovat prapředka, který bude mít atributy společné všem prvkům sedacího nábytku. Například to mohou být Barva, nebo Počet míst pro sezení apod. Potomkem pak mohou být třídy: Židle, Křeslo, Lavice. Ale také bychom mohli mezi sedací nábytek zařadit pohovky, které lze po rozložení využít i pro spaní. Definujeme tedy další třídu Pohovka. Výsledný návrh tříd bude mít následující strukturu. Sedací nábytek Židle Křeslo Lavice Pohovka Jestliže v předcházejícím jsme definovali různé třídy židlí jako potomky společného předka Židle, můžeme nyní zachovat pouze třídu Židle s novým atributem Materiál. Definováním hodnoty tohoto atributu by pak bylo možno od sebe odlišit židle dřevěné, kovové či plastové. Další atribut Čalounění by mohl být dvouhodnotový typu Ano/Ne, čímž by se odlišily čalouněné židle od nečalouněných. Vidíme tedy, že definování tříd objektů a jejich potomků je velice variabilní a vždy záleží na dalším uplatnění příslušných instancí. Ve všech uvedených případech jsme se ale zatím setkali pouze s definováním atributů, neboli vlastností jednotlivých tříd. U sedacího nábytku neočekáváme, že by reagoval na vznik jakékoliv události. Proto se zde nemůžeme zabývat metodami, které by vykonaly určitou činnost jako odezvu na vzniklou událost. 2.1.2 Třída auto Jestliže se pokusíme definovat vlastnosti, jež jsou společné všem automobilům, pak tímto způsobem můžeme definovat atributy třídy, která bude představovat prapředka všech následujících potomků, tj. různých tříd automobilů. Prapředek Automobil bude mít např. následující atributy: Šířka, Výška, Délka, Hmotnost, Kola, Volant, Užitné zatížení, Barva atd. Automobil má ale také svoje metody, kterými dokáže reagovat na vzniklé události. Například na Otočení startovacího klíčku nastartuje motor, po Stisknutí pedálu akcelerátoru přidá plyn, po Stisknutí brzdového pedálu zabrzdí, po Otočení volantu otočí řízenými koly apod. Uvedené atributy a metody jsou [7]

společné všem automobilům a všem třídám potomků, které z této výchozí třídy jsou odvozeny. Třída Automobil tedy může mít následující atributy a metody: Třída: Automobil Atributy: Šířka Délka Hmotnost Kola Volant Užitné zatížení Barva Události a odpovídající metody: Otočení startovacího klíčku - Nastartování motoru Stisknutí pedálu akcelerátoru - Přidání "plynu" Stisknutí brzdového pedálu - Zabrzdění Otočení volantu - Otočení řízenými koly Jako dědice tedy můžeme definovat nové třídy, kterými mohou být: Osobní automobil, Nákladní automobil, Autobus apod. Mezi specifické vlastnosti např. třídy Nákladní automobil může patřit Dovolená hmotnost nákladu. Specifickou metodou může být Sklápění korby s nákladem apod. Tato metoda bude volána jako reakce na Stisk příslušného tlačítka na palubní desce řidiče. Instance objektů třídy Nákladní automobil budou mít všechny atributy a metody společné s instancemi objektů třídy Automobil, která je předkem třídy Nákladní automobil. Navíc budou mít další atributy a metody, které jsou specifické právě pro instance třídy Nákladní automobil. Výsledná struktura atributů a metod je zřejmá z následujícího schématu. [8]

Třída: Nákladní automobil Atributy: Dědictví po třídě Automobil: Šířka Délka Hmotnost Kola Volant Užitné zatížení Barva Události a odpovídající metody: Dědictví po třídě Automobil: Otočení startovacího klíčku - Nastartování motoru Stisknutí pedálu akcelerátoru - Přidání "plynu" Stisknutí brzdového pedálu - Zabrzdění Otočení volantu - Otočení řízenými koly Nově definovaný atribut: Dovolená hmotnost nákladu Nově definovaná metoda: Stisk příslušného tlačítka - Sklápění korby s nákladem Je zřejmé, že osobní automobil má čtyři kola, autobus či nákladní automobil má zpravidla větší počet kol, např. šest či osm. Nejedná se tedy o nový atribut potomků. Jde pouze o definování číselné hodnoty atributu Kola, který všechny třídy dědí od svého předka Automobil. 2.2 Objektově orientované programování ve vývojovém prostředí Delphi V rámci objektově orientovaného programování ve vývojovém prostředí Delphi jsou všechny třídy potomky základní virtuální třídy Object. Všechny další třídy objektů jsou potomky této základní třídy. Objekty, které mají za chodu aplikace svoji vizuální reprezentaci, to znamená, že je můžeme vkládat na formulář a po spuštění aplikace budou na tomto formuláři vidět, jsou nazývány komponentami. Programátorovi jsou dostupné přímo z vývojového prostředí Delphi, případně si je může stahovat jako volně dostupné z internetu. S definováním tříd, objektů, komponent a jejich využitím při vývoji objektově orientovaných aplikací se blíže seznámíme v kapitole šesté, kde se budeme podrobněji věnovat objektově orientovanému programování právě ve vývojovém prostředí Delphi. Dříve než se touto problematikou budeme zabývat, seznámíme se s vývojovým prostředím Delhpi. Vytvoříme si svoji vlastní aplikaci a naučíme se vytvářet jednoduché aplikace s využitím řady vizuálních komponent, které jsou standardně dostupné ve vývojovém prostředí Delphi. [9]

3. Vývojové prostředí Delphi Ve vývojovém prostředí Delphi můžeme vytvářet programy jak ve strukturované formě, tak i jako objektově orientované aplikace, které lze následně spouštět v prostředí Windows. Máme li vývojové prostředí Delphi nainstalováno na svém počítači, pak ho můžeme spustit poklepáním na ikonu na ploše monitoru. Případně můžeme klepnutím na ikonu otevřít nabídku naposledy použitých programů, ze kterých vybereme Delphi klepnutím na ikonu. Jestliže jsme ale doposud s Delphi nepracovali, pak je třeba po klepnutí na ikonu klepnout na tlačítko a následně klepnutím na tlačítko rozbalit nabídku, z níž vybereme položku, na kterou klepneme. Následně se otevře vývojové prostředí Delphi v základním tvaru a na dolním řádku obrazovky počítače se zobrazí ikona dokumentuje následující kopie obrazovky., což [10]

Nyní je třeba klepnout na tlačítko okno New Items., které umožní zobrazit dialogové Pak je třeba se rozhodnout, co chceme dále dělat. Pokud budeme vytvářet program v klasické strukturované podobě, poklepeme na ikonu. [11]

Problematikou strukturovaného programování se v dalším textu zabývat nebudeme. Chceme li ale vytvářet objektově orientovanou aplikaci, poklepeme na ikonu Dále se budeme zabývat výhradně tvorbou objektově orientovaných aplikací. Výchozí vzhled obrazovky může být např. takový, jaký je uveden na následujícím snímku.. Základním prvkem standardní obrazovky vývojového prostředí Delphi je hlavní panel, který obsahuje hlavní menu a panel nástrojů. [12]

Vizuální návrh aplikací probíhá na ploše formuláře, do něhož vkládáme požadované komponenty. Uživatelé si však mohou rozložení jednotlivých prvků na obrazovce počítače upravit podle svých vlastních požadavků. Bloky, které pro svoji práci nepotřebují, mohou odstranit z obrazovky klepnutím na příslušnou ikonu. Naopak mohou využít hlavní menu a klepnutím na položku zobrazit nabídku dalších zobrazitelných bloků. Pro naši práci je nezbytné, abychom měli na monitoru zobrazenou nabídku panelu nástrojů, kterou zobrazíme klepnutím na položku. Panel nástrojů je standardně umisťován v pravé části obrazovky. Dále je třeba zobrazit panel správce objektů klepnutím na položku, který je standardně zobrazován v levé části obrazovky. Klepneme li na položku, zobrazíme panel, ve kterém bude průběžně zobrazována aktuální struktura vytvářené unity. [13]

Celkový vzhled vývojového prostředí Delphi pak může mít např. následující podobu. V tomto okamžiku je na obrazovce zobrazen formulář, jenž se nachází na kartě s označením záložky Design. Vlastní kód programu budeme psát na kartě, kterou zobrazíme klepnutím na její záložku s označením Code. [14]

3.1 Paleta komponent Základ vizuálního programování ve vývojovém prostředí Delphi tvoří vkládání komponent do formuláře. Komponenty vybíráme z palety komponent, kde jsou seskupeny do větších celků, jako jsou Standard, Aditional atd., a to podle svého základního uplatnění ve vytvářených aplikacích. Zvolenou komponentu vložíme do formuláře tak, že na panelu komponent na ni klepneme levým tlačítkem myši a následně klepneme levým tlačítkem myši do formuláře. Pomocí myši pak můžeme komponentu přesouvat po ploše formuláře a umístit ji podle našich požadavků, případně také můžeme měnit její rozměr. Chceme li např. vložit do formuláře tlačítko, pak na paletě komponent klepneme na komponentu TButton. Necháme li chvíli umístěn kurzor myši nad komponentou, pak se pod ní zobrazí žlutý obdélník s plovoucí nápovědou s názvem této komponenty. Tlačítko umístíme do formuláře tak, že do zvoleného místa formuláře klepneme levým tlačítkem myši. Nově umístěné tlačítko je ve formuláři označeno pomocí modrých koleček na jeho obvodu. [15]

V tuto chvíli lze tlačítkem posouvat po ploše formuláře pomocí myši při stisknutém jejím levém tlačítku. Umístíme li kurzor myši na libovolné modré kolečko na obvodu zadaného tlačítka, zobrazí se nápovědná šipka, která nás navádí v tom, jakým směrem můžeme při stisknutém levém tlačítku myši změnit velikost tlačítka. Je tedy zřejmé, že pomocí myši můžeme nastavovat vlastnosti tlačítka, které definují jeho velikost a umístění na ploše formuláře. 3.2 Správce objektů Panel Object Inspector umožňuje nastavovat vlastnosti a odezvy na události u zvolených komponent. Obsah tohoto panelu se mění a vždy závisí na tom, která komponenta je v daném okamžiku vybrána. Na začátku tvorby aplikací pracujeme s prázdným formulářem. Následující obrázek dokumentuje část odpovídajícího obsahu správce objektů. Vždy je důležité si včas zkontrolovat identifikátor komponenty, který je uveden v prvním řádku správce objektů. Jestliže jsme např. právě do formuláře vložili tlačítko, pak obsah správce objektů bude následující. [16]

Obsah panelu správce objektů tedy vždy uvádí vlastnosti, resp. události té komponenty, kterou máme v daném okamžiku vybranou jako aktuální. Z obou ukázek je zřejmé, že různé komponenty mohou mít stejné vlastnosti. Například vlastnost Caption představuje titulek dané komponenty. Zde lze zadat libovolný řetězec znaků, a to včetně diakritických znamének české abecedy. Titulek formuláře se následně přepíše do modrého pruhu v záhlaví formuláře. Titulek tlačítka se přenese přímo na tlačítko. Správce objektů se skládá ze dvou karet: Properties a Events. 3.2.1 Karta atributy (vlastnosti) Properties První karta s označením záložky Properties slouží k nastavování hodnot atributů, neboli vlastností komponent. Příslušné hodnoty jsou ukládány do proměnných odpovídajícího typu. Například již zmiňovaný titulek komponenty je ukládán do proměnné typu String, tedy řetězce znaků, a to s označením atributu Caption. Mnoho vlastností je ukládáno do proměnných typu Integer. Jedná se např. o šířku tlačítka, která je uložena v atributu Width. Jestliže jsme tedy při vkládání tlačítka do formuláře pomocí myši nastavili jeho umístění, šířku a výšku, pak vývojové prostředí automaticky přiřadilo příslušným atributům základní číselné hodnoty. Ty pak lze ve správci objektů upřesnit podle požadavků programátora. Některé atributy jsou logickými položkami s hodnotou True nebo False. Jejich hodnoty jsou ukládány do proměnných typu Boolean. Typickým představitelem je atribut Visible, jenž určuje, zda komponenta je nebo není zobrazena. [17]

Konkrétní hodnotu atributu lze zadat z nabídky možností tak, že nejprve klepneme na daný atribut, u kterého se zobrazí tlačítko s černou šipkou. Klepnutím na toto tlačítko rozbalíme nabídku možností, ze které zadáme požadovanou hodnotu. Některé atributy jsou složeny z více podřízených atributů, jako je tomu např. u atributu Font. V tom případě je vedle identifikátoru daného atributu zobrazeno tlačítko plus. Po klepnutí na něj se tlačítko změní na minus hodnoty můžeme měnit. a zobrazí se podřízené atributy, jejichž Po klepnutí na tlačítko minus se podřízené atributy opět skryjí. Druhou možností je klepnutí na daný atribut, vedle kterého se zobrazí rozbalovací tlačítko se třemi tečkami. Po klepnutí na toto tlačítko příslušných atributů. se zobrazí dialogové okno, ve kterém lze měnit hodnoty [18]

3.2.2 Karta události Events Na kartě události přiřazujeme procedury a funkce, které se vykonají jako odezvy na příslušné události. Na této kartě je uveden seznam událostí, jejichž vznik může daná komponenta identifikovat. Například pro tlačítko je ve správci objektů uveden následující výpis událostí. Chceme li ošetřit událost klepnutí levým tlačítkem myši na tlačítko ve formuláři, pak poklepeme do prázdného bílého prostoru vedle události OnClick. Vývojové prostředí Delphi vytvoří automaticky část programového kódu, jehož součástí bude nová procedure Button1Click, která v tuto chvíli bude zatím prázdná. Nyní je úkolem programátora, aby do procedury zapsal posloupnost činností, jež se mají vykonat po klepnutí na tlačítko ve formuláři vyvíjené aplikace. Podrobněji se budeme touto problematikou zabývat v dalších kapitolách. [19]

Základem každé úspěšné práce na počítači je pravidelné ukládání veškerých dat. Vývojové prostředí Delphi v této oblasti programátorům velice pomáhá. Řádky programového kódu, které jsou uloženy v paměti počítače, jsou označeny zeleným pruhem. Nově vzniklá část kódu, která zatím ještě nebyla uložena, je označena žlutým pruhem. 3.2.3 Struktura unity Structure Výpis všech komponent, které jsou aktuálně vloženy do formuláře, je přehledně uveden v panelu s označením Structure. V daném případě se jedná o formulář, který obsahuje jedno tlačítko. [20]

4. Vytvoření prvního programu Dříve než začneme vytvářet svoji vlastní novou aplikaci, musíme si uvědomit, že vývojové prostředí Delphi vykonává řadu činností za nás a tím nám usnadňuje práci. Základním faktem je skutečnost, že po spuštění Delphi je automaticky vytvořen nový projekt, který je třeba uložit do nové prázdné složky. V hlavním menu vývojového prostředí Delphi klepneme na položku a z následné nabídky vybereme položku, na kterou klepneme. Zobrazí se dialogové okno Save Unit1 As, v němž je třeba nejprve zadat složku, do které budou ukládány všechny soubory. Jedná se o standardní dialogové okno pro ukládání souborů, ve kterém vybereme složku, do níž budeme ukládat soubory, a to pomocí rozbalovací nabídky. Struktura složek může být v zásadě naprosto libovolná, ale je vhodné si zvolit určitý srozumitelný a přehledný systém, který bude tvořen základní složkou např., ve které pak budeme následně vytvářet podsložky pro ukládání jednotlivých nových projektů. [21]

Novou složku založíme klepnutím na ikonu, čímž se založí nová složka s implicitním názvem. Název složky je třeba volit tak, abychom i s odstupem času ihned poznali, jaký projekt je v dané složce uložen, např.. Následuje uložení souboru s unitou a souboru, který obsahuje základní program Samozřejmě, že v obou případech lze implicitně nastavené názvy souborů změnit podle našich požadavků. Podíváme li se nyní do naší nové složky, pak v ní nalezneme následující soubory.. Vzhledem k tomu, že jsme zatím nezačali vytvářet žádný nový program, je zřejmé, že všechny soubory vznikly bez našeho přičinění pouze v důsledku činnosti vývojového prostředí Delphi. V důsledku toho jsou pouze některé soubory pro nás čitelné, zatímco obsah ostatních souborů je bez dalších informací nesrozumitelný. Pro ukázku si nyní můžeme zobrazit obsahy všech souborů, a to pomocí standardní aplikace Poznámkový blok. Soubor <?xml version="1.0" encoding="utf-8"?> <BorlandProject> <PersonalityInfo> <Option> <Option Name="Personality">Delphi.Personality</Option> <Option Name="ProjectType"></Option> <Option Name="Version">1.0</Option> <Option Name="GUID">{B6BC8F39-60D8-4C9C-B283-6F8D8F30E6CD}</Option> </Option> </PersonalityInfo> [22]

<Delphi.Personality> <Source> <Source Name="MainSource">Project1.dpr</Source> </Source> <FileVersion> <FileVersion Name="Version">7.0</FileVersion> </FileVersion> <Compiler> <Compiler Name="A">8</Compiler> <Compiler Name="B">0</Compiler> <Compiler Name="C">1</Compiler> <Compiler Name="D">1</Compiler> <Compiler Name="E">0</Compiler> <Compiler Name="F">0</Compiler> <Compiler Name="G">1</Compiler> <Compiler Name="H">1</Compiler> <Compiler Name="I">1</Compiler> <Compiler Name="J">0</Compiler> <Compiler Name="K">0</Compiler> <Compiler Name="L">1</Compiler> <Compiler Name="M">0</Compiler> <Compiler Name="N">1</Compiler> <Compiler Name="O">1</Compiler> <Compiler Name="P">1</Compiler> <Compiler Name="Q">0</Compiler> <Compiler Name="R">0</Compiler> <Compiler Name="S">0</Compiler> <Compiler Name="T">0</Compiler> <Compiler Name="U">0</Compiler> <Compiler Name="V">1</Compiler> <Compiler Name="W">0</Compiler> <Compiler Name="X">1</Compiler> <Compiler Name="Y">1</Compiler> <Compiler Name="Z">1</Compiler> <Compiler Name="ShowHints">True</Compiler> <Compiler Name="ShowWarnings">True</Compiler> <Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE; DbiProcs=BDE;DbiErrs=BDE;</Compiler> <Compiler Name="NamespacePrefix"></Compiler> <Compiler Name="GenerateDocumentation">False</Compiler> <Compiler Name="DefaultNamespace"></Compiler> <Compiler Name="SymbolDeprecated">True</Compiler> <Compiler Name="SymbolLibrary">True</Compiler> <Compiler Name="SymbolPlatform">True</Compiler> <Compiler Name="SymbolExperimental">True</Compiler> <Compiler Name="UnitLibrary">True</Compiler> <Compiler Name="UnitPlatform">True</Compiler> <Compiler Name="UnitDeprecated">True</Compiler> <Compiler Name="UnitExperimental">True</Compiler> <Compiler Name="HResultCompat">True</Compiler> <Compiler Name="HidingMember">True</Compiler> <Compiler Name="HiddenVirtual">True</Compiler> [23]

<Compiler Name="Garbage">True</Compiler> <Compiler Name="BoundsError">True</Compiler> <Compiler Name="ZeroNilCompat">True</Compiler> <Compiler Name="StringConstTruncated">True</Compiler> <Compiler Name="ForLoopVarVarPar">True</Compiler> <Compiler Name="TypedConstVarPar">True</Compiler> <Compiler Name="AsgToTypedConst">True</Compiler> <Compiler Name="CaseLabelRange">True</Compiler> <Compiler Name="ForVariable">True</Compiler> <Compiler Name="ConstructingAbstract">True</Compiler> <Compiler Name="ComparisonFalse">True</Compiler> <Compiler Name="ComparisonTrue">True</Compiler> <Compiler Name="ComparingSignedUnsigned">True</Compiler> <Compiler Name="CombiningSignedUnsigned">True</Compiler> <Compiler Name="UnsupportedConstruct">True</Compiler> <Compiler Name="FileOpen">True</Compiler> <Compiler Name="FileOpenUnitSrc">True</Compiler> <Compiler Name="BadGlobalSymbol">True</Compiler> <Compiler Name="DuplicateConstructorDestructor">True</Compiler> <Compiler Name="InvalidDirective">True</Compiler> <Compiler Name="PackageNoLink">True</Compiler> <Compiler Name="PackageThreadVar">True</Compiler> <Compiler Name="ImplicitImport">True</Compiler> <Compiler Name="HPPEMITIgnored">True</Compiler> <Compiler Name="NoRetVal">True</Compiler> <Compiler Name="UseBeforeDef">True</Compiler> <Compiler Name="ForLoopVarUndef">True</Compiler> <Compiler Name="UnitNameMismatch">True</Compiler> <Compiler Name="NoCFGFileFound">True</Compiler> <Compiler Name="ImplicitVariants">True</Compiler> <Compiler Name="UnicodeToLocale">True</Compiler> <Compiler Name="LocaleToUnicode">True</Compiler> <Compiler Name="ImagebaseMultiple">True</Compiler> <Compiler Name="SuspiciousTypecast">True</Compiler> <Compiler Name="PrivatePropAccessor">True</Compiler> <Compiler Name="UnsafeType">False</Compiler> <Compiler Name="UnsafeCode">False</Compiler> <Compiler Name="UnsafeCast">False</Compiler> <Compiler Name="OptionTruncated">True</Compiler> <Compiler Name="WideCharReduced">True</Compiler> <Compiler Name="DuplicatesIgnored">True</Compiler> <Compiler Name="UnitInitSeq">True</Compiler> <Compiler Name="LocalPInvoke">True</Compiler> <Compiler Name="MessageDirective">True</Compiler> <Compiler Name="CodePage"></Compiler> </Compiler> <Linker> <Linker Name="MapFile">0</Linker> <Linker Name="OutputObjs">0</Linker> <Linker Name="GenerateHpps">False</Linker> <Linker Name="ConsoleApp">1</Linker> <Linker Name="DebugInfo">False</Linker> [24]

<Linker Name="RemoteSymbols">False</Linker> <Linker Name="GenerateDRC">False</Linker> <Linker Name="MinStackSize">16384</Linker> <Linker Name="MaxStackSize">1048576</Linker> <Linker Name="ImageBase">4194304</Linker> <Linker Name="ExeDescription"></Linker> </Linker> <Directories> <Directories Name="OutputDir"></Directories> <Directories Name="UnitOutputDir"></Directories> <Directories Name="PackageDLLOutputDir"></Directories> <Directories Name="PackageDCPOutputDir"></Directories> <Directories Name="SearchPath"></Directories> <Directories Name="Packages"></Directories> <Directories Name="Conditionals"></Directories> <Directories Name="DebugSourceDirs"></Directories> <Directories Name="UsePackages">False</Directories> </Directories> <Parameters> <Parameters Name="RunParams"></Parameters> <Parameters Name="HostApplication"></Parameters> <Parameters Name="Launcher"></Parameters> <Parameters Name="UseLauncher">False</Parameters> <Parameters Name="DebugCWD"></Parameters> <Parameters Name="Debug Symbols Search Path"></Parameters> <Parameters Name="LoadAllSymbols">True</Parameters> <Parameters Name="LoadUnspecifiedSymbols">False</Parameters> </Parameters> <Language> <Language Name="ActiveLang"></Language> <Language Name="ProjectLang">$00000000</Language> <Language Name="RootDir"></Language> </Language> <VersionInfo> <VersionInfo Name="IncludeVerInfo">False</VersionInfo> <VersionInfo Name="AutoIncBuild">False</VersionInfo> <VersionInfo Name="MajorVer">1</VersionInfo> <VersionInfo Name="MinorVer">0</VersionInfo> <VersionInfo Name="Release">0</VersionInfo> <VersionInfo Name="Build">0</VersionInfo> <VersionInfo Name="Debug">False</VersionInfo> <VersionInfo Name="PreRelease">False</VersionInfo> <VersionInfo Name="Special">False</VersionInfo> <VersionInfo Name="Private">False</VersionInfo> <VersionInfo Name="DLL">False</VersionInfo> <VersionInfo Name="Locale">1029</VersionInfo> <VersionInfo Name="CodePage">1250</VersionInfo> </VersionInfo> <VersionInfoKeys> <VersionInfoKeys Name="CompanyName"></VersionInfoKeys> <VersionInfoKeys Name="FileDescription"></VersionInfoKeys> <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> [25]

<VersionInfoKeys Name="InternalName"></VersionInfoKeys> <VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys> <VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys> <VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys> <VersionInfoKeys Name="ProductName"></VersionInfoKeys> <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> <VersionInfoKeys Name="Comments"></VersionInfoKeys> </VersionInfoKeys> </Delphi.Personality> </BorlandProject> Soubor <?xml version="1.0" encoding="utf-8"?> <BorlandProject> <Transactions> <Transaction>2011.12.28 10:00:43.858.pas,C:\Users\dekan\Documents\Borland Studio Projects\Unit1.pas=G:\Jehlička\Výuka\Delphi\Delphi skripta\skripta\příklady\delphi 01 Form 01\Unit1.pas</Transaction> <Transaction>2011.12.28 10:00:43.874.dfm,C:\Users\dekan\Documents\Borland Studio Projects\Unit1.dfm=G:\Jehlička\Výuka\Delphi\Delphi skripta\skripta\příklady\delphi 01 Form 01\Unit1.dfm</Transaction> <Transaction>2011.12.28 10:21:54.690.bdsproj,C:\Users\dekan\Documents\Borland Studio Projects\Project1.bdsproj=G:\Jehlička\Výuka\Delphi\Delphi skripta\skripta\příklady\delphi 01 Form 01\Project1.bdsproj</Transaction> </Transactions> </BorlandProject> Soubor -$A8 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O+ -$P+ [26]