VY_32_INOVACE_EL_9_01
Digitální učební materiál Vývojové prostředí C++Builder - první program
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_01 Anotace: Postup vytvoření prvního jednoduchého programu v programovacím jazyce C++ ve vývojovém prostředí C++Builder a vytvoření funkční aplikace Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_01 Příprava: Vývojové prostředí C++Builder se skládá z několika základních částí: Menu - sada příkazů (všechny důležité příkazy naleznete také v paletě nástrojů) Paleta nástrojů - sada ikon nahrazující často používané příkazy Palety komponent - záložky obsahující velké množství různých komponent Object TreeView - přehled použitých komponent Object Inspector - přehled Properties (vlastností) a Events (událostí) komponent Form - základní komponenta pro vytvoření aplikace Textový editor - nástroj pro vytvoření zdrojového kódu
Komponenty: Form - formulář, Label - nápis, Button - tlačítko Vlastnosti komponent: Caption - popisek, Visible - viditelnost Zadání: Vytvořte program „Hra na schovávanou“ - nápis na formuláři se stisknutím jednoho tlačítka schová a stisknutím druhého tlačítka se zase objeví. Program převeďte na funkční aplikaci.
VY_32_INOVACE_EL_9_01 Řešení: Spusťte vývojové prostředí C++Builder, upravte velikost formuláře a umístěte na něj komponenty z palety Standard - 1 x Label, 2 x Button (viz. obr. 1). Zdrojový kód a projekt uložte do předem připravené složky - File/SaveAll. Pojmenujte všechny komponenty - Properties Name v Object Inspector (viz. obr. 2). Vygenerujte funkci k události vytvoření formuláře - Event OnCreate pro frmHra v Object Inspector a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmHra::FormCreate(TObject *Sender) { frmHra->Caption = "Hra"; lblNapis->Caption = "Ahoj"; btnSchovej->Caption = "Schovej"; btnUkaz->Caption = "Ukaž"; } //------------------------------------------------------------------------
Program uložte a přeložte - File/SaveAll a Run/Run, tím jste vytvořili vzhled aplikace po jejím spuštění (viz. obr. 3). Vygenerujte funkce k událostem kliknutí na jednotlivá tlačítka - Events OnClick pro btnSchovej a btnUkaz v Object Inspector a zapište do nich tento text: //-----------------------------------------------------------------------void __fastcall TfrmHra::btnSchovejClick(TObject *Sender) { lblNapis->Visible = false; } //-----------------------------------------------------------------------void __fastcall TfrmHra::btnUkazClick(TObject *Sender) { lblNapis->Visible = true; } //------------------------------------------------------------------------
Program uložte a přeložte - tím jste vytvořili funkční aplikaci. Hotovou aplikaci vyzkoušejte. obr. 1
obr. 2
obr. 3
VY_32_INOVACE_EL_9_02
Digitální učební materiál Funkce - její vytvoření a předávání hodnot
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_02 Anotace: Postup vytvoření jednoduchého programu s použitím jednoduché vlastní funkce a vyzkoušení různých způsobů předávání hodnot mezi programem a funkcí Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_02 Příprava: Funkce je základním stavebním prvkem programu vytvořeného v některém programovacím jazyce ze skupiny ST (structured text). K předávání hodnot mezi programem a funkcí lze použít globální proměnné nebo parametry funkce (lépe). Každá funkce má hlavičku (viz. dále) a tělo, které obsahuje blok příkazů uzavřený do složených závorek. Hlavička funkce musí být uvedena také v hlavičkovém souboru (deklarace funkce) a skládá se z těchto částí: Jméno - pomocí jména se funkce volá z programu Jmenný prostor - slouží k rozlišení funkcí se shodným jménem Vstupní parametry - předávají hodnoty z programu do funkce, nemusí být žádné Výstupní parametr - předává hodnotu z funkce do programu, nemusí být žádný Komponenty: Form - formulář, Label - nápis, Button - tlačítko Vlastnosti komponent: Caption - popisek Zadání: Vytvořte program „Sčítání“ - nápis na formuláři stisknutím tlačítka zobrazí součet dvou čísel (např. 12 + 6). Pro výpočet součtu vytvořte vlastní funkci: a) funkce bude bez parametrů b) funkce bude mít vstupní parametry c) funkce bude mít vstupní i výstupní parametry Program převeďte na funkční aplikaci. Řešení: Spusťte vývojové prostředí C++Builder, upravte velikost formuláře a umístěte na něj komponenty z palety Standard - 1 x Label, 1 x Button. Zdrojový kód a projekt uložte do předem připravené složky - File/SaveAll. Pojmenujte všechny komponenty - Properties Name v Object Inspector (viz. obr. 1). Vygenerujte funkci k události vytvoření formuláře - Event OnCreate pro frmFunkce v Object Inspector a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmFunkce::FormCreate(TObject *Sender) { this->Caption = "Funkce"; lblSoucet->Caption = "x"; btnSoucet->Caption = "Sou čet"; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_02 Program uložte a přeložte - File/SaveAll a Run/Run, tím jste vytvořili vzhled aplikace po jejím spuštění (viz. obr. 2). Vygenerujte funkci k události kliknutí na tlačítko Event OnClick pro btnSoucet v Object Inspector a do zdrojového kódu zapište tento text (pozor!!! - jsou uvedeny 3 varianty řešení podle 3 variant zadání): //-----------------------------------------------------------------------//varianta a: int a, b, x; //-----------------------------------------------------------------------void __fastcall TfrmFunkce::btnSoucetClick(TObject *Sender) { a = 12; b = 6; soucet(); lblSoucet->Caption = IntToStr(x); } //-----------------------------------------------------------------------void TfrmFunkce::soucet() { x = a + b; } //-----------------------------------------------------------------------//-----------------------------------------------------------------------//varianta b: int x; //-----------------------------------------------------------------------void __fastcall TfrmFunkce::btnSoucetClick(TObject *Sender) { soucet(12, 6); lblSoucet->Caption = IntToStr(x); } //-----------------------------------------------------------------------void TfrmFunkce::soucet(int aa, int bb) { x = aa + bb; } //-----------------------------------------------------------------------//-----------------------------------------------------------------------//varianta c: //-----------------------------------------------------------------------void __fastcall TfrmFunkce::btnSoucetClick(TObject *Sender) { lblSoucet->Caption = IntToStr(soucet(12, 6)); } //-----------------------------------------------------------------------int TfrmFunkce::soucet(int aa, int bb) { int xx = aa + bb; return xx; } //-----------------------------------------------------------------------//-----------------------------------------------------------------------//poslední funkci lze vytvo ř it i bez proměnné xx: //return aa + bb; //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_02 Program uložte a přeložte - tím jste vytvořili funkční aplikaci. Hotovou aplikaci vyzkoušejte. obr. 1
obr. 2
VY_32_INOVACE_EL_9_03
Digitální učební materiál Příkaz if-else - seznámení a použití
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_03 Anotace: Postup vytvoření jednoduchého programu obsahujícího příkaz if-else, seznámení s tímto příkazem a jeho použitím v programu Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_03 Příprava: Příkaz if-else (podmínka if) slouží k podmíněnému vykonávání určité části programu nebo k jeho rozdělení na dvě větve. Nejjednodušší variantou je tvar: if (podmínka) p ř íkaz;
Podmínkou je jakákoliv proměnná nebo výraz datového typu bool (hodnoty true nebo false). Příkaz se vykoná pouze v případě, že podmínka bude mít hodnotu true. Kompletní variantou je tvar: if (podmínka) { blok_p ř íkaz ů_1; } else { blok_p ř íkaz ů_2; }
Blok_příkazů_1 se vykoná pouze v případě, že podmínka bude mít hodnotu true, blok_příkazů_2 se vykoná pouze v případě, že podmínka bude mít hodnotu false. Podmínky se dají skládat (pomocí logických operátorů) nebo vkládat (rozdělení programu na více větví). Komponenty: Form - formulář, Panel - panel, Button - tlačítko Vlastnosti komponent: Caption - popisek, Color - barva Zadání: Vytvořte program „Změna barvy“ - barva panelu se každým stisknutím tlačítka bude měnit mezi červenou a zelenou. Program převeďte na funkční aplikaci. Řešení: Spusťte vývojové prostředí C++Builder, upravte velikost formuláře a umístěte na něj komponenty z palety Standard - 1 x Panel, 1 x Button. Zdrojový kód a projekt uložte do předem připravené složky - File/SaveAll. Pojmenujte všechny komponenty - Properties Name v Object Inspector (viz. obr. 1). Vygenerujte funkci k události vytvoření formuláře - Event OnCreate pro frmIfelse v Object Inspector a zapište do ní tento text:
VY_32_INOVACE_EL_9_03 //-----------------------------------------------------------------------void __fastcall TfrmIfelse::FormCreate(TObject *Sender) { this->Caption = "P ř íkaz if-else"; pnlPanel->Caption = ""; pnlPanel->Color = clRed; btnTlacitko->Caption = "P ř epni barvu"; } //------------------------------------------------------------------------
Program uložte a přeložte - File/SaveAll a Run/Run, tím jste vytvořili vzhled aplikace po jejím spuštění (viz. obr. 2). Vygenerujte funkci k události kliknutí na tlačítko Event OnClick pro btnTlacitko v Object Inspector a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmIfelse::btnTlacitkoClick(TObject *Sender) { if (pnlPanel->Color == clRed) pnlPanel->Color = clGreen; else pnlPanel->Color = clRed; } //------------------------------------------------------------------------
Program uložte a přeložte - tím jste vytvořili funkční aplikaci. Hotovou aplikaci vyzkoušejte. obr. 1
obr. 2
VY_32_INOVACE_EL_9_04
Digitální učební materiál Příkaz switch - seznámení a použití
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_04 Anotace: Postup vytvoření jednoduchého programu obsahujícího příkaz switch, seznámení s tímto příkazem a jeho použitím v programu Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_04 Příprava: Příkaz switch (přepínač) slouží k rozdělení programu na více větví. Kompletní variantou je tvar: switch (hodnota) { case hodnota_1 : p ř íkaz_1; break; case hodnota_2 : p ř íkaz_2; break; case hodnota_3 : p ř íkaz_3; break; atd. default : p ř íkaz_n; break; }
Hodnotou je jakákoliv proměnná nebo výraz datového typu int (celá čísla). Příkaz_1 se vykoná pouze v případě, že hodnota bude mít hodnotu hodnota_1, Příkaz_2 se vykoná pouze v případě, že hodnota bude mít hodnotu hodnota_2, Příkaz_3 se vykoná pouze v případě, že hodnota bude mít hodnotu hodnota_3, atd. Příkaz_n se vykoná pouze v případě, že hodnota nebude mít žádnou z uvedených hodnot (řádek default není povinný). Na místě jednotlivých příkazů jich může být i více (odděleny středníkem). Příkaz break slouží k tomu, aby program nepokračoval vykonáváním příkazů na dalších řádcích (není povinný, na řádku default by nemusel být vůbec). Komponenty: Form - formulář, Panel - panel, Edit - editační pole, Button - tlačítko Vlastnosti komponent: Caption - popisek, Color - barva, Text - obsah editačního pole Zadání: Vytvořte program „Přepínač barev“ - barva panelu se každým stisknutím tlačítka bude měnit podle hodnoty zadané v editačním poli (0 - šedá, 1- bílá, 2 - žlutá, 3 - červená, 4 - zelená, 5 - modrá, ostatní hodnoty - černá). Vytvořte varianty: a) bez kontroly zadané hodnoty b) s kontrolou zadané hodnoty pomocí funkce TryStrToInt c) s kontrolou zadané hodnoty pomocí funkce StrToIntDef Program převeďte na funkční aplikaci.
VY_32_INOVACE_EL_9_04 Řešení: Spusťte vývojové prostředí C++Builder, upravte velikost formuláře a umístěte na něj komponenty z palety Standard - 1 x Panel, 1 x Edit, 1 x Button. Zdrojový kód a projekt uložte do předem připravené složky - File/SaveAll. Pojmenujte všechny komponenty - Properties Name v Object Inspector (viz. obr. 1). Vygenerujte funkci k události vytvoření formuláře - Event OnCreate pro frmSwitch v Object Inspector a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmSwitch::FormCreate(TObject *Sender) { this->Caption = "P ř íkaz switch"; pnlPanel->Caption = ""; edtCislo->Text = "0"; btnTlacitko->Caption = "Nastavení barvy"; } //------------------------------------------------------------------------
Program uložte a přeložte - File/SaveAll a Run/Run, tím jste vytvořili vzhled aplikace po jejím spuštění (viz. obr. 2). Vygenerujte funkci k události kliknutí na tlačítko Event OnClick pro btnTlacitko v Object Inspector a zapište do ní tento text (pozor!!! jsou uvedeny 3 varianty řešení podle 3 variant zadání): //-----------------------------------------------------------------------//varianta a: //-----------------------------------------------------------------------void __fastcall TfrmSwitch::btnTlacitkoClick(TObject *Sender) { int cislo = StrToInt(edtCislo->Text); switch (cislo) { case 0 : pnlPanel->Color = clBtnFace; break; case 1 : pnlPanel->Color = clWhite; break; case 2 : pnlPanel->Color = clYellow; break; case 3 : pnlPanel->Color = clRed; break; case 4 : pnlPanel->Color = clGreen; break; case 5 : pnlPanel->Color = clBlue; break; default : pnlPanel->Color = clBlack; break; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_04 //-----------------------------------------------------------------------//varianta b: //-----------------------------------------------------------------------void __fastcall TfrmSwitch::btnTlacitkoClick(TObject *Sender) { int cislo; if (TryStrToInt(edtCislo->Text, cislo)) { switch (cislo) { case 0 : pnlPanel->Color = clBtnFace; break; case 1 : pnlPanel->Color = clWhite; break; case 2 : pnlPanel->Color = clYellow; break; case 3 : pnlPanel->Color = clRed; break; case 4 : pnlPanel->Color = clGreen; break; case 5 : pnlPanel->Color = clBlue; break; default : pnlPanel->Color = clBlack; break; } } else ShowMessage("Nebylo zadáno č íslo !!!"); } //-----------------------------------------------------------------------//-----------------------------------------------------------------------//varianta c: //-----------------------------------------------------------------------void __fastcall TfrmSwitch::btnTlacitkoClick(TObject *Sender) { int cislo = StrToIntDef(edtCislo->Text, 0); switch (cislo) { case 0 : pnlPanel->Color = clBtnFace; break; case 1 : pnlPanel->Color = clWhite; break; case 2 : pnlPanel->Color = clYellow; break; case 3 : pnlPanel->Color = clRed; break; case 4 : pnlPanel->Color = clGreen; break; case 5 : pnlPanel->Color = clBlue; break; default : pnlPanel->Color = clBlack; break; } } //------------------------------------------------------------------------
Program uložte a přeložte - tím jste vytvořili funkční aplikaci. Hotovou aplikaci vyzkoušejte. obr. 1
obr. 2
VY_32_INOVACE_EL_9_05
Digitální učební materiál Příkazy cyklů - seznámení a použití
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_05 Anotace: Postup vytvoření jednoduchého programu obsahujícího některý z příkazů cyklů, seznámení s tímto příkazem a jeho použitím v programu Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_05 Příprava: Příkaz for (cyklus for) slouží k opakování části programu. Lze jej použít, pokud předem známe počet opakování. Kompletní variantou je tvar: for (výchozí_hodnota; podmínka; inkrementace) { blok_p ř íkaz ů; }
V hlavičce cyklu je nutné deklarovat iterační proměnnou (s každým průchodem cyklem mění svoji hodnotu) datového typu int (celá čísla). Výchozí hodnota iterační proměnné je určena hodnotou výchozí_hodnota. Podmínkou je jakákoliv proměnná nebo výraz datového typu bool (hodnoty true nebo false). Cyklus se opakuje, dokud podmínka bude mít hodnotu true. Inkrementace určuje způsob změny hodnoty iterační proměnné. Dalším typem cyklu je příkaz while. Lze jej použít, pokud předem neznáme počet opakování. Kompletní variantou je tvar: while (podmínka) { blok_p ř íkaz ů; }
Podmínkou je jakákoliv proměnná nebo výraz datového typu bool (hodnoty true nebo false). Cyklus se opakuje, dokud podmínka bude mít hodnotu true. Podmínka se kontroluje před vykonáním příkazů (nemusejí se vykonat ani jednou). Dalším typem cyklu je příkaz do-while. Lze jej použít, pokud předem neznáme počet opakování. Kompletní variantou je tvar: do {
blok_p ř íkaz ů; } while (podmínka);
Podmínkou je jakákoliv proměnná nebo výraz datového typu bool (hodnoty true nebo false). Cyklus se opakuje, dokud podmínka bude mít hodnotu true. Podmínka se kontroluje až po vykonání příkazů (vždy se vykonají alespoň jednou). Komponenty: Form - formulář, Label - nápis, Button - tlačítko Vlastnosti komponent: Caption - popisek
VY_32_INOVACE_EL_9_05 Zadání: Vytvořte program „Cyklus“ - nápis na formuláři stisknutím tlačítka zobrazí násobek dvou čísel (např. 30 * 2). Pro výpočet součinu použijte cyklus (30krát přičtěte číslo 2 k výchozí hodnotě 0). Vytvořte varianty: a) použijte cyklus for b) použijte cyklus while c) použijte cyklus do-while Program převeďte na funkční aplikaci. Řešení: Spusťte vývojové prostředí C++Builder, upravte velikost formuláře a umístěte na něj komponenty z palety Standard - 1 x Label, 1 x Button. Zdrojový kód a projekt uložte do předem připravené složky - File/SaveAll. Pojmenujte všechny komponenty - Properties Name v Object Inspector (viz. obr. 1). Vygenerujte funkci k události vytvoření formuláře - Event OnCreate pro frmCyklus v Object Inspector a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmCyklus::FormCreate(TObject *Sender) { this->Caption = "Cyklus"; lblNapis->Caption = "x"; btnTlacitko->Caption = "Po čítej"; } //------------------------------------------------------------------------
Program uložte a přeložte - File/SaveAll a Run/Run, tím jste vytvořili vzhled aplikace po jejím spuštění (viz. obr. 2). Vygenerujte funkci k události kliknutí na tlačítko Event OnClick pro btnTlacitko v Object Inspector a zapište do ní tento text (pozor!!! jsou uvedeny 3 varianty řešení podle 3 variant zadání): //-----------------------------------------------------------------------//varianta a: //-----------------------------------------------------------------------void __fastcall TfrmCyklus::btnTlacitkoClick(TObject *Sender) { int a = 0; for (int i = 0; i < 30; i++) a += 2; lblNapis->Caption = IntToStr(a); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_05 //-----------------------------------------------------------------------//varianta b: //-----------------------------------------------------------------------void __fastcall TfrmCyklus::btnTlacitkoClick(TObject *Sender) { int a = 0, i = 0; while (i < 30) { a += 2; i++; } lblNapis->Caption = IntToStr(a); } //-----------------------------------------------------------------------//-----------------------------------------------------------------------//varianta c: //-----------------------------------------------------------------------void __fastcall TfrmCyklus::btnTlacitkoClick(TObject *Sender) { int a = 0, i = 0; do { a += 2; i++; } while (i < 30); lblNapis->Caption = IntToStr(a); } //------------------------------------------------------------------------
Program uložte a přeložte - tím jste vytvořili funkční aplikaci. Hotovou aplikaci vyzkoušejte. obr. 1
obr. 2
VY_32_INOVACE_EL_9_06
Digitální učební materiál Základní komponenty - cvičení 1
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_06 Anotace: Postup vytvoření aplikace na procvičení práce s několika základními komponentami, jejich vlastnostmi, událostmi a metodami Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_06 Příprava: Komponenty jsou základními stavebními prvky každé aplikace. Z pohledu jazyka C++ jsou to objekty, které patří do určité třídy. Jako takové mají svoje vlastnosti, události a metody (dané právě třídou, do které patří). Toto cvičení slouží k procvičení práce s nimi - domácí úkol pro žáky. Komponenty: Form - formulář, Label - nápis, Button - tlačítko, Panel - panel Vlastnosti: Caption - popisek, Align - zarovnání, Color - barva, Left - vzdálenost zleva, Top vzdálenost shora, BevelOuter - ohraničení, Font - vlastnosti písma, Size - velikost, Enabled - povolení, Visible - viditelnost Události: OnCreate - vytvoření komponenty, OnClick - kliknutí levým tlačítkem myši na komponentu, OnMouseMove - pohyb myší nad komponentou Zadání: Vytvořte aplikaci „Domácí úkol č. 1“ - nápis na formuláři nabízí dvě varianty odpovědi (tlačítka Ano/Ne). Tlačítko Ne nelze stisknou (stále uhýbá před myší). Stisknutím tlačítka Ano se objeví varovná zpráva a po jejím odkliknutí všechny komponenty zmizí. Nyní je možné při pohybu myší po formuláři zobrazit rámeček vybízející ke kliknutí. Po kliknutí se objeví další varovná zpráva.
VY_32_INOVACE_EL_9_06 Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmUkol a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormCreate(TObject *Sender) { this->Caption = "Domácí úkol č . 1"; this->Align = alClient; this->Color = clAqua; lblNapis->Caption = "Slibuji, že se budu pilně u čit jazyk C++"; btnAno->Caption = "Ano"; btnNe->Caption = "Ne"; pnlPanel->Caption = ""; pnlPanel->Color = clAqua; pnlPanel->Left = 200; pnlPanel->Top = 200; pnlPanel->BevelOuter = bvNone; pnlPanel->Font->Size = 20; pnlPanel->Font->Color = clRed; pnlPanel->Enabled = false; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnMouseMove pro btnNe a OnClick pro btnAno. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------bool vpravo = false; //-----------------------------------------------------------------------void __fastcall TfrmUkol::btnNeMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (vpravo) { vpravo = false; btnNe->Left -= 100; } else { vpravo = true; btnNe->Left += 100; } } //-----------------------------------------------------------------------void __fastcall TfrmUkol::btnAnoClick(TObject *Sender) { ShowMessage("Vaše odpověď může být použita proti vám !!!"); lblNapis->Visible = false; btnAno->Visible = false; btnNe->Visible = false; pnlPanel->Enabled = true; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_06 Program uložte a přeložte. Vygenerujte funkce k událostem OnMouseMove pro frmUkol, OnMouseMove pro pnlPanel a OnClick pro pnlPanel. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { pnlPanel->Caption = ""; pnlPanel->Color = clAqua; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::pnlPanelMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { pnlPanel->Caption = "Klikni si sem"; pnlPanel->Color = clYellow; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::pnlPanelClick(TObject *Sender) { ShowMessage("Nešahej na mě !!!"); pnlPanel->Caption = ""; pnlPanel->Color = clAqua; } //------------------------------------------------------------------------
Program uložte a přeložte. Pozn.: program lze vytvořit i bez použití proměnné vpravo - v podmínce if sledujte pozici tlačítka
VY_32_INOVACE_EL_9_07
Digitální učební materiál Základní komponenty - cvičení 2
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_07 Anotace: Postup vytvoření aplikace na procvičení práce s několika základními komponentami, jejich vlastnostmi, událostmi a metodami Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_07 Příprava: Komponenty jsou základními stavebními prvky každé aplikace. Z pohledu jazyka C++ jsou to objekty, které patří do určité třídy. Jako takové mají svoje vlastnosti, události a metody (dané právě třídou, do které patří). Toto cvičení slouží k procvičení práce s nimi - domácí úkol pro žáky. Komponenty: Form - formulář, Label - nápis, Edit - editační pole Vlastnosti: Caption - popisek, BorderStyle - styl okraje, BorderIcons - ikony okraje, KeyPreview přednastavení kláves, Position - pozice, Color - barva, Text - obsah editačního pole, SelStart - začátek označeného textu Události: OnCreate - vytvoření komponenty, OnKeyPress - stisknutí klávesy, OnEnter - vstup do editačního pole Metody: Clear() - vymazání, SetFocus() - nastavení zaměření Zadání: Vytvořte aplikaci „Domácí úkol č. 2“ - na formuláři jsou umístěna tři editační pole. Do prvního pole lze zapisovat z klávesnice jednotlivé znaky, druhé pole po zapsání znaku automaticky zobrazí jeho hodnotu (ASCII kód) a třetí pole zobrazí tuto hodnotu v hexadecimálním tvaru (v šestnáctkové soustavě). Při zadání písmen r, R, g, G, b a B se formulář obarví příslušnou barvou.
Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmUkol a zapište do ní tento text:
VY_32_INOVACE_EL_9_07 //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormCreate(TObject *Sender) { this->Caption = "Domácí úkol č . 2"; this->BorderStyle = bsSingle; this->BorderIcons = this->BorderIcons >> biMinimize >> biMaximize; this->KeyPreview = true; this->Position = poScreenCenter; this->Color = (TColor) 0xE8E8E8; lblZnak->Caption = "Znak zadaný z klávesnice :"; lblKey->Caption = "Key hodnota zadaného znaku :"; lblDodatek->Caption = "(je to p ř ímo ASCII kód znaku)"; lblHex->Caption = "Key hodnota hexadecimálně :"; edtZnak->Text = ""; //edtZnak->Clear(); edtKey->Text = ""; edtHex->Text = ""; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnKeyPress pro frmUkol, OnEnter pro edtKey a OnEnter pro edtHex. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormKeyPress(TObject *Sender, char &Key) { unsigned char znak = Key; edtZnak->Text = ""; edtKey->Text = IntToStr(znak); edtHex->Text = IntToHex(znak,2); switch (znak) { case 'r' : case 'R' : this->Color = clRed; break; case 'g' : case 'G' : this->Color = clGreen; break; case 'b' : case 'B' : this->Color = clBlue; break; default : this->Color = (TColor) 0xE8E8E8; break; } } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtKeyEnter(TObject *Sender) { edtZnak->SetFocus(); edtZnak->SelStart = 1; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtHexEnter(TObject *Sender) { edtZnak->SetFocus(); edtZnak->SelStart = 1; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_08
Digitální učební materiál Základní komponenty - cvičení 3
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_08 Anotace: Postup vytvoření aplikace na procvičení práce s několika základními komponentami, jejich vlastnostmi, událostmi a metodami Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_08 Příprava: Komponenty jsou základními stavebními prvky každé aplikace. Z pohledu jazyka C++ jsou to objekty, které patří do určité třídy. Jako takové mají svoje vlastnosti, události a metody (dané právě třídou, do které patří). Toto cvičení slouží k procvičení práce s nimi - domácí úkol pro žáky. Komponenty: Form - formulář, Edit - editační pole, Button - tlačítko Vlastnosti: Caption - popisek, Constraints - omezení rozměrů, MinHeight - minimální výška, MinWidth - minimální šířka, Position - pozice, Text - obsah editačního pole Události: OnCreate - vytvoření komponenty, OnClick - kliknutí levým tlačítkem myši na komponentu, OnEnter - vstup do editačního pole, OnExit - vystoupení z editačního pole Metody: Clear() - vymazání Zadání: Vytvořte aplikaci „Domácí úkol č. 3“ - na formuláři je umístěno šest editačních polí. Při vstupu do každého pole se v něm zobrazí nějaké jméno a při vystoupení z pole opět zmizí. Stisknutím tlačítka lze zobrazit zprávu o tom, které pole bylo naposledy vybráno.
Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmUkol a zapište do ní tento text:
VY_32_INOVACE_EL_9_08 //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormCreate(TObject *Sender) { this->Caption = "Domácí úkol č . 3"; this->Constraints->MinHeight = 183; this->Constraints->MinWidth = 203; this->Position = poScreenCenter; edtPole1->Clear(); edtPole2->Clear(); edtPole3->Clear(); edtPole4->Clear(); edtPole5->Clear(); edtPole6->Clear(); btnZprava->Caption = "Zpráva"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnZprava, OnEnter pro edtPole1 až edtPole6 a OnExit pro edtPole1 až edtPole6. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------AnsiString jmeno = "xxx"; //-----------------------------------------------------------------------void __fastcall TfrmUkol::btnZpravaClick(TObject *Sender) { if (jmeno == "xxx") ShowMessage("Ještě nebylo vybráno žádné pole"); else ShowMessage("Naposledy bylo vybráno pole : " + jmeno); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole1Enter(TObject *Sender) { edtPole1->Text = "Adam"; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole1Exit(TObject *Sender) { jmeno = edtPole1->Text; edtPole1->Clear(); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole2Enter(TObject *Sender) { edtPole2->Text = "Božena"; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole2Exit(TObject *Sender) { jmeno = edtPole2->Text; edtPole2->Clear(); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole3Enter(TObject *Sender) { edtPole3->Text = "Cyril"; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_08 //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole3Exit(TObject *Sender) { jmeno = edtPole3->Text; edtPole3->Clear(); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole4Enter(TObject *Sender) { edtPole4->Text = "David"; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole4Exit(TObject *Sender) { jmeno = edtPole4->Text; edtPole4->Clear(); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole5Enter(TObject *Sender) { edtPole5->Text = "Emil"; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole5Exit(TObject *Sender) { jmeno = edtPole5->Text; edtPole5->Clear(); } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole6Enter(TObject *Sender) { edtPole6->Text = "František"; } //-----------------------------------------------------------------------void __fastcall TfrmUkol::edtPole6Exit(TObject *Sender) { jmeno = edtPole6->Text; edtPole6->Clear(); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_09
Digitální učební materiál Druhy chyb - mechanizmus výjimek
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_09 Anotace: Postup vytvoření aplikace na procvičení ošetření jedné run-timové chyby v programu pomocí několika základních metod Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_09 Příprava: Chyby se v programech objevují zcela běžně. Překladač je schopen odhalit pouze chyby syntaktické = chyby syntaxe („pravopisné a gramatické“ chyby). Existují ale také chyby sémantické = chyby sémantiky (běhové = run-timové), které nastanou až za běhu programu a překladač je tedy nemůže odhalit. Pokud může při běhu programu nastat chyba, je nutné tuto situaci ošetřit. Nejjednodušším způsobem ošetření chyby je použití podmínky if. Lepším způsobem je využití mechanizmu výjimek - princip spočívá v použití bloku try (zkusí se provést blok příkazů) a bloku catch (provede se, pokud v bloku try došlo k chybě = zachycení výjimky). Kompletní variantou je tvar: try { blok_p ř íkaz ů_1; } catch (popis_chyby) { blok_p ř íkaz ů_2; }
Blok_příkazů_2 se vykoná pouze v případě, že v bloku_příkazů_1 došlo k chybě. Popis_chyby umožňuje zachycovat pouze určitou výjimku. Pokud se mají zachytit všechny výjimky, použijí se v závorce tři tečky (…). Zadání: Vytvořte aplikaci „Výjimky“ - na formuláři jsou umístěna tři editační pole, která realizují matematickou operaci dělení. První pole slouží k zadání dělence, druhé pole slouží k zadání dělitele a třetí pole zobrazí podíl. K výpočtu dojde stisknutím jednoho ze tří tlačítek. První tlačítko chybu neošetřuje vůbec, druhé tlačítko používá k ošetření chyby podmínku if a třetí tlačítko zachycuje výjimku. Typickou chybou je pokus o dělení nulou (EDivByZero).
VY_32_INOVACE_EL_9_09 Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmVyjimky a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmVyjimky::FormCreate(TObject *Sender) { this->Caption = "Výjimky"; lblDelenec->Caption = "Dělenec :"; lblDelitel->Caption = "Dělitel :"; lblPodil->Caption = "Podíl :"; edtDelenec->Clear(); edtDelitel->Clear(); edtPodil->Clear(); btnBez->Caption = "Bez"; btnPodminka->Caption = "Podmínka"; btnVyjimka->Caption = "Výjimka"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnBez, btnPodminka a btnVyjimka. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmVyjimky::btnBezClick(TObject *Sender) { int delenec = StrToInt(edtDelenec->Text); int delitel = StrToInt(edtDelitel->Text); int podil; podil = delenec / delitel; edtPodil->Text = IntToStr(podil); } //-----------------------------------------------------------------------void __fastcall TfrmVyjimky::btnPodminkaClick(TObject *Sender) { int delenec = StrToInt(edtDelenec->Text); int delitel = StrToInt(edtDelitel->Text); int podil; if (delitel != 0) { podil = delenec / delitel; edtPodil->Text = IntToStr(podil); } else { edtPodil->Clear(); ShowMessage("Nulou dělit nelze !!!"); } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_09 //-----------------------------------------------------------------------void __fastcall TfrmVyjimky::btnVyjimkaClick(TObject *Sender) { int delenec = StrToInt(edtDelenec->Text); int delitel = StrToInt(edtDelitel->Text); int podil; try { podil = delenec / delitel; edtPodil->Text = IntToStr(podil); } catch (EDivByZero &e) { edtPodil->Clear(); ShowMessage("Nulou dělit nelze !!!"); } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_10
Digitální učební materiál Standardní dialogy - druhy a použití
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_10 Anotace: Postup vytvoření aplikace na procvičení práce s několika základními typy standardních dialogů Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_10 Příprava: Dialogy slouží ke komunikaci mezi aplikací a uživatelem. Některé uživatele pouze informují, jiné umožňují na informaci či otázku také reagovat. Mezi nejčastěji používané dialogy patří: a) další formulář - máme neomezené možnosti ve vytváření vzhledu, ale je to další práce navíc, ke zobrazení formuláře slouží metody Show() nebo ShowModal() b) funkce ShowMessage(zpráva) c) funkce MessageDlg(zpráva, popisek+ikona, tlačítka, 0) d) funkce MessageDlgPos(zpráva, popisek+ikona, tlačítka, 0, zleva, shora) e) funkce CreateMessageDialog(zpráva, popisek+ikona, tlačítka) f) funkce Application->MessageBox(zpráva, popisek, tlačítka+ikona) Zadání: Vytvořte aplikaci „Standardní dialogy“ - na formuláři je umístěno šest tlačítek. Každé tlačítko slouží ke zobrazení jedné z variant dialogu.
Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmSDialogy a zapište do ní tento text:
VY_32_INOVACE_EL_9_10 //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::FormCreate(TObject *Sender) { this->Caption = "S. dialogy"; this->BorderStyle = bsSingle; this->Position = poScreenCenter; btnFormular->Caption = "Formulá ř "; btnShowMessage->Caption = "ShowMessage"; btnMessageDlg->Caption = "MessageDlg"; btnMessageDlgPos->Caption = "MessageDlgPos"; btnCreateMessageDialog->Caption = "CreateMessageDialog"; btnMessageBox->Caption = "MessageBox"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vytvořte druhý formulář, umístěte na něj komponenty a pojmenujte je. Vygenerujte funkce k událostem OnCreate pro frmFormular a OnClick pro btnOK. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmFormular::FormCreate(TObject *Sender) { this->Caption = "Zpráva"; this->BorderStyle = bsDialog; this->Color = clYellow; this->Top = 20; this->Left = (Screen->Width - this->Width) / 2; lblZprava->Font->Size = 24; lblZprava->Font->Color = clRed; lblZprava->Caption = "Ukázka zprávy"; btnOK->Caption = "OK"; } //-----------------------------------------------------------------------void __fastcall TfrmFormular::btnOKClick(TObject *Sender) { this->Close(); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkci k události OnClick pro btnFormular. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------#include "Formular.h" //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnFormularClick(TObject *Sender) { frmFormular->ShowModal(); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnShowMessage, btnMessageDlg, btnMessageDlgPos, btnCreateMessageDialog a btnMessageBox. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_10 //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnShowMessageClick(TObject *Sender) { ShowMessage("Ukázka zprávy"); } //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnMessageDlgClick(TObject *Sender) { if (MessageDlg("Chcete modrý formulá ř ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes) this->Color = clBlue; } //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnMessageDlgPosClick(TObject *Sender) { if (MessageDlgPos("Chcete č ervený formulá ř ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0, 20, 20) == mrYes) this->Color = clRed; } //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnCreateMessageDialogClick(TObject *Sender) { TForm *pokus; pokus = CreateMessageDialog("Poda ř ilo se vytvo ř it dialog", mtInformation, TMsgDlgButtons() << mbOK); pokus->ShowModal(); delete pokus; } //-----------------------------------------------------------------------void __fastcall TfrmSDialogy::btnMessageBoxClick(TObject *Sender) { if (Application->MessageBox("Chcete zelený formulá ř ?", "Otázka", MB_YESNOCANCEL + MB_DEFBUTTON3 + MB_ICONQUESTION) == IDYES) //lze také mrYes this->Color = clGreen; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_11
Digitální učební materiál Logické hodnoty - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_11 Anotace: Postup vytvoření aplikace na procvičení práce s logickými hodnotami zadanými uživatelem a jejich zpracování Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_11 Příprava: Logické hodnoty (v jazyce C++ je to true = log.1 a false = log.0) umožňují rozlišovat dva stavy. Pokud si má uživatel aplikace vybrat jeden ze dvou nebo více stavů, lze kromě skupiny tlačítek využít některou z komponent určených pro práci s logickými hodnotami. Mezi nejčastěji používané komponenty patří: a) CheckBox - skupina „checkboxů“ se chová jako spínače (současně jich lze stisknout několik), nejdůležitější vlastností je Checked b) RadioButton - skupina „radiobuttonů“ se chová jako přepínač (současně lze stisknout pouze jeden), nejdůležitější vlastností je Checked c) RadioGroup - používá se ke snadnému vytvoření skupiny „radiobuttonů“, nejdůležitější vlastností je Items, k vytvoření „radiobuttonu“ slouží metoda Add(), ke zjištění nebo nastavení stisknutého „radiobuttonu“ slouží vlastnost ItemIndex Zadání: Vytvořte aplikaci „Logické hodnoty“ - na formuláři je umístěna trojice CheckBox pro nastavení stylu písma, trojice RadioButton pro nastavení velikosti písma a jeden RadioGroup pro nastavení barvy písma. Stisknutím tlačítka se nastavení projeví na textu zobrazeném pomocí Label.
VY_32_INOVACE_EL_9_11 Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmLHodnoty a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmLHodnoty::FormCreate(TObject *Sender) { this->Caption = "Logické hodnoty"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; gbxStyl->Caption = " Styl písma : "; chbTucne->Caption = "Tu čné"; chbKurziva->Caption = "Kurzíva"; chbPodtrzene->Caption = "Podtržené"; gbxVelikost->Caption = " Velikost písma : "; rbt08->Caption = "8"; rbt16->Caption = "16"; rbt24->Caption = "24"; rbt08->Checked = true; rgpBarva->Caption = " Barva písma : "; rgpBarva->Columns = 1; rgpBarva->Items->Add("Černá"); rgpBarva->Items->Add("Červená"); rgpBarva->Items->Add("Modrá"); rgpBarva->ItemIndex = 0; lblText->Caption = "Text"; btnText->Caption = "Text"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkci k události OnClick pro btnText. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmLHodnoty::btnTextClick(TObject *Sender) { //styl lblText->Font->Style = lblText->Font->Style >> fsBold >> fsItalic >> fsUnderline; if (chbTucne->Checked) lblText->Font->Style = lblText->Font->Style << fsBold; if (chbKurziva->Checked) lblText->Font->Style = lblText->Font->Style << fsItalic; if (chbPodtrzene->Checked) lblText->Font->Style = lblText->Font->Style << fsUnderline;
VY_32_INOVACE_EL_9_11 //velikost if (rbt08->Checked) lblText->Font->Size = 8; else { if (rbt16->Checked) lblText->Font->Size = 16; else lblText->Font->Size = 24; } //barva switch (rgpBarva->ItemIndex) { case 0 : lblText->Font->Color = clBlack; break; case 1 : lblText->Font->Color = clRed; break; case 2 : lblText->Font->Color = clBlue; break; } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_12
Digitální učební materiál Řetězce znaků (texty) - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_12 Anotace: Postup vytvoření aplikace na procvičení práce s řetězci znaků (texty) zadanými uživatelem a jejich zpracování Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_12 Příprava: Řetězce znaků = strings umožňují uživateli aplikace zadávat různé texty. Při volbě komponent určených pro práci s řetězci znaků rozlišujeme textové údaje jednořádkové a víceřádkové. Mezi nejčastěji používané dialogy a komponenty patří: a) InputBox() - jednořádkové údaje, další ze standardních dialogů b) InputQuery() - jednořádkové údaje, další ze standardních dialogů c) Edit - jednořádkové údaje, jednoduché editační pole, nejdůležitější vlastností je Text d) MaskEdit - jednořádkové údaje, editační pole s vlastností EditMask (umožňuje omezit druh a počet zadávaných znaků), nejdůležitější vlastností je Text e) Memo - víceřádkové údaje, komponenta pracuje s prostým = neformátovaným textem, nejdůležitější vlastností je Lines (patří do třídy TStrings - má řadu užitečných metod pro práci s řádky) f) RichEdit - víceřádkové údaje, komponenta pracuje také s formátovaným textem, nejdůležitější vlastností je Lines Zadání: Vytvořte aplikaci „Víceřádkové údaje“ - na formuláři je umístěna komponenta RichEdit a tři čtveřice RadioButton pro nastavení stylu, velikosti a barvy vybraného písma. Stisknutím jednoho tlačítka se nastavení projeví na vybraném textu, druhé tlačítko zobrazí zprávu o délce vybraného textu.
VY_32_INOVACE_EL_9_12 Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmRadky a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmRadky::FormCreate(TObject *Sender) { this->Caption = "Více ř ádkové údaje (komponenta RichEdit)"; this->Constraints->MinHeight = 397; this->Constraints->MinWidth = 714; redText->Text = "Sem napiš nějaký text !!!"; redText->Align = alTop; redText->HideSelection = false; gbxStyl->Caption = "Styl vybraného písma :"; rbtNormal->Caption = "normální"; rbtTucne->Caption = "tu čné"; rbtKurziva->Caption = "kurzíva"; rbtPodtrzene->Caption = "podtržené"; rbtNormal->Checked = true; gbxVelikost->Caption = "Velikost vybraného písma :"; rbt08->Caption = "8"; rbt16->Caption = "16"; rbt24->Caption = "24"; rbt32->Caption = "32"; rbt08->Checked = true; gbxBarva->Caption = "Barva vybraného písma :"; rbtCerna->Caption = " černá"; rbtCervena->Caption = " červená"; rbtZelena->Caption = "zelená"; rbtModra->Caption = "modrá"; rbtCerna->Checked = true; lblVlastnosti->Caption = "Vyber č ást textu a nastav jeho vlastnosti !!!"; lblDelka->Caption = "Vyber č ást textu a zobraz jeho délku !!!"; btnVlastnosti->Caption = "Vlastnosti"; btnDelka->Caption = "Délka"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnVlastnosti a btnDelka. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_12 //-----------------------------------------------------------------------void __fastcall TfrmRadky::btnVlastnostiClick(TObject *Sender) { //styl if (rbtNormal->Checked) redText->SelAttributes->Style = redText->SelAttributes->Style >> fsBold >> fsItalic >> fsUnderline; else { if (rbtTucne->Checked) redText->SelAttributes->Style = redText->SelAttributes->Style << fsBold; else { if (rbtKurziva->Checked) redText->SelAttributes->Style = redText->SelAttributes->Style << fsItalic; else redText->SelAttributes->Style = redText->SelAttributes->Style << fsUnderline; } } //velikost if (rbt08->Checked) redText->SelAttributes->Size = 8; else { if (rbt16->Checked) redText->SelAttributes->Size = 16; else { if (rbt24->Checked) redText->SelAttributes->Size = 24; else redText->SelAttributes->Size = 32; } } //barva if (rbtCerna->Checked) redText->SelAttributes->Color = clBlack; else { if (rbtCervena->Checked) redText->SelAttributes->Color = clRed; else { if (rbtZelena->Checked) redText->SelAttributes->Color = clGreen; else redText->SelAttributes->Color = clBlue; } } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_12 //-----------------------------------------------------------------------void __fastcall TfrmRadky::btnDelkaClick(TObject *Sender) { ShowMessage("Délka vybraného textu je " + IntToStr(redText->SelLength) + " znaků !!!"); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_13
Digitální učební materiál Číselné údaje - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_13 Anotace: Postup vytvoření aplikace na procvičení práce s číselnými údaji zadanými uživatelem a jejich zpracování Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_13 Příprava: Číselné údaje umožňují uživateli aplikace zadávat různá čísla a hodnoty. Při volbě komponent určených pro práci s číselnými údaji rozlišujeme textové údaje zadané jako řetězec číslic a skutečné číselné údaje (zpravidla typu int = celá čísla). Mezi nejčastěji používané dialogy a komponenty patří: a) Edit a všechny další dialogy a komponenty pro jednořádkové údaje - textové údaje, je třeba ošetřit převod řetězce na číslo a ošetřit situaci kdy převod nelze provést (uživatel aplikace nezadal řetězec číslic) b) ScrollBar - číselné údaje, nejdůležitějšími vlastnostmi jsou Min, Max a Position c) CSpinEdit - číselné údaje, nejdůležitějšími vlastnostmi jsou MinValue, MaxValue a Value d) UpDown - číselné údaje, nejdůležitějšími vlastnostmi jsou Min, Max a Position Zadání: Vytvořte aplikaci „Číselné údaje“ - na formuláři jsou umístěny různé komponenty pro práci s číselnými údaji. Stisknutím jednoho tlačítka se zobrazí zpráva o nastavených hodnotách, druhé tlačítko uloží nastavené hodnoty do souboru „cisla.txt“.
Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmCisla a zapište do ní tento text:
VY_32_INOVACE_EL_9_13 //-----------------------------------------------------------------------void __fastcall TfrmCisla::FormCreate(TObject *Sender) { this->Caption = "Číselné údaje"; this->Constraints->MinHeight = 284; this->Constraints->MinWidth = 201; lblNadpis1->Caption = "Nastavení č ísla 1 :"; lblNadpis2->Caption = "Nastavení č ísla 2 :"; lblNadpis3->Caption = "Nastavení č ísla 3 :"; memSoubor->Visible = false; btnZobraz->Caption = "Zobraz č ísla"; btnUloz->Caption = "Ulož č ísla"; sbrCislo1->Min = 100; sbrCislo1->Max = 200; sbrCislo1->Position = 150; sbrCislo1->SmallChange = 5; sbrCislo1->LargeChange = 10; lblCislo1->Caption = IntToStr(sbrCislo1->Position); cseCislo2->MinValue = 100; cseCislo2->MaxValue = 200; cseCislo2->Value = 150; cseCislo2->Increment = 5; lblCislo2->Caption = IntToStr(cseCislo2->Value); updCislo3->Min = 100; updCislo3->Max = 200; updCislo3->Position = 150; updCislo3->Increment = 5; lblCislo3->Caption = IntToStr(updCislo3->Position); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnChange pro sbrCislo1 a cseCislo2 a OnClick pro updCislo3. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmCisla::sbrCislo1Change(TObject *Sender) { lblCislo1->Caption = IntToStr(sbrCislo1->Position); } //-----------------------------------------------------------------------void __fastcall TfrmCisla::cseCislo2Change(TObject *Sender) { lblCislo2->Caption = IntToStr(cseCislo2->Value); } //-----------------------------------------------------------------------void __fastcall TfrmCisla::updCislo3Click(TObject *Sender, TUDBtnType Button) { lblCislo3->Caption = IntToStr(updCislo3->Position); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnZobraz a btnUloz. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_13 //-----------------------------------------------------------------------void __fastcall TfrmCisla::btnZobrazClick(TObject *Sender) { ShowMessage("Číslo 1 = " + IntToStr(sbrCislo1->Position) + ", č íslo 2 = " + IntToStr(cseCislo2->Value) + ", č íslo 3 = " + IntToStr(updCislo3->Position)); } //-----------------------------------------------------------------------void __fastcall TfrmCisla::btnUlozClick(TObject *Sender) { memSoubor->Clear(); memSoubor->Lines->Add("Výpis č ísel:"); memSoubor->Lines->Add("------------"); memSoubor->Lines->Add(" číslo 1 = " + IntToStr(sbrCislo1->Position)); memSoubor->Lines->Add(" číslo 2 = " + IntToStr(cseCislo2->Value)); memSoubor->Lines->Add(" číslo 3 = " + IntToStr(updCislo3->Position)); memSoubor->Lines->SaveToFile("cisla.txt"); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_14
Digitální učební materiál Kalkulačka - ukázka funkční aplikace (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_14 Anotace: Postup vytvoření ukázkové funkční aplikace „Kalkulačka“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_14 Příprava: Seznamte se nejdříve důkladně s programem „Kalkulačka“, který je dodáván v „Příslušenství“ k operačním systémům Windows (standardní zobrazení). Zadání: Vytvořte aplikaci „Kalkulačka“ - na formuláři jsou umístěna tlačítka pro zadávání číslic, znaménka, desetinné čárky a základních matematických operací. Operandy a výsledky zobrazujte pomocí Label umístěného na Panel.
Řešení - 1. část: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmKalkulacka a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::FormCreate(TObject *Sender) { this->Caption = "Kalkula čka"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; pnlDisplej->Caption = ""; pnlDisplej->Color = clSkyBlue; pnlDisplej->BevelInner = bvLowered; pnlDisplej->BevelOuter = bvLowered; pnlDisplej->BevelWidth = 3; lblDisplej->Height = 25; lblDisplej->Width = 220; lblDisplej->AutoSize = false; lblDisplej->Alignment = taRightJustify; lblDisplej->Font->Color = clRed; lblDisplej->Font->Size = 15; lblDisplej->Caption = "0";
VY_32_INOVACE_EL_9_14 //barva labelu se vezme od barvy rodi čovské komponenty (panel) //(vlastnost ParentColor labelu musí být true) //také lze nastavit label průhledný (vlastnost Transparent na true) btn0->Caption = "0"; btn1->Caption = "1"; btn2->Caption = "2"; btn3->Caption = "3"; btn4->Caption = "4"; btn5->Caption = "5"; btn6->Caption = "6"; btn7->Caption = "7"; btn8->Caption = "8"; btn9->Caption = "9"; btnC->Caption = "C"; btnTecka->Caption = "."; btnZnamenko->Caption = "+/-"; btnScitani->Caption = "+"; btnOdcitani->Caption = "-"; btnNasobeni->Caption = "*"; btnDeleni->Caption = "/"; btnVypocet->Caption = "="; btn0->Font->Size = 15; btn1->Font->Size = 15; btn2->Font->Size = 15; btn3->Font->Size = 15; btn4->Font->Size = 15; btn5->Font->Size = 15; btn6->Font->Size = 15; btn7->Font->Size = 15; btn8->Font->Size = 15; btn9->Font->Size = 15; btnC->Font->Size = 15; btnTecka->Font->Size = 15; btnZnamenko->Font->Size = 15; btnScitani->Font->Size = 15; btnOdcitani->Font->Size = 15; btnNasobeni->Font->Size = 15; btnDeleni->Font->Size = 15; btnVypocet->Font->Size = 15; //pro velikost písma bychom měli deklarovat konstantu: //const int velikost = 15; nebo #define velikost 15) //btn0->Font->Size = velikost; atd. //také lze nastavit velikost písma na rodi čovské komponentě (form): //this->Font->Size = 15; //(vlastnost ParentFont tla čítek musí být true) } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_15
Digitální učební materiál Kalkulačka - ukázka funkční aplikace (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_15 Anotace: Postup vytvoření ukázkové funkční aplikace „Kalkulačka“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_15 Řešení - 2. část: Vygenerujte funkce k událostem OnClick pro btn0 až btn9. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------bool tecka = false; //true - bylo stisknuto Te čka bool vypocet = false; //true - bylo stisknuto Výpo čet bool smazat = false; //true - bude se nulovat displej char operace = '?'; //typ operace (? - ještě nebyl zadán) double predchozi_cislo = 0.0; //pro výpo čet double cislo = 0.0; //pro výpo čet char stara_operace; //pro druhý výpo čet double stare_cislo; //pro druhý výpo čet //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn0Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") //zde bychom měli kontrolovat délku textu: //(u editu je vlastnost MaxLength, u labelu je nutné použít funkci) //if (lblDisplej->Caption.Length() < 19) lblDisplej->Caption = lblDisplej->Caption + "0"; else lblDisplej->Caption = "0"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn1Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "1"; else lblDisplej->Caption = "1"; btnVypocet->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_15 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn2Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "2"; else lblDisplej->Caption = "2"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn3Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "3"; else lblDisplej->Caption = "3"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn4Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "4"; else lblDisplej->Caption = "4"; btnVypocet->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_15 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn5Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "5"; else lblDisplej->Caption = "5"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn6Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "6"; else lblDisplej->Caption = "6"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn7Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "7"; else lblDisplej->Caption = "7"; btnVypocet->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_15 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn8Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "8"; else lblDisplej->Caption = "8"; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn9Click(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") lblDisplej->Caption = lblDisplej->Caption + "9"; else lblDisplej->Caption = "9"; btnVypocet->SetFocus(); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_16
Digitální učební materiál Kalkulačka - ukázka funkční aplikace (3. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_16 Anotace: Postup vytvoření ukázkové funkční aplikace „Kalkulačka“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_16 Řešení - 3. část: Vygenerujte funkce k událostem OnClick pro btnC, btnTecka, btnZnamenko, btnScitani, btnOdcitani, btnNasobeni a btnDeleni. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnCClick(TObject *Sender) { lblDisplej->Caption = "0"; tecka = false; vypocet = false; smazat = false; operace = '?'; predchozi_cislo = 0.0; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnTeckaClick(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (!tecka) { lblDisplej->Caption = lblDisplej->Caption + ","; tecka = true; } btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnZnamenkoClick(TObject *Sender) { vypocet = false; if (lblDisplej->Caption != "0") //podmínka být nemusí, v bin. kódu -0 = +0 lblDisplej->Caption = FloatToStr(-(StrToFloat(lblDisplej->Caption))); btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnScitaniClick(TObject *Sender) { vypocet = false; btnVypocetClick(this); vypocet = false; smazat = true; operace = '+'; predchozi_cislo = StrToFloat(lblDisplej->Caption); btnVypocet->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_16 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnOdcitaniClick(TObject *Sender) { vypocet = false; btnVypocetClick(this); vypocet = false; smazat = true; operace = '-'; predchozi_cislo = StrToFloat(lblDisplej->Caption); btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnNasobeniClick(TObject *Sender) { vypocet = false; btnVypocetClick(this); vypocet = false; smazat = true; operace = '*'; predchozi_cislo = StrToFloat(lblDisplej->Caption); btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnDeleniClick(TObject *Sender) { vypocet = false; btnVypocetClick(this); vypocet = false; smazat = true; operace = '/'; predchozi_cislo = StrToFloat(lblDisplej->Caption); btnVypocet->SetFocus(); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnVypocet a OnKeyPress pro btnVypocet. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_16 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnVypocetClick(TObject *Sender) { if (!vypocet) { try { cislo = StrToFloat(lblDisplej->Caption); stara_operace = operace; stare_cislo = cislo; switch (operace) { case '+' : cislo = predchozi_cislo + cislo; break; case '-' : cislo = predchozi_cislo - cislo; break; case '*' : cislo = predchozi_cislo * cislo; break; case '/' : cislo = predchozi_cislo / cislo; break; } lblDisplej->Caption = FloatToStr(cislo); } catch (...) { Application->MessageBox("Ve výpo čtu došlo k fatální chybě !!!", "Error", MB_OK + MB_ICONERROR); btnCClick(this); return; } vypocet = true; smazat = true; operace = '?'; predchozi_cislo = cislo; } else { try { cislo = StrToFloat(lblDisplej->Caption); //je také v if, nelze vysunout z try switch (stara_operace) { case '+' : cislo = cislo + stare_cislo; break; case '-' : cislo = cislo - stare_cislo; break; case '*' : cislo = cislo * stare_cislo; break; case '/' : cislo = cislo / stare_cislo; break; } lblDisplej->Caption = FloatToStr(cislo); } catch (...) { Application->MessageBox("Ve výpo čtu došlo k fatální chybě !!!", "Error", MB_OK + MB_ICONERROR); btnCClick(this); return; } vypocet = true; //lze vynechat smazat = true; //je také v if, lze vysunout } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_16 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnVypocetKeyPress(TObject *Sender, char &Key) { unsigned char znak = Key; switch (znak) { case 48 : btn0Click(this); break; case 49 : btn1Click(this); break; case 50 : btn2Click(this); break; case 51 : btn3Click(this); break; case 52 : btn4Click(this); break; case 53 : btn5Click(this); break; case 54 : btn6Click(this); break; case 55 : btn7Click(this); break; case 56 : btn8Click(this); break; case 57 : btn9Click(this); break; case 27 : btnCClick(this); break; case 44 : btnTeckaClick(this); break; case 43 : btnScitaniClick(this); break; case 45 : btnOdcitaniClick(this); break; case 42 : btnNasobeniClick(this); break; case 47 : btnDeleniClick(this); break; case 13 : btnVypocetClick(this); break; } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_17
Digitální učební materiál Kalkulačka - ukázka funkční aplikace (4. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_17 Anotace: Postup vytvoření ukázkové funkční aplikace „Kalkulačka“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_17 Řešení - 4. část: V řešení popsaném v předchozích částech se často opakují velmi podobné části programu (viz. např. btn0Click až btn9Click). Porovnejte toto řešení s následujícím - zde se využívá (TObject *Sender), což je ukazatel na objekt, který danou událost vyvolal. Také jsou zde vytvořeny dvě vlastní funkce a místo volání obsluhy události OnClick je použita metoda Click(), která událost simuluje. //-----------------------------------------------------------------------const int velikost = 15; //výška textu v komponentách bool tecka = false; //true - bylo stisknuto Te čka bool vypocet = false; //true - bylo stisknuto Výpo čet bool smazat = false; //true - bude se nulovat displej char operace = '?'; //typ operace (? - ještě nebyl zadán) double predchozi_cislo = 0.0; //pro výpo čet double cislo = 0.0; //pro výpo čet char stara_operace; //pro druhý výpo čet double stare_cislo; //pro druhý výpo čet //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::FormCreate(TObject *Sender) { this->Caption = "Kalkula čka"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; this->Font->Size = velikost; pnlDisplej->Caption = ""; pnlDisplej->Color = clSkyBlue; pnlDisplej->BevelInner = bvLowered; pnlDisplej->BevelOuter = bvLowered; pnlDisplej->BevelWidth = 3; lblDisplej->Height = 25; lblDisplej->Width = 220; lblDisplej->AutoSize = false; lblDisplej->Alignment = taRightJustify; lblDisplej->Font->Color = clRed; lblDisplej->Caption = "0"; btn0->Caption = "0"; btn1->Caption = "1"; btn2->Caption = "2"; btn3->Caption = "3"; btn4->Caption = "4"; btn5->Caption = "5"; btn6->Caption = "6"; btn7->Caption = "7"; btn8->Caption = "8"; btn9->Caption = "9"; btnC->Caption = "C"; btnTecka->Caption = "."; btnZnamenko->Caption = "+/-"; btnScitani->Caption = "+"; btnOdcitani->Caption = "-"; btnNasobeni->Caption = "*"; btnDeleni->Caption = "/"; btnVypocet->Caption = "="; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_17 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::stisk_cislice(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (lblDisplej->Caption != "0") { if (lblDisplej->Caption.Length() < 19) lblDisplej->Caption = lblDisplej->Caption + ((TButton*)Sender)->Caption; //celý AnsiString } else lblDisplej->Caption = ((TButton*)Sender)->Caption; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::stisk_operace(TObject *Sender) { vypocet = false; btnVypocet->Click(); vypocet = false; smazat = true; operace = ((TButton*)Sender)->Caption[1]; //z AnsiString vezme char predchozi_cislo = StrToFloat(lblDisplej->Caption); btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn0Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn1Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn2Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn3Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn4Click(TObject *Sender) { stisk_cislice(Sender); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_17 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn5Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn6Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn7Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn8Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btn9Click(TObject *Sender) { stisk_cislice(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnCClick(TObject *Sender) { lblDisplej->Caption = "0"; tecka = false; vypocet = false; smazat = false; operace = '?'; predchozi_cislo = 0.0; btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnTeckaClick(TObject *Sender) { vypocet = false; if (smazat) { lblDisplej->Caption = "0"; tecka = false; smazat = false; } if (!tecka) { lblDisplej->Caption = lblDisplej->Caption + ","; tecka = true; } btnVypocet->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnZnamenkoClick(TObject *Sender) { vypocet = false; lblDisplej->Caption = FloatToStr(-(StrToFloat(lblDisplej->Caption))); btnVypocet->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_17 //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnScitaniClick(TObject *Sender) { stisk_operace(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnOdcitaniClick(TObject *Sender) { stisk_operace(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnNasobeniClick(TObject *Sender) { stisk_operace(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnDeleniClick(TObject *Sender) { stisk_operace(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnVypocetClick(TObject *Sender) { try { cislo = StrToFloat(lblDisplej->Caption); if (!vypocet) { stara_operace = operace; stare_cislo = cislo; switch (operace) { case '+' : cislo = predchozi_cislo + cislo; break; case '-' : cislo = predchozi_cislo - cislo; break; case '*' : cislo = predchozi_cislo * cislo; break; case '/' : cislo = predchozi_cislo / cislo; break; } vypocet = true; operace = '?'; predchozi_cislo = cislo; } else { switch (stara_operace) { case '+' : cislo = cislo + stare_cislo; break; case '-' : cislo = cislo - stare_cislo; break; case '*' : cislo = cislo * stare_cislo; break; case '/' : cislo = cislo / stare_cislo; break; } } lblDisplej->Caption = FloatToStr(cislo); smazat = true; }
VY_32_INOVACE_EL_9_17 catch (...) { Application->MessageBox("Ve výpo čtu došlo k fatální chybě !!!", "Error", MB_OK + MB_ICONERROR); btnCClick(this); return; } } //-----------------------------------------------------------------------void __fastcall TfrmKalkulacka::btnVypocetKeyPress(TObject *Sender, char &Key) { unsigned char znak = Key; switch (znak) { case 48 : btn0->Click(); break; case 49 : btn1->Click(); break; case 50 : btn2->Click(); break; case 51 : btn3->Click(); break; case 52 : btn4->Click(); break; case 53 : btn5->Click(); break; case 54 : btn6->Click(); break; case 55 : btn7->Click(); break; case 56 : btn8->Click(); break; case 57 : btn9->Click(); break; case 27 : btnC->Click(); break; case 44 : btnTecka->Click(); break; case 43 : btnScitani->Click(); break; case 45 : btnOdcitani->Click(); break; case 42 : btnNasobeni->Click(); break; case 47 : btnDeleni->Click(); break; case 13 : btnVypocet->Click(); break; } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_9_18
Digitální učební materiál Rodná čísla - ukázka funkční aplikace (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_18 Anotace: Postup vytvoření ukázkové funkční aplikace „Rodná čísla“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_18 Příprava: Seznamte se nejdříve důkladně s pravidly pro tvorbu rodných čísel. Např. na webu Wikipedie (http://cs.wikipedia.org) je uvedeno: Prvních šest číslic popisuje datum narození ve formátu rrmmdd (např. 701020 označuje datum narození 20. října 1970), přičemž ženy mají k měsíci připočteno 50 (tzn. 706020 označuje ženu narozenou 20. října 1970). Od roku 2004 (zákonem č. 53/2004 Sb.) je zavedena možnost v případě, že jsou v nějaký den vyčerpána všechna platná čtyřčíslí, použít alternativní rodné číslo, u kterého mají muži k číslu měsíce přičteno 20 a ženy 70. Zbytek rodného čísla (tzv. koncovka) odlišuje dvě fyzické osoby stejného pohlaví narozené ve stejný den a zpravidla se odděluje lomítkem. Pro osoby narozené do 31. 12.1953 včetně za lomítkem následovaly právě jen tři cifry, pro osoby narozené od 1.1.1954 přibyla čtvrtá číslice (tu mají v rodném čísle i osoby narozené před rokem 1954, kterým bylo rodné číslo přidělováno dodatečně, např. při získání občanství), která slouží ke kontrole platnosti jako kontrolní číslice. Čtvrté číslo se doplní tak, aby celé rodné číslo bylo beze zbytku dělitelné jedenácti (tzv. modulo); na posledním místě rodného čísla je tak zbytek po dělení devítimístného rodného čísla číslem jedenáct. (Dělitelnost jedenácti lze snadno zkontrolovat i zpaměti: kritériem dělitelnosti jedenácti je rozdíl součtu cifer na sudých a lichých místech a jeho dělitelnost jedenácti, např. u čísla 736028/5163 je součet číslic na lichých místech 7 + 6 + 2 + 5 + 6 = 26, součet číslic na sudých místech 3 + 0 + 8 + 1 + 3 = 15, rozdíl 26 − 15 = 11 je dělitelný jedenácti, takže celé rodné číslo je dělitelné jedenácti a tedy formálně platné). Z tohoto pravidla existuje výjimka: pokud je zbytek po dělení devítimístného čísla roven deseti (a neexistuje žádná kontrolní číslice, která by splňovala předchozí podmínku), jako kontrolní číslice se použije nula (a celé rodné číslo pak dělitelné jedenácti není). Například: RČ 840501/1330: 840501133 mod 11 = 10 (a 8405011330 mod 11 = 1). Tato výjimka však byla použita jen zhruba u 1000 RČ, přidělování takových rodných čísel bylo roku 1985 podle interního předpisu FSÚ Č. Vk. 2898/1985 ukončeno; není však vyloučeno, že se v minimálním počtu vyskytla i po tomto roce. Jelikož je rok narození v rodném čísle uveden pouze za pomoci svých dvou posledních čísel a tudíž nelze odlišit století a tisíciletí, rodné číslo může přestat být roku 2054 jednoznačným identifikátorem. Do té doby lze rodná čísla osob narozených před 1. lednem 1954 resp. po tomto datu poznat podle jejich délky (viz též problém Y2K). Předpokládá se však, že do té doby bude nahrazeno zcela jiným identifikátorem, případně zavedena vhodná modifikace. Zadání: Vytvořte aplikaci „Rodná čísla“ - na formuláři je umístěn MaskEdit pro zadání rodného čísla. Stisknutím tlačítka se provede podrobná kontrola správnosti zadaného rodného čísla a zobrazí se datum narození, den narození a počet dní od narození.
VY_32_INOVACE_EL_9_18
Řešení - 1. část: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmRodnaCisla a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmRodnaCisla::FormCreate(TObject *Sender) { this->Caption = "RČ (1955 - 2049)"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; lblRodneCislo->Caption = "Rodné č íslo :"; medRodneCislo->EditMask = "000000C0000;0;*"; medRodneCislo->Text = ""; btnKontrola->Caption = "Kontrola"; btnKontrola->Default = true; lblDatum->Caption = "Datum narození :"; edtDatum->Clear(); edtDatum->ReadOnly = true; lblDen->Caption = "Den narození :"; edtDen->Clear(); edtDen->ReadOnly = true; lblPocet->Caption = "Po čet dní od narození :"; edtPocet->Clear(); edtPocet->ReadOnly = true; } //------------------------------------------------------------------------
Program uložte a přeložte. Vytvořte vlastní funkce kontrola_rok, kontrola_mesic a kontrola_den. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_18 //-----------------------------------------------------------------------short TfrmRodnaCisla::kontrola_rok(short rok) { short ok_rok; //správně pro narozené 1955 až 1999: if ((rok > 54) && (rok < 100)) ok_rok = rok + 1900; else { //správně pro narozené 2000 až 2049: if (rok < 50) ok_rok = rok + 2000; //chyba: else ok_rok = -1; } return ok_rok; } //-----------------------------------------------------------------------short TfrmRodnaCisla::kontrola_mesic(short mesic) { short ok_mesic; //správně chlapci: if ((mesic > 0) && (mesic < 13)) ok_mesic = mesic; else { //správně dívky: if ((mesic > 50) && (mesic < 63)) ok_mesic = mesic - 50; //chyba: else ok_mesic = -1; } return ok_mesic; } //-----------------------------------------------------------------------short TfrmRodnaCisla::kontrola_den(short den, short mesic, short rok) { short dnu_mesice[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //p ř estupné roky (2000 není p ř estupný): if (((rok % 4) == 0) && (rok != 2000)) dnu_mesice[1] = 29; short ok_den; //správně: if ((den > 0) && (den <= dnu_mesice[mesic - 1])) ok_den = den; //chyba: else ok_den = -1; return ok_den; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_19
Digitální učební materiál Rodná čísla - ukázka funkční aplikace (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_19 Anotace: Postup vytvoření ukázkové funkční aplikace „Rodná čísla“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_19 Řešení - 2. část: Vygenerujte funkci k události OnClick pro btnKontrola. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmRodnaCisla::btnKontrolaClick(TObject *Sender) { AnsiString rodne_cislo[11]; //kontrola vyplnění: if (medRodneCislo->EditText == "***********") { Application->MessageBox("Není vyplněno rodné č íslo !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); return; } else for (short i = 0; i < 11; i++) rodne_cislo[i] = (AnsiString) medRodneCislo->EditText[i + 1]; //kontrola lomítko: if (rodne_cislo[6] != "/") { edtDatum->Clear(); edtDen->Clear(); edtPocet->Clear(); Application->MessageBox("Chybně zadaný oddělovací znak / !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); medRodneCislo->SelStart = 6; medRodneCislo->SelLength = 1; return; } //kontrola rok: short vstup_rok = (StrToInt(rodne_cislo[0]) * 10) + StrToInt(rodne_cislo[1]); short vystup_rok = kontrola_rok(vstup_rok); if (vystup_rok == -1) { edtDatum->Clear(); edtDen->Clear(); edtPocet->Clear(); Application->MessageBox("Chybně zadaný rok narození !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); medRodneCislo->SelStart = 0; medRodneCislo->SelLength = 1; return; }
VY_32_INOVACE_EL_9_19 //kontrola měsíc: short vstup_mesic = (StrToInt(rodne_cislo[2]) * 10) + StrToInt(rodne_cislo[3]); short vystup_mesic = kontrola_mesic(vstup_mesic); if (vystup_mesic == -1) { edtDatum->Clear(); edtDen->Clear(); edtPocet->Clear(); Application->MessageBox("Chybně zadaný měsíc narození !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); medRodneCislo->SelStart = 2; medRodneCislo->SelLength = 1; return; } //kontrola den: short vstup_den = (StrToInt(rodne_cislo[4]) * 10) + StrToInt(rodne_cislo[5]); short vystup_den = kontrola_den(vstup_den, vystup_mesic, vystup_rok); if (vystup_den == -1) { edtDatum->Clear(); edtDen->Clear(); edtPocet->Clear(); Application->MessageBox("Chybně zadaný den narození !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); medRodneCislo->SelStart = 4; medRodneCislo->SelLength = 1; return; } //kontrola dělitelnost 11: long cislo = StrToInt(rodne_cislo[0]) * 100000000 + StrToInt(rodne_cislo[1]) * 10000000 + StrToInt(rodne_cislo[2]) * 1000000 + StrToInt(rodne_cislo[3]) * 100000 + StrToInt(rodne_cislo[4]) * 10000 + StrToInt(rodne_cislo[5]) * 1000 + StrToInt(rodne_cislo[7]) * 100 + StrToInt(rodne_cislo[8]) * 10 + StrToInt(rodne_cislo[9]); if (((cislo % 11) % 10) != (StrToInt(rodne_cislo[10]))) { edtDatum->Clear(); edtDen->Clear(); edtPocet->Clear(); Application->MessageBox("Rodné č íslo musí být dělitelné 11 !!!", "Chyba v rodném č ísle", MB_OK + MB_ICONERROR); medRodneCislo->SetFocus(); medRodneCislo->SelStart = 0; medRodneCislo->SelLength = 1; return; }
VY_32_INOVACE_EL_9_19 //datum narození: edtDatum->Text = IntToStr(vystup_den) + "." + IntToStr(vystup_mesic) + "." + IntToStr(vystup_rok); //den narození: TDate den_narozeni = StrToDate(edtDatum->Text); short den_v_tydnu = den_narozeni.DayOfWeek(); switch (den_v_tydnu) { case 1: edtDen->Text = "neděle"; break; case 2: edtDen->Text = "pondělí"; break; case 3: edtDen->Text = "úterý"; break; case 4: edtDen->Text = "st ř eda"; break; case 5: edtDen->Text = " čtvrtek"; break; case 6: edtDen->Text = "pátek"; break; case 7: edtDen->Text = "sobota"; break; } //po čet dní od narození: TDate den_dnes = Now(); int rozdil = den_dnes - den_narozeni; edtPocet->Text = IntToStr(rozdil); medRodneCislo->SetFocus(); medRodneCislo->SelectAll(); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_9_20
Digitální učební materiál Prohlížeč barev - ukázka funkční aplikace
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_9 - Programování v jazyce C++ pro 3. ročník DUM: VY_32_INOVACE_EL_9_20 Anotace: Postup vytvoření ukázkové funkční aplikace „Prohlížeč barev“ Autor: Ing. Petr Neumann Škola: Střední průmyslová škola, Hronov, Hostovského 910 Obor: Počítačové řídicí systémy Předmět: Programování Ročník: 3. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_9_20 Příprava: Seznamte se nejdříve důkladně s používáním barev v počítačích a zejména s jejich zadáváním v jazyce C++. Např. na webu Wikipedie (http://cs.wikipedia.org) je uvedeno: Zastoupení a míchání aditivních barev. Promítání základních barev světla na obrazovku ukazuje aditivní barvy kdy se dvě překrývají; kombinace všech tří červené, zelené a modré v odpovídající intenzitě vytváří bílou. RGB barevný model je aditivní barevný model, ve kterém je smícháno společně červené, zelené a modré světlo různými cestami k reprodukci obsáhlého pole barev. Název modelu pochází z počátečních písmen tří aditivních primárních barev – červené, zelené a modré. Název RGBA je použit k označení červené, zelené, modré a Alpha kanálu. Toto není rozdílový barevný model, ale reprezentativní. Alpha kanál je použit pro průhlednost. RGB model sám o sobě nedefinuje co je míněno červenou, modrou a zelenou kolorometricky, a tak výsledek smíchaní složek není přesný, ale relativní. Když bude přesně definována chromatičnost barevných složek, potom se barevný model stává absolutním barevným prostorem, takovým jako sRGB nebo Adobe RGB, viz RGB barevný prostor. Tento článek diskutuje o společném systému všech rozdílových barevných prostorů, které používají RGB barevný model užitý v nějaké metodě nebo nějaké historické, v barevné podobě produkované, elektronické technologii. Každá barva je udána mohutností tří základních barev – komponent (červené - red, zelené – green a modré – blue, odtud RGB). Základní barvy mají vlnové délky 630, 530 a 450 nm. Mohutnost se udává buď v procentech (dekadický způsob) nebo podle použité barevné hloubky jako určitý počet bitů vyhrazených pro barevnou komponentu (pro 8 bitů na komponentu je rozsah hodnot 0 – 255, pro 16 bitů na komponentu je rozsah hodnot 0 – 65535), přičemž čím větší je mohutnost, tím s vyšší intenzitou se barva komponenty zobrazuje. Jednotková krychle. Stejné úseky na osách neodpovídají stejným jasům. Model RGB je možné zobrazit jako krychli, ve které každá z kolmých hran udává škálu mohutností barevných složek. Potom libovolný bod se souřadnicemi (r,g,b) v této krychli udává hodnotu výsledné barvy. Čím větší je součet mohutností, tím světlejší je výsledná barva. 0brácený systém je subtraktivní systém CMYK, kdy pro každou jeho barvu (kromě černé) je použita směs dvou základních barev RGB s maximální mohutností. Každá barva je tedy složena z různého poměru základních složek RGB (red = červená, green = zelená a blue = modrá). Konkrétní barva je zapsána jako číslo typu int = celé číslo o velikosti čtyři byte. Nejvyšší byte je pro určení barvy nevýznamný, další tři byte pak udávají zastoupení jednotlivých složek RGB v barvě. Pro určení množství jedné složky je tedy k dispozici jeden byte (rozsah hodnot 0 až 255), z toho lze odvodit celkový počet možných barev (drobné rozdíly však monitor není schopen zobrazit a ani lidské oko je nerozliší). Zapsat konkrétní barvu v jazyce C++ je možné např. těmito způsoby: a) jako hodnotu výčtového typu - clRed b) jako hexadecimální číslo - 0x0000FF c) pomocí funkce RGB - (TColor) RGB(255, 0, 0)
VY_32_INOVACE_EL_9_20 Zadání: Vytvořte aplikaci „Prohlížeč barev“ - na formuláři jsou umístěny tři ScrollBar, kterými lze nastavit poměr základních složek RGB. Barva každé základní složky se zobrazuje na příslušném Panel. Stisknutím tlačítka se zobrazí výsledná barva na GroupBox (popisek GroupBox zobrazte vždy v inverzní barvě). Na procvičení dialogu MessageDlg přidejte do aplikace ještě CheckBox, který bude při zatržení nabízet po stisknutí tlačítka zbytečnou otázku.
Řešení: Spusťte vývojové prostředí, upravte velikost formuláře a umístěte na něj komponenty. Zdrojový kód a projekt uložte. Pojmenujte všechny komponenty. Vygenerujte funkci k události OnCreate pro frmBarvy a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmBarvy::FormCreate(TObject *Sender) { this->Caption = "Prohlíže č barev"; this->Constraints->MinHeight = 226; this->Constraints->MinWidth = 407;
VY_32_INOVACE_EL_9_20 lblNadpis1->Caption = "Nastavení č ervené složky :"; lblNadpis2->Caption = "Nastavení zelené složky :"; lblNadpis3->Caption = "Nastavení modré složky :"; btnBarva->Caption = "Zobraz barvu"; chbZprava->Caption = "Obtěžovat ?"; chbZprava->Checked = true; gbxBarva->Caption = "Výsledná barva :"; sbrRed->Min = 0; sbrRed->Max = 255; sbrRed->Position = 0; sbrRed->SmallChange = 1; sbrRed->LargeChange = 10; lblRed->Caption = IntToStr(sbrRed->Position) + " = " + IntToStr(sbrRed->Position * 100 / 255) + " %"; pnlRed->Caption = ""; pnlRed->Color = (TColor) RGB(sbrRed->Position, 0, 0); sbrGreen->Min = 0; sbrGreen->Max = 255; sbrGreen->Position = 0; sbrGreen->SmallChange = 1; sbrGreen->LargeChange = 10; lblGreen->Caption = IntToStr(sbrGreen->Position) + " = " + IntToStr(sbrGreen->Position * 100 / 255) + " %"; pnlGreen->Caption = ""; pnlGreen->Color = (TColor) RGB(0, sbrGreen->Position, 0); sbrBlue->Min = 0; sbrBlue->Max = 255; sbrBlue->Position = 0; sbrBlue->SmallChange = 1; sbrBlue->LargeChange = 10; lblBlue->Caption = IntToStr(sbrBlue->Position) + " = " + IntToStr(sbrBlue->Position * 100 / 255) + " %"; pnlBlue->Caption = ""; pnlBlue->Color = (TColor) RGB(0, 0, sbrBlue->Position); } //------------------------------------------------------------------------
Program uložte a přeložte. Vytvořte vlastní funkci slozeni_barvy. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmBarvy::slozeni_barvy(void) { gbxBarva->Color = (TColor) RGB(sbrRed->Position, sbrGreen->Position, sbrBlue->Position); gbxBarva->Font->Color = (TColor) RGB(255 - sbrRed->Position, 255 - sbrGreen->Position, 255 - sbrBlue->Position); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnChange pro sbrRed, sbrGreen a sbrBlue a OnClick pro btnBarva. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_9_20 //-----------------------------------------------------------------------void __fastcall TfrmBarvy::sbrRedChange(TObject *Sender) { lblRed->Caption = IntToStr(sbrRed->Position) + " = " + IntToStr(sbrRed->Position * 100 / 255) + " %"; pnlRed->Color = (TColor) RGB(sbrRed->Position, 0, 0); } //-----------------------------------------------------------------------void __fastcall TfrmBarvy::sbrGreenChange(TObject *Sender) { lblGreen->Caption = IntToStr(sbrGreen->Position) + " = " + IntToStr(sbrGreen->Position * 100 / 255) + " %"; pnlGreen->Color = (TColor) RGB(0, sbrGreen->Position, 0); } //-----------------------------------------------------------------------void __fastcall TfrmBarvy::sbrBlueChange(TObject *Sender) { lblBlue->Caption = IntToStr(sbrBlue->Position) + " = " + IntToStr(sbrBlue->Position * 100 / 255) + " %"; pnlBlue->Color = (TColor) RGB(0, 0, sbrBlue->Position); } //-----------------------------------------------------------------------void __fastcall TfrmBarvy::btnBarvaClick(TObject *Sender) { if (chbZprava->Checked) { if (MessageDlg("Opravdu chcete zobrazit barvu ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes) slozeni_barvy(); } else slozeni_barvy(); } //------------------------------------------------------------------------
Program uložte a přeložte.