1. Seznámení s C++ Builderem 
  1. Po spuštění C++ Builderu (příkazem Start | Programs | Borland C++ Builder 3 | C++ Builder ) jsou na obrazovce zobrazena tato okna: okno Builderu (je umístěno u horního okraje obrazovky),


  2. okno Inspektora objektů (je v levé části obrazovky),

    okno návrhového formuláře

    a okno Editoru kódu formuláře (poslední z těchto oken je překryto předposledním).

    Okno Inspektora objektů má dvě stránky (viz obrázek nahoře): stránku Properties (vlastností) a stránku Events (událostí). Nejprve se budeme zabývat stránkou vlastností. Jsou zde uvedeny různé vlastnosti formuláře. Mezi důležité vlastnosti formuláře patří vlastnosti Height (výška) a Width (šířka). Změňte tažením myši na obrazovce rozměry okna formuláře a sledujte, jak se tyto změny projevují na odpovídajících vlastnostech v okně Inspektora objektů. Lze to provést i obráceně. Když změníme některou z těchto vlastností v Inspektoru objektů, změní se i rozměr formuláře.
  3. Další důležité vlastnosti určují pozici formuláře na obrazovce. Jsou to vlastnosti Left (vzdálenost od levého okraje obrazovky) a Top (vzdálenost od horního okraje obrazovky). Přesvědčte se, že to funguje stejným způsobem jako u rozměrů formuláře.
  4. Vlastnost Caption (titulek okna) určuje text zobrazený v horním řádku formuláře (okna). Změňte tento titulek na Normální okno (přepíšeme jej v Inspektoru objektů).
  5. Vlastnost Color (barva formuláře) se určuje pomocí symbolických konstant. Zjistěte, jaká jména mají tyto konstanty.
  6. Nejdůležitější vlastností je vlastnost Name (jméno). Pomocí této vlastnosti se odkazujeme na formulář, případně na jiné objekty umístěné na formuláři. Hodnota této vlastnosti musí být identifikátor. Tzn. nelze zde např. používat mezery, písmena s diakritikou. Hodnotu této vlastnosti vytváří Builder, ale můžeme ji změnit.
  7. Vytvořenou aplikaci můžeme kdykoliv spustit a prohlédnout si tak výsledky své práce. Provedeme to volbou Run | Run. Po provedení překladu (trvá to několik sekund) se na obrazovce zobrazí náš formulář jako okno (zatím prázdné), se kterým můžeme běžným způsobem manipulovat (přesouvat, měnit jeho velikost apod.). Uzavřením okna se opět dostaneme do vývojového prostředí Builderu.
  8. Na formulář můžeme vkládat různé komponenty. Používáme k tomu Paletu komponent, která je umístěna v pravé dolní části okna Builderu (má několik stránek: Standard, Additional, atd.). Paleta komponent je tvořena řadou tlačítek, ukázáním myší na tlačítko zobrazíme jeho název. Nalezněte tlačítko s názvem Button (je na stránce Standard šesté zleva).

  9. Komponentu na formulář vložíme tak, že kliknutím vybereme komponentu na Paletě komponent a dalším kliknutím ji umístíme na požadované místo formuláře. Vložte na formulář komponentu Button (tlačítko).
  10. Jestliže vložená komponenta je vybrána (je obklopena záchytnými čtverečky), pak můžeme měnit její velikost a umístění a to stejným způsobem, jako jsme to měnili u formuláře (Inspektor objektů zobrazuje vlastnosti vybraného objektu). Vlastnosti Top a Left se nyní vztahují k formuláři. Vlastnost Caption komponenty tlačítka určuje text zobrazený na tlačítku. U našeho tlačítka změňte tento text na Zelený.

  11. Dále zapíšeme příkazy, které se mají provést při stisknutí tlačítka (obsluha události stisknutí tlačítka). Dvojitým kliknutím na tlačítku vytvoříme kostru této obsluhy události (jedná se o funkci, přičemž Builder vytvoří její hlavičku a složené závorky pro zápis těla funkce) a tato (zatím prázdná) funkce je zobrazena v Editoru kódu s kurzorem umístěným mezi { a }. Do tohoto místa budeme zapisovat příkazy, které se mají provést při stisknutí tlačítka. V našem případě sem zapíšeme příkazy:
    1.  Color = clGreen;
       Caption = "Zelené okno";
    První příkaz změní barvu formuláře na zelenou (hodnotu konstanty barvy clGreen vložíme do vlastnosti Color) a druhý změní titulek formuláře (vloží text - řetězec znaků - Zelené okno do vlastnosti Caption; řetězec znaků je nutno zapisovat v uvozovkách). Když nyní aplikaci přeložíme a spustíme, pak po stisknutí našeho tlačítka tyto akce proběhnou.
  12. Vlastnosti objektů tedy můžeme měnit pomocí Inspektora objektů (při návrhu), nebo příkazy jazyka C++ (za běhu aplikace). Jestliže v programu zapíšeme některý příkaz chybně, pak je signalizována chyba. Udělejte v zapsaných příkazech nějakou chybu (např. vynechte některý středník nebo zkomolte některý identifikátor) a pokuste se aplikaci znovu spustit. Podívejte se na způsob signalizace chyby. Chybu opět odstraňte.
  13. Přidejte na formulář další tlačítka, např. tlačítka Červený, Modrý atd. a zajistěte, aby při stisknutí z těchto tlačítek se odpovídajícím způsobem změnila barva a název formuláře. Program vyzkoušejte.
  14. Na formulář přidáme ještě tlačítko, kterým budeme moci formulář uzavřít (ukončit běh programu). Toto tlačítko nazveme např. Konec a obsluha stisku tohoto tlačítka bude tvořena příkazem:
    1.  Close();
  15. V okně Editoru kódu si můžeme prohlédnout vytvořený program (přesněji řečeno programovou jednotku formuláře). Každý formulář má svoji programovou jednotku. V tomto zdrojovém souboru jsou uvedeny námi vytvořené obsluhy událostí pro ošetření stisknutí našich tlačítek. Jestliže programovou jednotku formuláře uložíme do souboru (volba File | Save; zvolte např. adresář C:\PRAC), pak Builder vyžaduje použití přípony CPP. Každý formulář má mimo své programové jednotky další soubor, obsahující popis vzhledu formuláře (vlastnosti formuláře a objektů umístěných na formuláři). Tento soubor má příponu DFM, jedná se o binární soubor, který si běžným způsobem nemůžeme prohlédnout (není to ani potřeba, neboť vzhled formuláře vidíme). Jméno tohoto souboru je stejné jako jméno programové jednotky formuláře (liší se pouze příponou). Implicitní jméno souborů prvního formuláře je Unit1 (toto jméno můžeme při ukládání souborů změnit). Existuje ještě hlavičkový soubor formuláře. Jeho implicitní jméno je Unit1.H.
  16. Projekt obsahuje mimo souboru programové jednotky formuláře, hlavičkového souboru formuláře a souboru vzhledu formuláře (těchto trojic souborů může být i více, skládá-li se projekt z více formulářů) i soubory projektu. Každý projekt má tři projektové soubory, které jsou vytvářeny a udržovány Builderem a my bychom je neměli měnit. Tyto soubory mají přípony BPR, CPP a RES. Implicitní jméno je Project1. Je vhodné každý projekt ukládat do samostatného adresáře. Všechny soubory projektu a formulářů uložíme příkazem File | Save All. Po zadání příkazu se nás Builder ptá na jména programových jednotek a jméno projektových souborů (zde zadáváme specifikaci souboru s příponou BPR). Vytvořený projekt uložte do adresáře C:\PRAC\PR1 (pro soubory použijte implicitní jména). Po uložení projektu jej znovu přeložte a vyzkoušejte. Podívejte se také do adresáře C:\PRAC\PR1 jaké obsahuje soubory. Je zde také soubor s příponou EXE. Tento soubor obsahuje náš přeložený projekt. Můžeme jej spustit přímo ve Windows (není nutno jej spouštět z prostředí Builderu). Vyzkoušejte.
  17. Dále začneme vytvářet nový projekt. K otevření nového projektu použijeme příkaz File | New Application. Tím vytvoříme prázdnou aplikaci (jako při spuštění Builderu). Do středu formuláře vložíme komponentu Edit (čtvrtá zleva na stránce Standard Palety komponent). Když nyní naší aplikaci spustíme můžeme do této komponenty zapisovat libovolný text. Původní text zobrazený v této komponentě byl Edit1, je to hodnota vlastnosti Text tohoto editačního ovladače. Zrušíme hodnotu této vlastnosti v Inspektoru objektů a v ovladači nebude nic zobrazeno.
  18. V naši aplikaci budeme zjišťovat počet znaků zapsaného textu. Potřebujeme tedy vypisovat výsledek. K výpisu použijeme komponentu Label (třetí zleva). Umístíme tuto komponentu na formulář pod editační komponentu. Implicitní text je Label1, je to hodnota vlastnosti Caption. Zrušíme tento text (po zrušení textu komponenta Label nebude vidět). Titulek formuláře změníme na Zjišťování délky textu .
  19. Na formulář přidáme ještě tlačítko, jehož stisknutí spustí proces zjištění délky zapsaného textu. Tlačítko vybavíme textem Zjisti. Dále musíme vytvořit obsluhu události stisknutí tlačítka. V této obsluze zjistíme délku textu metodou Length, kterou aplikujeme na vlastnost Text instance editačního ovladače Edit1 (Edit1->Text.Length(); Edit1->Text je zapsaný text, a na tento text aplikujeme metodu tak, že jméno metody doplněné závorkami zapíšeme za tečku). Tím získáme číselnou hodnotu (číselnou hodnotu nelze přímo zobrazit; hodnota vlastnosti Caption je typu AnsiString; řetězec znaků), kterou musíme převést na řetězec znaků konstruktorem AnsiString (vytvoříme objekt tohoto typu). Aby se výsledek zobrazil, je třeba vytvořený řetězec přiřadit do vlastnosti Caption komponenty Label1. Obsluha bude tedy tvořena příkazem:
    1. Label1->Caption = "Počet znaků = " + AnsiString(Edit1->Text.Length());
    Jestliže pracujeme s vlastností nějaké komponenty, pak zapisujeme jméno komponenty, -> a jméno vlastnosti, když pracujeme s vlastností samotného formuláře, pak zapisujeme pouze jméno vlastnosti (i v tomto případě bychom mohli použít jméno formuláře, např. Form1->Color).
  20. Aplikaci můžeme vyzkoušet. Bylo by asi výhodné, aby při stisknutí klávesy Enter výpočet délky proběhl automaticky, abychom nemuseli mačkat tlačítko. Zde využijeme to, že formulář může obsahovat jedno implicitní tlačítko, které se stiskne při stisku klávesy Enter. Implicitní tlačítko vytvoříme nastavením vlastnosti tlačítka Default na True (změnu hodnoty False na True a naopak v Inspektoru objektů dosáhneme dvojitým kliknutím na této hodnotě). Proveďte toto vylepšení naší aplikace.
  21. Nyní se pokusíme tuto aplikaci změnit a to tak, že zobrazená informace o délce textu bude při zapisování textu stále aktualizována. V naši aplikaci tedy zrušíme tlačítko a využijeme to, že při zápisu každého znaku (změně textu v editačním ovladači) vzniká pro editační ovladač událost OnChange. Tato událost je implicitní událostí editačního ovladače a kostru její obsluhy můžeme vytvořit dvojitým kliknutím na editačním ovladači. Obsluha této události bude tvořena stejným příkazem jako v předchozí verzi byla obsluha stisku tlačítka. Aplikaci spustíme a vidíme, že při zápisu textu do editačního ovladače, se hodnota délky textu stále mění. Zajistěte ještě, aby tato informace byla zobrazena i před zahájením zápisu (nastavte hodnotu vlastnosti Caption komponenty Label1).
  22. Začneme opět s novou aplikací. Na formulář umístíme editační ovladač, komponentu ListBox (okno seznamu řetězců) a dvě tlačítka. Titulek formuláře změníme na Demonstrace seznamu, editační ovladač vyprázdníme a tlačítka popíšeme &Přidat a &Vyprázdnit (znaky & používáme v popisu tlačítek pro označení zkracovacích kláves). Tlačítko Přidat nastavíme jako implicitní. Při stisku tlačítka Přidat vezmeme text zapsaný v editačním ovladači a přidáme jej do seznamu řetězců. Vytvoříme tedy obsluhu stisknutí tohoto tlačítka s příkazem:
    1. ListBox1->Items->Add(Edit1->Text);
    Zde jsme použili metodu Add přidávající parametr (text zapsaný do editačního ovladače) do vlastnosti Items (seznam řetězců) komponenty ListBox1. Obdobně vytvoříme obsluhu stisknutí druhého tlačítka (použijeme zde metodu Clear vlastnosti Items; je bez parametrů - za jméno metody zapíšeme prázdné kulaté závorky).
  23. Když naši aplikaci vyzkoušíme, zjistíme několik nedostatků. Bylo by vhodné, aby po přidání textu do seznamu byl text v editačním ovladači zrušen. Dále by bylo vhodné, aby po vložení textu do editačního ovladače jsme mohli ihned začít psát do editačního ovladače další text. Do obsluhy události stisknutí tlačítka Přidat vložíme příkazy (za již zapsaný příkaz):
    1. Edit1->Text = "";
      Edit1->SetFocus();
  24. Nyní již naše aplikace pracuje uspokojivě. Můžeme ale přijít s požadavkem, aby seznam řetězců byl uspořádán abecedně. Tento problém můžeme vyřešit pomocí vlastnosti Sorted komponenty ListBox (nastavíme ji v Inspektoru objektů na True). Pokuste se provést tuto změnu.

Nové pojmy:


1. Seznámení s C++ Builderem