VY_32_INOVACE_EL_10_01
Digitální učební materiál Seznamy - použití v aplikaci (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_01 Anotace: Postup vytvoření aplikace na procvičení práce se seznamy, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_01 Příprava: Seznamy slouží uživateli aplikace jako nabídka možností, ze kterých může jednu položku vybrat. Většina seznamů má položky typu strings = řetězce znaků (texty), proto u nich lze používat stejné metody jako u komponenty Memo. Seznamy umožňují položky nejen vybírat, ale také setřídit podle abecedy, editovat, přidávat a odebírat. Mezi nejčastěji používané komponenty patří: a) ListBox - jednoduchý textový seznam, nejdůležitějšími vlastnostmi jsou Items, ItemIndex a Sorted b) ComboBox - rozbalovací textový seznam c) CheckListBox - textový seznam s možností zaškrtávání položek d) ListView - prohlížeč seznamů Zadání - 1. část: Vytvořte aplikaci „Seznamy1“ - na formuláři jsou umístěny dva různé typy komponent pro práci se seznamy (aplikace slouží k vytváření seznamu skladeb od různých interpretů). Stisknutím jednoho tlačítka lze přidat do seznamu skladbu, druhým tlačítkem lze přidat interpreta, třetím tlačítkem lze odstranit skladbu a čtvrtým tlačítkem lze odstranit interpreta.
Ř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 frmSeznamy1 a zapište do ní tento text:
VY_32_INOVACE_EL_10_01 //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::FormCreate(TObject *Sender) { this->Caption = "Seznamy1"; this->Constraints->MinHeight = 284; this->Constraints->MinWidth = 518; lblNadpis1->Caption = "Skladba :"; lblNadpis2->Caption = "Interpret :"; edtPolozka->Text = "Láska je láska"; btnPridat1->Caption = "P ř idat skladbu"; btnPridat1->Width = 100; btnPridat2->Caption = "P ř idat interpreta"; btnPridat2->Width = 100; btnOdstranit1->Caption = "Odstranit skladbu"; btnOdstranit1->Width = 100; btnOdstranit2->Caption = "Odstranit interpreta"; btnOdstranit2->Width = 100; chbRadit->Caption = "Řadit položky"; chbRadit->Checked = true; lbxSeznam1->Columns = 1; lbxSeznam1->Sorted = true; cbxSeznam2->Style = csSimple; cbxSeznam2->Height = 185; cbxSeznam2->Sorted = true; cbxSeznam2->Items->Add("Lucie Bílá"); cbxSeznam2->Items->Add("Karel Gott"); cbxSeznam2->Items->Add("Helena Vondrá čková"); cbxSeznam2->Text = ""; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OClick pro btnPridat1, btnPridat2, btnOdstranit1, btnOdstranit2 a chbRadit. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::btnPridat1Click(TObject *Sender) { if (edtPolozka->Text == "") ShowMessage("Zadej název skladby !!!"); else { if (cbxSeznam2->Text == "") ShowMessage("Vyber jméno interpreta !!!"); else { lbxSeznam1->Items->Add(edtPolozka->Text + " - " + cbxSeznam2->Text); edtPolozka->Clear(); } } edtPolozka->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_01 //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::btnPridat2Click(TObject *Sender) { if (cbxSeznam2->Text == "") ShowMessage("Zadej jméno interpreta !!!"); else { cbxSeznam2->Items->Add(cbxSeznam2->Text); cbxSeznam2->Text = ""; } cbxSeznam2->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::btnOdstranit1Click(TObject *Sender) { lbxSeznam1->Items->Delete(lbxSeznam1->ItemIndex); } //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::btnOdstranit2Click(TObject *Sender) { cbxSeznam2->Items->Delete(cbxSeznam2->ItemIndex); } //-----------------------------------------------------------------------void __fastcall TfrmSeznamy1::chbRaditClick(TObject *Sender) { lbxSeznam1->Sorted = chbRadit->Checked; cbxSeznam2->Sorted = chbRadit->Checked; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_02
Digitální učební materiál Seznamy - použití v aplikaci (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_02 Anotace: Postup vytvoření aplikace na procvičení práce se seznamy, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_02 Zadání - 2. část: Vytvořte aplikaci „Seznamy2“ - na formuláři jsou umístěny různé komponenty pro práci se seznamy (aplikace slouží k procvičení práce se seznamy). Stisknutím jednoho tlačítka lze načíst soubor „zaznamy.txt“, druhým tlačítkem lze záznamy rozdělit do dvou seznamů a třetím tlačítkem lze záznamy strukturovaně zobrazit.
VY_32_INOVACE_EL_10_02 Řešení - 2. čá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 frmSeznamy2 a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmSeznamy2::FormCreate(TObject *Sender) { this->Caption = "Seznamy2"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; memZaznam->Clear(); lbxZaznam1->Columns = 1; lbxZaznam1->Sorted = false; lbxZaznam2->Columns = 1; lbxZaznam2->Sorted = false; lvwZaznam->ViewStyle = vsReport; lvwZaznam->ShowColumnHeaders = true; lvwZaznam->Width = 244; //lvwZaznam->Columns->Add(); lvwZaznam->Column[0]->Caption = " č. :"; lvwZaznam->Column[0]->Width = 40; //lvwZaznam->Columns->Add(); lvwZaznam->Column[1]->Caption = "typ záznamu :"; lvwZaznam->Column[1]->Width = 100; //lvwZaznam->Columns->Add(); lvwZaznam->Column[2]->Caption = "obsah záznamu :"; lvwZaznam->Column[2]->Width = 100; btnNacti->Caption = "Na čti soubor do Memo"; btnRozdel->Caption = "Rozděl záznamy do ListBoxů"; btnZobraz->Caption = "Zobraz záznamy v ListView"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnNacti, btnRozdel a btnZobraz. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmSeznamy2::btnNactiClick(TObject *Sender) { memZaznam->Lines->LoadFromFile("zaznamy.txt"); btnRozdel->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_02 //-----------------------------------------------------------------------void __fastcall TfrmSeznamy2::btnRozdelClick(TObject *Sender) { lbxZaznam1->Clear(); lbxZaznam2->Clear(); for (int i = 0; i < memZaznam->Lines->Count; i += 2) { lbxZaznam1->Items->Add(memZaznam->Lines->Strings[i]); lbxZaznam2->Items->Add(memZaznam->Lines->Strings[i + 1]); } btnZobraz->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmSeznamy2::btnZobrazClick(TObject *Sender) { lvwZaznam->Clear(); for (int i = 0; i < lbxZaznam1->Count; i++) { lvwZaznam->Items->Add(); lvwZaznam->Items->Item[i]->Caption = IntToStr(i + 1); lvwZaznam->Items->Item[i]->SubItems->Add(lbxZaznam1->Items->Strings[i]); lvwZaznam->Items->Item[i]->SubItems->Add(lbxZaznam2->Items->Strings[i]); } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_03
Digitální učební materiál Menu (uživatelské nabídky) - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_03 Anotace: Postup vytvoření aplikace na procvičení práce s uživatelskými nabídkami, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_03 Příprava: Uživatelské nabídky jsou běžnou součástí většiny aplikací. Slouží ke komunikaci uživatele s aplikací, pomocí položek nabídky sděluje uživatel aplikaci, co od ní požaduje. Položek je několik typů - příkazy, nastavení, dialogy a vnoření (submenu). Při tvorbě menu je třeba dodržovat několik zásad, např. řídit se zvyklostmi uživatele. K vytvoření menu se používá komponenta MainMenu, přes kterou spustíme MenuDesigner. Z mnoha vlastností položek zpravidla využíváme pouze Name a Caption. Zadání: Vytvořte aplikaci „Menu“ - na formuláři jsou umístěny tři Label, tři Button a tři Panel. Pomocí položek menu lze třemi různými způsoby jednotlivé komponenty skrýt a zase ukázat.
Ř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 frmMenu a zapište do ní tento text:
VY_32_INOVACE_EL_10_03 //-----------------------------------------------------------------------void __fastcall TfrmMenu::FormCreate(TObject *Sender) { this->Caption = "Menu"; this->Constraints->MinHeight = 186; this->Constraints->MinWidth = 289; lblNadpis1->Caption = "Nadpis 1"; lblNadpis2->Caption = "Nadpis 2"; lblNadpis3->Caption = "Nadpis 3"; btnTlacitko1->Caption = "Tla čítko 1"; btnTlacitko2->Caption = "Tla čítko 2"; btnTlacitko3->Caption = "Tla čítko 3"; pnlPanel1->Caption = "Panel 1"; pnlPanel2->Caption = "Panel 2"; pnlPanel3->Caption = "Panel 3"; pmnPanel1->Checked = true; pmnPanel2->Checked = true; pmnPanel3->Checked = true; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro jednotlivé položky menu. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnUkazN1Click(TObject *Sender) { lblNadpis1->Visible = true; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnUkazN2Click(TObject *Sender) { lblNadpis2->Visible = true; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnUkazN3Click(TObject *Sender) { lblNadpis3->Visible = true; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnSkryjN1Click(TObject *Sender) { lblNadpis1->Visible = false; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnSkryjN2Click(TObject *Sender) { lblNadpis2->Visible = false; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnSkryjN3Click(TObject *Sender) { lblNadpis3->Visible = false; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_03 //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnZmenaT1Click(TObject *Sender) { btnTlacitko1->Visible = ! btnTlacitko1->Visible; if (btnTlacitko1->Visible) pmnZmenaT1->Caption = "Skryj Tla čítko 1"; else pmnZmenaT1->Caption = "Ukaž Tla čítko 1"; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnZmenaT2Click(TObject *Sender) { btnTlacitko2->Visible = ! btnTlacitko2->Visible; if (btnTlacitko2->Visible) pmnZmenaT2->Caption = "Skryj Tla čítko 2"; else pmnZmenaT2->Caption = "Ukaž Tla čítko 2"; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnZmenaT3Click(TObject *Sender) { btnTlacitko3->Visible = ! btnTlacitko3->Visible; if (btnTlacitko3->Visible) pmnZmenaT3->Caption = "Skryj Tla čítko 3"; else pmnZmenaT3->Caption = "Ukaž Tla čítko 3"; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnPanel1Click(TObject *Sender) { pnlPanel1->Visible = ! pnlPanel1->Visible; pmnPanel1->Checked = ! pmnPanel1->Checked; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnPanel2Click(TObject *Sender) { pnlPanel2->Visible = ! pnlPanel2->Visible; pmnPanel2->Checked = ! pmnPanel2->Checked; } //-----------------------------------------------------------------------void __fastcall TfrmMenu::pmnPanel3Click(TObject *Sender) { pnlPanel3->Visible = ! pnlPanel3->Visible; pmnPanel3->Checked = ! pmnPanel3->Checked; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_04
Digitální učební materiál Časovače a další komponenty - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_04 Anotace: Postup vytvoření aplikace na procvičení práce s časovači, tabulkami, ukazateli průběhu, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_04 Příprava: Timer - časovač slouží k vykonání nějaké akce po uplynutí nastavené doby nebo k pravidelnému opakování nějaké akce v nastaveném intervalu, nejdůležitějšími vlastnostmi jsou Enabled a Interval. Další použité komponenty: StringGrid - mřížka (tabulka) s texty, nejdůležitějšími vlastnostmi jsou Cells = buňky (jedná se o dvourozměrné pole), Cols (columns) = sloupce a Rows = řádky CGauge - ukazatel průběhu se zobrazením procent, nejdůležitějšími vlastnostmi jsou MinValue, MaxValue a Progress ProgressBar - ukazatel průběhu (jiná varianta), nejdůležitějšími vlastnostmi jsou Min, Max a Position Zadání: Vytvořte aplikaci „Časovače“ - na formuláři jsou umístěna čtyři tlačítka, která spouští čtyři časovače. Každý časovač ovládá jinou akci - blikající tabulka, mizející nápis, hodiny a rostoucí průběhy.
VY_32_INOVACE_EL_10_04 Ř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 frmCasovace a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmCasovace::FormCreate(TObject *Sender) { this->Caption = "Časova če"; this->Constraints->MinHeight = 276; this->Constraints->MinWidth = 680; btnMrizka->Caption = "M ř ížka"; btnPrekvapeni->Caption = "P ř ekvapení"; btnHodiny->Caption = "Hodiny"; btnPrubeh->Caption = "Průběh"; tmrMrizka->Enabled = false; tmrMrizka->Interval = 400; tmrPrekvapeni->Enabled = false; tmrPrekvapeni->Interval = 3000; tmrHodiny->Enabled = false; tmrHodiny->Interval = 1000; tmrPrubeh->Enabled = false; tmrPrubeh->Interval = 100; sgrMrizka->ColCount = 3; sgrMrizka->RowCount = 6; sgrMrizka->FixedCols = 0; sgrMrizka->FixedRows = 3; sgrMrizka->FixedColor = clYellow; lblPrekvapeni->Caption = "Vážený programátore, č tete mne rychle, protože za 3 sekundy zase zmizím, Váš Label"; lblPrekvapeni->Visible = false; pnlHodiny->Caption = "Reálný č as"; pnlHodiny->Font->Color = clRed; pnlHodiny->Font->Size = 24; cggPrubeh->BackColor = clBtnFace; cggPrubeh->ForeColor = clLime; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnMrizka, btnPekvapeni, btnHodiny, btnPrubeh a OnTimer pro tmrMrizka, tmrPekvapeni, tmrHodiny, tmrPrubeh. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmCasovace::btnMrizkaClick(TObject *Sender) { tmrMrizka->Enabled = true; for (int i = 0; i < sgrMrizka->ColCount; i++) for (int j = 0; j < sgrMrizka->RowCount; j++) sgrMrizka->Cells[i][j] = "s." + IntToStr(i) + ", ř ." + IntToStr(j); btnPrekvapeni->SetFocus(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_04 //-----------------------------------------------------------------------void __fastcall TfrmCasovace::tmrMrizkaTimer(TObject *Sender) { if (sgrMrizka->FixedColor == clYellow) sgrMrizka->FixedColor = clWindow; else sgrMrizka->FixedColor = clYellow; } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::btnPrekvapeniClick(TObject *Sender) { tmrPrekvapeni->Enabled = true; lblPrekvapeni->Visible = true; btnHodiny->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::tmrPrekvapeniTimer(TObject *Sender) { tmrPrekvapeni->Enabled = false; lblPrekvapeni->Visible = false; } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::btnHodinyClick(TObject *Sender) { pnlHodiny->Caption = TimeToStr(Time()); tmrHodiny->Enabled = true; btnPrubeh->SetFocus(); } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::tmrHodinyTimer(TObject *Sender) { pnlHodiny->Caption = TimeToStr(Time()); } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::btnPrubehClick(TObject *Sender) { cggPrubeh->Progress = 0; pbrPrubeh->Position = 0; //WinAPI funkce: SendMessage(pbrPrubeh->Handle, PBM_SETBARCOLOR, 0, clLime); tmrPrubeh->Enabled = true; } //-----------------------------------------------------------------------void __fastcall TfrmCasovace::tmrPrubehTimer(TObject *Sender) { cggPrubeh->Progress++; pbrPrubeh->Position++; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_05
Digitální učební materiál Stavový řádek - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_05 Anotace: Postup vytvoření aplikace na procvičení práce se stavovým řádkem, jeho použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_05 Příprava: Stavový řádek je běžnou součástí většiny aplikací. Slouží k informování uživatele o důležitých událostech a aktuálních nastaveních. K zobrazení informací slouží vlastnost Panels->Items = panely->položky. Položky jsou typu strings = řetězce znaků (texty). K vytvoření stavového řádku se používá komponenta StatusBar, přes kterou spustíme Editing. Z mnoha vlastností položek zpravidla využíváme pouze Text a Width. Zadání: Vytvořte aplikaci „Stavový řádek“ - na formuláři je umístěn Panel. Pomocí položek menu lze nastavovat jeho vlastnosti, všechna nastavení se zobrazují na stavovém řádku.
VY_32_INOVACE_EL_10_05 Ř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 frmStav a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmStav::FormCreate(TObject *Sender) { this->Caption = "Stavový ř ádek"; this->BorderStyle = bsSingle; pnlPanel->Caption = "Panel"; pnlPanel->Height = 50; pnlPanel->Width = 50; pnlPanel->Left = 25; pnlPanel->Top = 25; stbStatus->Panels->Items[0]->Text = "Align: None"; stbStatus->Panels->Items[0]->Width = 75; stbStatus->Panels->Items[1]->Text = "Color: BtnFace"; stbStatus->Panels->Items[1]->Width = 100; stbStatus->Panels->Items[2]->Text = "Font-Color: WindowText"; stbStatus->Panels->Items[2]->Width = 150; stbStatus->Panels->Items[3]->Text = "Font-Size: 8"; stbStatus->Panels->Items[3]->Width = 75; stbStatus->Panels->Items[4]->Text = "Font-Style: None"; stbStatus->Panels->Items[4]->Width = 100; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[5]->Width = 75; stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro jednotlivé položky menu. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnNoneClick(TObject *Sender) { pnlPanel->Align = alNone; stbStatus->Panels->Items[0]->Text = "Align: None"; pnlPanel->Height = 50; pnlPanel->Width = 50; pnlPanel->Left = 25; pnlPanel->Top = 25; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnTopClick(TObject *Sender) { pnlPanel->Align = alTop; stbStatus->Panels->Items[0]->Text = "Align: Top"; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_05 //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnBottomClick(TObject *Sender) { pnlPanel->Align = alBottom; stbStatus->Panels->Items[0]->Text = "Align: Bottom"; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnLeftClick(TObject *Sender) { pnlPanel->Align = alLeft; stbStatus->Panels->Items[0]->Text = "Align: Left"; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnRightClick(TObject *Sender) { pnlPanel->Align = alRight; stbStatus->Panels->Items[0]->Text = "Align: Right"; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnClientClick(TObject *Sender) { pnlPanel->Align = alClient; stbStatus->Panels->Items[0]->Text = "Align: Client"; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnBtnFaceClick(TObject *Sender) { pnlPanel->Color = clBtnFace; stbStatus->Panels->Items[1]->Text = "Color: BtnFace"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnRedClick(TObject *Sender) { pnlPanel->Color = clRed; stbStatus->Panels->Items[1]->Text = "Color: Red"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnGreenClick(TObject *Sender) { pnlPanel->Color = clGreen; stbStatus->Panels->Items[1]->Text = "Color: Green"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnBlueClick(TObject *Sender) { pnlPanel->Color = clBlue; stbStatus->Panels->Items[1]->Text = "Color: Blue"; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_05 //-----------------------------------------------------------------------void __fastcall TfrmStav::smnWindowTextClick(TObject *Sender) { pnlPanel->Font->Color = clWindowText; stbStatus->Panels->Items[2]->Text = "Font-Color: WindowText"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smnRedClick(TObject *Sender) { pnlPanel->Font->Color = clRed; stbStatus->Panels->Items[2]->Text = "Font-Color: Red"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smnGreenClick(TObject *Sender) { pnlPanel->Font->Color = clGreen; stbStatus->Panels->Items[2]->Text = "Font-Color: Green"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smnBlueClick(TObject *Sender) { pnlPanel->Font->Color = clBlue; stbStatus->Panels->Items[2]->Text = "Font-Color: Blue"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smn8Click(TObject *Sender) { pnlPanel->Font->Size = 8; stbStatus->Panels->Items[3]->Text = "Font-Size: 8"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smn16Click(TObject *Sender) { pnlPanel->Font->Size = 16; stbStatus->Panels->Items[3]->Text = "Font-Size: 16"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smn32Click(TObject *Sender) { pnlPanel->Font->Size = 32; stbStatus->Panels->Items[3]->Text = "Font-Size: 32"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smnNoneClick(TObject *Sender) { pnlPanel->Font->Style = pnlPanel->Font->Style >> fsBold >> fsItalic; stbStatus->Panels->Items[4]->Text = "Font-Style: None"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::smnBoldClick(TObject *Sender) { pnlPanel->Font->Style = pnlPanel->Font->Style << fsBold >> fsItalic; stbStatus->Panels->Items[4]->Text = "Font-Style: Bold"; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_05 //-----------------------------------------------------------------------void __fastcall TfrmStav::smnItalicClick(TObject *Sender) { pnlPanel->Font->Style = pnlPanel->Font->Style >> fsBold << fsItalic; stbStatus->Panels->Items[4]->Text = "Font-Style: Italic"; } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnH50Click(TObject *Sender) { pnlPanel->Height = 50; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnH75Click(TObject *Sender) { pnlPanel->Height = 75; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnH100Click(TObject *Sender) { pnlPanel->Height = 100; stbStatus->Panels->Items[5]->Text = "Height: " + IntToStr(pnlPanel->Height); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnW50Click(TObject *Sender) { pnlPanel->Width = 50; stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnW100Click(TObject *Sender) { pnlPanel->Width = 100; stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //-----------------------------------------------------------------------void __fastcall TfrmStav::pmnW150Click(TObject *Sender) { pnlPanel->Width = 150; stbStatus->Panels->Items[6]->Text = "Width: " + IntToStr(pnlPanel->Width); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_06
Digitální učební materiál Soubory - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_06 Anotace: Postup vytvoření aplikace na procvičení práce se soubory, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_06 Příprava: Soubory slouží k ukládání dat, proto jsou důležitou součástí většiny aplikací. K základním činnostem se soubory patří čtení a zápis dat, soubor se ale musí nejprve otevřít a potom zase zavřít. Samotná data jsou často uložena v podobě prostého (neformátovaného) textu (soubory typu txt). Pro práci se soubory máme k dispozici například tyto možnosti: a) použití knihovny funkcí standardních vstupů a výstupů (stdio.h) - pak lze použít funkce fopen(), fscanf() a fclose() b) použití některé z komponent, která má metody pro práci se soubory - pak lze použít metody LoadFromFile() a SaveToFile() c) použití systémových funkcí, které využívají „handle“ souboru - pak lze použít funkce FileExists(), FileCreate(), FileOpen(), FileRead(), FileWrite(), FileSeek() a FileClose() d) použití standardních dialogů OpenDialog a SaveDialog - probereme v další části Zadání - 1. část: Vytvořte aplikaci „Soubory1“ - na formuláři jsou umístěny dvě komponenty Memo, do kterých se stisknutím tlačítka načte obsah souboru „data.txt“ pokaždé jiným způsobem.
Ř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 frmSoubory1 a zapište do ní tento text:
VY_32_INOVACE_EL_10_06 //-----------------------------------------------------------------------void __fastcall TfrmSoubory1::FormCreate(TObject *Sender) { this->Caption = "Soubory1"; this->BorderStyle = bsSingle; btnSoubor1->Caption = "Load"; btnSoubor2->Caption = "Load"; memSoubor1->Clear(); memSoubor2->Clear(); } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnSoubor1 a btnSoubor2. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------#include <stdio.h> //-----------------------------------------------------------------------void __fastcall TfrmSoubory1::btnSoubor1Click(TObject *Sender) { FILE *soubor; int cislo; soubor = fopen("data.txt", "r"); memSoubor1->Clear(); while (fscanf(soubor, "%d", &cislo) != EOF) memSoubor1->Lines->Add(IntToStr(cislo)); fclose(soubor); } //-----------------------------------------------------------------------void __fastcall TfrmSoubory1::btnSoubor2Click(TObject *Sender) { memSoubor2->Lines->LoadFromFile("data.txt"); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_06 Zadání - 2. část: Vytvořte aplikaci „Soubory2“ - na formuláři je umístěna komponenta ListBox, do které se stisknutím tlačítka načte obsah souboru „osoby.txt“ opět jiným způsobem. Další tlačítka umožňují editovat seznam a uložit ho do souboru.
Řešení - 2. čá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 frmSoubory2 a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::FormCreate(TObject *Sender) { this->Caption = "Soubory2"; this->BorderStyle = bsSingle; btnNacti->Caption = "Na čti soubor"; btnPridej->Caption = "P ř idej osobu"; btnOdeber->Caption = "Odeber osobu"; btnUloz->Caption = "Ulož soubor"; btnVymaz->Caption = "Vymaž okno"; lbxSeznam->Sorted = true; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnNacti, btnPridej, btnOdeber, btnUloz a btnVymaz. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_10_06 //-----------------------------------------------------------------------#define osoby "osoby.txt" //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::btnNactiClick(TObject *Sender) { int handle; if (!FileExists(osoby)) ShowMessage("Soubor neexistuje !!!"); else { handle = FileOpen(osoby, fmOpenRead); if (handle == -1) ShowMessage("Soubor nelze otev ř ít pro č tení !!!"); else { int delka = FileSeek(handle, 0, 2); PChar buffer = StrAlloc(delka + 1); FileSeek(handle, 0, 0); int precteno = FileRead(handle, buffer, delka); if (precteno < delka) ShowMessage("Soubor nebyl na čten celý !!!"); else { buffer[delka] = '\0'; lbxSeznam->Items->Text = AnsiString(buffer); } StrDispose(buffer); FileClose(handle); } } } //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::btnPridejClick(TObject *Sender) { AnsiString prijmeni = "***"; AnsiString krestni = "***"; AnsiString rok = "***"; AnsiString prace = "***"; if (InputQuery("P ř idej osobu", "Napiš p ř íjmení :", prijmeni)) if (InputQuery("P ř idej osobu", "Napiš k ř estní jméno :", krestni)) if (InputQuery("P ř idej osobu", "Napiš rok narození :", rok)) if (InputQuery("P ř idej osobu", "Napiš zaměstnání :", prace)) lbxSeznam->Items->Add(prijmeni + " " + krestni + " (" + rok + ") - " + prace); } //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::btnOdeberClick(TObject *Sender) { lbxSeznam->Items->Delete(lbxSeznam->ItemIndex); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_06 //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::btnUlozClick(TObject *Sender) { int handle; if (!FileExists(osoby)) { handle = FileCreate(osoby); if (handle == -1) ShowMessage("Soubor nelze vytvo ř it !!!"); } else { handle = FileOpen(osoby, fmOpenWrite); if (handle == -1) ShowMessage("Soubor nelze otev ř ít pro zápis !!!"); } FileSeek(handle, 0, 0); int delka = lbxSeznam->Items->Text.Length(); int zapsano = FileWrite(handle, lbxSeznam->Items->Text.c_str(), delka); if (zapsano < delka) ShowMessage("Soubor nebyl zapsán celý !!!"); FileClose(handle); } //-----------------------------------------------------------------------void __fastcall TfrmSoubory2::btnVymazClick(TObject *Sender) { lbxSeznam->Clear(); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_07
Digitální učební materiál Standardní dialogy - použití v aplikaci (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_07 Anotace: Postup vytvoření aplikace na procvičení práce se standardními dialogy, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_07 Příprava: Standardní dialogy jsou běžnou součástí většiny aplikací. Slouží ke komunikaci mezi uživatelem a aplikací, používají se tedy jako tzv. uživatelské rozhraní. Mezi nejčastěji používané dialogy patří: OpenDialog, SaveDialog, OpenPictureDialog, SavePictureDialog, FontDialog, ColorDialog, PrinterSetupDialog, PrintDialog, FindDialog a ReplaceDialog. Nejdůležitějšími vlastnostmi dialogů OpenDialog a SaveDialog jsou FileName, Filter a Options, dialogu FontDialog Font a dialogu ColorDialog Color, nejdůležitější metodou všech dialogů je Execute(). Zadání: Vytvořte aplikaci „Dialogy“ - na formuláři je umístěna komponenta RichEdit, která umožňuje práci s formátovaným textem. Pomocí položek menu lze otevřít nebo uložit soubor, změnit font nebo barvu písma, najít nebo nahradit část textu. Vše se bude zadávat pomocí standardních dialogů.
VY_32_INOVACE_EL_10_07 Ř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 frmDialogy a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmDialogy::FormCreate(TObject *Sender) { this->Caption = "Dialogy"; this->BorderStyle = bsSingle; redText->Align = alClient; redText->PlainText = false; redText->Clear(); dlgOtevri->DefaultExt = "rtf"; dlgOtevri->Filter = "Soubory RTF (*.rtf)|*.rtf|Všechny soubory (*.*)|*.*"; dlgOtevri->Options >> ofHideReadOnly; dlgUloz->DefaultExt = "rtf"; dlgUloz->Filter = "Soubory RTF (*.rtf)|*.rtf|Všechny soubory (*.*)|*.*"; dlgNajdi->Options << frMatchCase; dlgNahrad->Options << frMatchCase; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro všechny položky menu. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnOtevriClick(TObject *Sender) { if (dlgOtevri->Execute()) { this->Caption = dlgOtevri->FileName; redText->Lines->LoadFromFile(dlgOtevri->FileName); redText->ReadOnly = dlgOtevri->Options.Contains(ofReadOnly); } } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnUlozClick(TObject *Sender) { if (dlgUloz->Execute()) { this->Caption = dlgUloz->FileName; redText->Lines->SaveToFile(dlgUloz->FileName); } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_07 //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnFontClick(TObject *Sender) { if (redText->SelLength > 0) { dlgFont->Font->Assign(redText->SelAttributes); if (dlgFont->Execute()) redText->SelAttributes->Assign(dlgFont->Font); } else { dlgFont->Font->Assign(redText->DefAttributes); if (dlgFont->Execute()) redText->DefAttributes->Assign(dlgFont->Font); } } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnBarvaClick(TObject *Sender) { if (redText->SelLength > 0) { dlgBarva->Color = redText->SelAttributes->Color; if (dlgBarva->Execute()) redText->SelAttributes->Color = dlgBarva->Color; } else { dlgBarva->Color = redText->DefAttributes->Color; if (dlgBarva->Execute()) redText->DefAttributes->Color = dlgBarva->Color; } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_08
Digitální učební materiál Standardní dialogy - použití v aplikaci (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_08 Anotace: Postup vytvoření aplikace na procvičení práce se standardními dialogy, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_08 Řešení - 2. část: Problematiku vyhledávání a nahrazování části textu nevyřeší dialog (ten slouží jen ke komunikaci), tuto činnost je nutné naprogramovat. Vygenerujte funkce k událostem OnClick pro pmnNajdi a pmnNahrad, OnFind pro dlgNajdi a dlgNahrad a OnReplace pro dlgNahrad. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnNajdiClick(TObject *Sender) { dlgNajdi->FindText = redText->SelText; dlgNajdi->Execute(); } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::dlgNajdiFind(TObject *Sender) { int zacatek_hledani; //pozice znaku, od kterého za číná hledání int zbyva_do_konce; //po čet znaků, které zbývají do konce souboru int nalezena_pozice; //pozice prvního znaku nalezeného textu if (redText->SelLength > 0) zacatek_hledani = redText->SelStart + redText->SelLength; else zacatek_hledani = 0; zbyva_do_konce = redText->Text.Length() - zacatek_hledani; nalezena_pozice = redText->FindText(dlgNajdi->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase); if (nalezena_pozice != -1) { redText->SetFocus(); redText->SelStart = nalezena_pozice; redText->SelLength = dlgNajdi->FindText.Length(); } else ShowMessage("Ukon čeno hledání v souboru - zvolený text nebyl nalezen !!!"); } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::pmnNahradClick(TObject *Sender) { dlgNahrad->FindText = redText->SelText; dlgNahrad->Execute(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_08 //-----------------------------------------------------------------------void __fastcall TfrmDialogy::dlgNahradFind(TObject *Sender) { int zacatek_hledani; //pozice znaku, od kterého za číná hledání int zbyva_do_konce; //po čet znaků, které zbývají do konce souboru int nalezena_pozice; //pozice prvního znaku nalezeného textu if (redText->SelLength > 0) zacatek_hledani = redText->SelStart + redText->SelLength; else zacatek_hledani = 0; zbyva_do_konce = redText->Text.Length() - zacatek_hledani; nalezena_pozice = redText->FindText(dlgNahrad->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase); if (nalezena_pozice != -1) { redText->SetFocus(); redText->SelStart = nalezena_pozice; redText->SelLength = dlgNahrad->FindText.Length(); } else ShowMessage("Ukon čeno hledání v souboru - zvolený text nebyl nalezen !!!"); } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::dlgNahradReplace(TObject *Sender) //funkce nahradit nebo nahradit vše se rozliší podle: //dlgNahrad->Options.Contains(frReplace) = false nebo true //zde není ř ešeno { if (redText->SelLength > 0) { redText->SelText = dlgNahrad->ReplaceText; redText->SetFocus(); redText->SelStart = redText->SelStart - dlgNahrad->ReplaceText.Length(); redText->SelLength = dlgNahrad->ReplaceText.Length(); } else ShowMessage("Nebyl ozna čen text pro nahrazení !!!"); } //---------------------------------------------------------------------
Program uložte a přeložte. Řešení - 3. část: V řešení popsaném v předchozích částech se opakují velmi podobné části programu (viz. dlgNajdiFind a dlgNahradFind). 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é je zde vytvořena vlastní funkce najdi(). //-----------------------------------------------------------------------void __fastcall TfrmDialogy::dlgNajdiFind(TObject *Sender) { najdi(Sender); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_08 //-----------------------------------------------------------------------void __fastcall TfrmDialogy::dlgNahradFind(TObject *Sender) { najdi(Sender); } //-----------------------------------------------------------------------void __fastcall TfrmDialogy::najdi(TObject *Sender) //(TFindDialog*)Sender funguje pro FindDialog i pro ReplaceDialog { int zacatek_hledani; //pozice znaku, od kterého za číná hledání int zbyva_do_konce; //po čet znaků, které zbývají do konce souboru int nalezena_pozice; //pozice prvního znaku nalezeného textu if (redText->SelLength > 0) zacatek_hledani = redText->SelStart + redText->SelLength; else zacatek_hledani = 0; zbyva_do_konce = redText->Text.Length() - zacatek_hledani; nalezena_pozice = redText->FindText(((TFindDialog*)Sender)->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase); if (nalezena_pozice != -1) { redText->SetFocus(); redText->SelStart = nalezena_pozice; redText->SelLength = ((TFindDialog*)Sender)->FindText.Length(); } else ShowMessage("Ukon čeno hledání v souboru - zvolený text nebyl nalezen !!!"); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_09
Digitální učební materiál Komponenty pro lepší vzhled aplikace (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_09 Anotace: Postup vytvoření aplikace na procvičení práce s komponentami pro lepší vzhled aplikace a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_09 Příprava: Pro lepší (profesionálnější) vzhled aplikace můžeme použít například tyto komponenty: Splitter - rozdělení pracovní plochy na několik částí Bevel - oddělovací čáry, nejdůležitějšími vlastnostmi jsou Shape a Style ScrollBox - posuvná oblast Animate - animace, nejdůležitějšími vlastnostmi jsou FileName, CommonAVI a Active SpeedButton - základní prvek panelu nástrojů, nejdůležitějšími vlastnostmi jsou GroupIndex, Down a AllowAllUp PageControl - záložky Zadání - 1. část: Vytvořte aplikaci „Vzhled1“ - na formuláři jsou umístěny komponenty Splitter, Bevel, ScrollBox a Animate. Aplikace musí umožnit různé způsoby použití těchto komponent.
Ř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 frmVzhled1 a zapište do ní tento text:
VY_32_INOVACE_EL_10_09 //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::FormCreate(TObject *Sender) { this->Caption = "Vzhled1"; this->BorderStyle = bsSingle; this->Position = poScreenCenter; pnlPanel1->Caption = ""; pnlPanel1->Align = alLeft; splCara1->Align = alLeft; splCara1->Width = 2; pnlPanel3->Caption = ""; pnlPanel3->Align = alRight; splCara2->Align = alRight; splCara2->Width = 2; pnlPanel2->Caption = ""; pnlPanel2->Align = alClient; bvlRamecek->Shape = bsBottomLine; bvlRamecek->Style = bsLowered; rgpShape->Caption = "Shape"; rgpShape->Columns = 1; rgpShape->Items->Add("bsBottomLine"); rgpShape->Items->Add("bsBox"); rgpShape->Items->Add("bsFrame"); rgpShape->Items->Add("bsLeftLine"); rgpShape->Items->Add("bsRightLine"); rgpShape->Items->Add("bsSpacer"); rgpShape->Items->Add("bsTopLine"); rgpShape->ItemIndex = 0; rgpStyle->Caption = "Style"; rgpStyle->Columns = 1; rgpStyle->Items->Add("bsLowered"); rgpStyle->Items->Add("bsRaised"); rgpStyle->ItemIndex = 0; btnTlac1->Caption btnTlac2->Caption btnTlac3->Caption btnTlac4->Caption btnTlac5->Caption btnTlac6->Caption btnTlac7->Caption btnTlac8->Caption btnTlac9->Caption
= = = = = = = = =
"Tla čítko "Tla čítko "Tla čítko "Tla čítko "Tla čítko "Tla čítko "Tla čítko "Tla čítko "Konec";
1"; 2"; 3"; 4"; 5"; 6"; 7"; 8";
//anmPohyb->FileName = "*.avi"; anmPohyb->CommonAVI = aviFindComputer; btnStart->Caption = "Start"; btnStop->Caption = "Stop"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro rgpShape, rgpStyle, btnTlac9, btnStart a btnStop. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_10_09 //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::rgpShapeClick(TObject *Sender) { switch (rgpShape->ItemIndex) { case 0 : bvlRamecek->Shape = bsBottomLine; break; case 1 : bvlRamecek->Shape = bsBox; break; case 2 : bvlRamecek->Shape = bsFrame; break; case 3 : bvlRamecek->Shape = bsLeftLine; break; case 4 : bvlRamecek->Shape = bsRightLine; break; case 5 : bvlRamecek->Shape = bsSpacer; break; case 6 : bvlRamecek->Shape = bsTopLine; break; } } //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::rgpStyleClick(TObject *Sender) { switch (rgpStyle->ItemIndex) { case 0 : bvlRamecek->Style = bsLowered; break; case 1 : bvlRamecek->Style = bsRaised; break; } } //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::btnTlac9Click(TObject *Sender) { Application->Terminate(); } //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::btnStartClick(TObject *Sender) { anmPohyb->Active = true; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled1::btnStopClick(TObject *Sender) { anmPohyb->Active = false; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_10
Digitální učební materiál Komponenty pro lepší vzhled aplikace (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_10 Anotace: Postup vytvoření aplikace na procvičení práce s komponentami pro lepší vzhled aplikace a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_10 Zadání - 2. část: Vytvořte aplikaci „Vzhled2“ - na formuláři je umístěna komponenta PageControl se třemi záložkami. Na poslední záložce jsou umístěny tři SpeedButton, které mohou fungovat jako tlačítka, spínače nebo přepínač. Jejich stav je signalizován také barvou tří panelů.
Řešení - 2. čá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 frmVzhled2 a zapište do ní tento text:
VY_32_INOVACE_EL_10_10 //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::FormCreate(TObject *Sender) { this->Caption = "Vzhled2"; this->BorderStyle = bsSingle; this->Position = poScreenCenter; sbtTlac1->Height = 25; sbtTlac1->Width = 25; sbtTlac1->NumGlyphs = 4; sbtTlac2->Height = 25; sbtTlac2->Width = 25; sbtTlac2->NumGlyphs = 4; sbtTlac3->Height = 25; sbtTlac3->Width = 25; sbtTlac3->NumGlyphs = 4; //původní nastavení: sbtTlac1->GroupIndex = 0; sbtTlac2->GroupIndex = 0; sbtTlac3->GroupIndex = 0; sbtTlac1->Down = false; sbtTlac2->Down = false; sbtTlac3->Down = false; sbtTlac1->AllowAllUp = false; sbtTlac2->AllowAllUp = false; sbtTlac3->AllowAllUp = false; pnlSignal1->Caption = ""; pnlSignal1->Height = 25; pnlSignal1->Width = 25; pnlSignal2->Caption = ""; pnlSignal2->Height = 25; pnlSignal2->Width = 25; pnlSignal3->Caption = ""; pnlSignal3->Height = 25; pnlSignal3->Width = 25; rbtPuvodni->Caption = "Původní"; rbtPuvodni->Checked = true; rbtTlacitka->Caption = "Tla čítka"; rbtSpinace->Caption = "Spína če"; rbtPrepinac->Caption = "P ř epína č "; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro rbtPuvodni, rbtTlacitka, rbtSpinace a rbtPrepinac a OnMouseDown, OnMouseUp a OnClick pro všechny tři SpeedButton. Do zdrojového kódu zapište tento text:
VY_32_INOVACE_EL_10_10 //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::rbtPuvodniClick(TObject *Sender) { sbtTlac1->GroupIndex = 0; sbtTlac2->GroupIndex = 0; sbtTlac3->GroupIndex = 0; sbtTlac1->Down = false; sbtTlac2->Down = false; sbtTlac3->Down = false; sbtTlac1->AllowAllUp = false; sbtTlac2->AllowAllUp = false; sbtTlac3->AllowAllUp = false; pnlSignal1->Color = clBtnFace; pnlSignal2->Color = clBtnFace; pnlSignal3->Color = clBtnFace; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::rbtTlacitkaClick(TObject *Sender) { sbtTlac1->GroupIndex = 0; sbtTlac2->GroupIndex = 0; sbtTlac3->GroupIndex = 0; sbtTlac1->Down = false; sbtTlac2->Down = false; sbtTlac3->Down = false; sbtTlac1->AllowAllUp = true; sbtTlac2->AllowAllUp = true; sbtTlac3->AllowAllUp = true; pnlSignal1->Color = clBtnFace; pnlSignal2->Color = clBtnFace; pnlSignal3->Color = clBtnFace; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::rbtSpinaceClick(TObject *Sender) { sbtTlac1->GroupIndex = 1; sbtTlac2->GroupIndex = 2; sbtTlac3->GroupIndex = 3; sbtTlac1->Down = false; sbtTlac2->Down = false; sbtTlac3->Down = false; sbtTlac1->AllowAllUp = true; sbtTlac2->AllowAllUp = true; sbtTlac3->AllowAllUp = true; pnlSignal1->Color = clBtnFace; pnlSignal2->Color = clBtnFace; pnlSignal3->Color = clBtnFace; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_10 //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::rbtPrepinacClick(TObject *Sender) { sbtTlac1->GroupIndex = 1; sbtTlac2->GroupIndex = 1; sbtTlac3->GroupIndex = 1; sbtTlac1->Down = true; sbtTlac2->Down = false; sbtTlac3->Down = false; sbtTlac1->AllowAllUp = true; sbtTlac2->AllowAllUp = true; sbtTlac3->AllowAllUp = true; pnlSignal1->Color = clYellow; pnlSignal2->Color = clBtnFace; pnlSignal3->Color = clBtnFace; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal1->Color = clYellow; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal2->Color = clYellow; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal3->Color = clYellow; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal1->Color = clBtnFace; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal2->Color = clBtnFace; } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac3MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (rbtPuvodni->Checked || rbtTlacitka->Checked) pnlSignal3->Color = clBtnFace; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_10 //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac1Click(TObject *Sender) { if (rbtSpinace->Checked || rbtPrepinac->Checked) { if (sbtTlac1->Down) pnlSignal1->Color = clYellow; else pnlSignal1->Color = clBtnFace; if (sbtTlac2->Down) pnlSignal2->Color = clYellow; else pnlSignal2->Color = clBtnFace; if (sbtTlac3->Down) pnlSignal3->Color = clYellow; else pnlSignal3->Color = clBtnFace; } } //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac2Click(TObject *Sender) { if (rbtSpinace->Checked || rbtPrepinac->Checked) { if (sbtTlac1->Down) pnlSignal1->Color = clYellow; else pnlSignal1->Color = clBtnFace; if (sbtTlac2->Down) pnlSignal2->Color = clYellow; else pnlSignal2->Color = clBtnFace; if (sbtTlac3->Down) pnlSignal3->Color = clYellow; else pnlSignal3->Color = clBtnFace; } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_10 //-----------------------------------------------------------------------void __fastcall TfrmVzhled2::sbtTlac3Click(TObject *Sender) { if (rbtSpinace->Checked || rbtPrepinac->Checked) { if (sbtTlac1->Down) pnlSignal1->Color = clYellow; else pnlSignal1->Color = clBtnFace; if (sbtTlac2->Down) pnlSignal2->Color = clYellow; else pnlSignal2->Color = clBtnFace; if (sbtTlac3->Down) pnlSignal3->Color = clYellow; else pnlSignal3->Color = clBtnFace; } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_11
Digitální učební materiál Klávesové zkratky - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_11 Anotace: Postup vytvoření aplikace na procvičení práce s klávesovými zkratkami, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_11 Příprava: Klávesové zkratky jsou běžnou součástí většiny aplikací. Obvykle se tvoří pomocí kombinace modifikační klávesy (Alt, Ctrl, Shift) a dalšího znaku. Slouží k rychlejšímu a pohodlnějšímu ovládání aplikace pomocí klávesnice. Při tvorbě klávesových zkratek je třeba dodržovat několik zásad, např. řídit se zvyklostmi uživatele. K vytvoření klávesových zkratek lze použít různé postupy (např. znak & ve vlastnosti Caption, vlastnost položek menu ShortCut apod.), pro volbu klávesových zkratek přímo uživatelem slouží komponenta HotKey. Zadání: Vytvořte aplikaci „Klávesové zkratky“ - na formuláři jsou umístěny komponenty ListView, HotKey a Button, dále je zde vytvořeno menu Soubor. Pomocí tlačítka lze jednotlivým položkám menu přiřadit klávesovou zkratku. Funkci položek menu řešte pro jednoduchost pouze zobrazením příslušné zprávy (informačního dialogu), pouze položka Konec bude plně funkční (včetně kontrolního dotazu).
Ř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 frmZkratky a zapište do ní tento text:
VY_32_INOVACE_EL_10_11 //-----------------------------------------------------------------------void __fastcall TfrmZkratky::FormCreate(TObject *Sender) { TListColumn *sloupec; TListItem *polozka; this->Caption = "Klávesové zkratky"; this->BorderStyle = bsSingle; this->Position = poScreenCenter; btnNastavit->Caption = "&Nastavit"; lvwVypis->HideSelection = false; lvwVypis->ReadOnly = true; lvwVypis->ViewStyle = vsReport; sloupec = lvwVypis->Columns->Add(); sloupec->Caption = "Menu"; sloupec->Width = 100; sloupec = lvwVypis->Columns->Add(); sloupec->Caption = "Zkratka"; sloupec->Width = 140; for (int i = 0; i < hmnSoubor->Count; i++) { polozka = lvwVypis->Items->Add(); polozka->Caption = hmnSoubor->Items[i]->Caption; polozka->SubItems->Add(ShortCutToText(hmnSoubor->Items[i]->ShortCut)); } lvwVypis->Items->Item[0]->Selected = true; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro lvwVypis, btnNastavit a pro všechny položky menu. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmZkratky::lvwVypisClick(TObject *Sender) { if (lvwVypis->Selected) htkZkratky->HotKey = TextToShortCut(lvwVypis->Selected->SubItems->Strings[0]); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::btnNastavitClick(TObject *Sender) { if (lvwVypis->Selected->Caption != "-") { lvwVypis->Selected->SubItems->Strings[0] = ShortCutToText(htkZkratky->HotKey); for (int i = 0; i < hmnSoubor->Count; i++) hmnSoubor->Items[i]->ShortCut = TextToShortCut(lvwVypis->Items->Item[i]->SubItems->Strings[0]); } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_11 //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnNovyClick(TObject *Sender) { Application->MessageBox("Soubor nový", "Informace", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnOtevritClick(TObject *Sender) { Application->MessageBox("Soubor otev ř ít", "Informace", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnUlozitClick(TObject *Sender) { Application->MessageBox("Soubor uložit", "Informace", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnUlozitJakoClick(TObject *Sender) { Application->MessageBox("Soubor uložit jako", "Informace", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnZavritClick(TObject *Sender) { Application->MessageBox("Soubor zav ř ít", "Informace", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void __fastcall TfrmZkratky::pmnKonecClick(TObject *Sender) { if(Application->MessageBox("Konec aplikace ?", "Otázka", MB_YESNO + MB_ICONQUESTION) == mrYes) Application->Terminate(); } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_12
Digitální učební materiál Počítačová grafika - použití v aplikaci (1. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_12 Anotace: Postup vytvoření aplikace na procvičení práce s počítačovou grafikou, její použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_12 Příprava: Počítačová grafika začíná kreslením jednoduchých geometrických obrazců pomocí myši. Události OnMouse... mají několik důležitých parametrů: Button - které tlačítko myši událost vyvolalo, Shift - která modifikační klávesa přitom byla stisknuta, X a Y - souřadnice kurzoru myši. Kreslit se dá na Canvas = plátno (vlastnost řady komponent) nebo lze použít některou grafickou komponentu (např. Image nebo Shape). Objekt Canvas má vlastnosti Brush = štětec (výplně geometrických obrazců) a Pen = pero (čáry a obrysy geometrických obrazců). Objekt Brush má vlastnosti Color a Style. Objekt Pen má vlastnosti Color, Mode, Style a Width. Pro kreslení základních geometrických obrazců lze využívat např. tyto metody: MoveTo() - počáteční bod čáry, LineTo() - koncový bod čáry, Ellipse() - elipsy a kruhy, Rectangle() - obdélníky a čtverce a TextOut() - texty. Pro práci s fotografiemi a podobnými obrázky lze využívat komponentu Image, její vlastnost Canvas a jeho vlastnost Pixels - jedná se o dvourozměrné pole, které procházíme bod po bodu pomocí dvou vnořených cyklů. Každý pixel = obrazový bod je zadán jeho barvou. Zadání - 1. část: Vytvořte aplikaci „Grafika1“ - na formuláři je umístěna komponenta Image, na které je vytvořen jednoduchý obrazec ze základních geometrických obrazců. Pomocí tlačítek myši lze na plátno kreslit další obrazce, při použití levého tlačítka mají obrazce jiný štětec a pero než při použití pravého tlačítka. Bez modifikačních kláves se vykreslují čtverce, s klávesou Shift kruhy, s klávesou Ctrl čárkované čáry z levého horního rohu a s klávesou Alt tečkované čáry z pravého dolního rohu.
VY_32_INOVACE_EL_10_12
Ř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 frmGrafika1 a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmGrafika1::FormCreate(TObject *Sender) { this->Caption = "Grafika1"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; kresli_pozadi(); } //------------------------------------------------------------------------
Program uložte a přeložte. Vytvořte vlastní funkci kresli_pozadi. Vygenerujte funkci k události OnMouseDown pro imgObraz. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmGrafika1::kresli_pozadi(void) { imgObraz->Canvas->Brush->Color = clSkyBlue; imgObraz->Canvas->FillRect( Rect(0, 0, imgObraz->Picture->Width, imgObraz->Picture->Height)); imgObraz->Canvas->Brush->Color = clYellow; imgObraz->Canvas->Pen->Color = clRed; imgObraz->Canvas->Pen->Style = psSolid; imgObraz->Canvas->Pen->Width = 5; imgObraz->Canvas->MoveTo(25, 50); imgObraz->Canvas->LineTo(25, 100); imgObraz->Canvas->Rectangle(50, 50, 100, 100); imgObraz->Canvas->MoveTo(125, 50); imgObraz->Canvas->LineTo(125, 100); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_12 //-----------------------------------------------------------------------void __fastcall TfrmGrafika1::imgObrazMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if ((!Shift.Contains(ssShift)) && (!Shift.Contains(ssCtrl)) && (!Shift.Contains(ssAlt))) { if (Button == mbLeft) { imgObraz->Canvas->Brush->Color = clLime; imgObraz->Canvas->Pen->Color = clBlue; imgObraz->Canvas->Pen->Style = psSolid; imgObraz->Canvas->Pen->Width = 2; imgObraz->Canvas->Rectangle(X - 10, Y - 10, X + 10, Y + 10); } if (Button == mbRight) { imgObraz->Canvas->Brush->Color = clAqua; imgObraz->Canvas->Pen->Color = clGreen; imgObraz->Canvas->Pen->Style = psSolid; imgObraz->Canvas->Pen->Width = 2; imgObraz->Canvas->Rectangle(X - 10, Y - 10, X + 10, Y + 10); } } if (Shift.Contains(ssShift)) { if (Button == mbLeft) { imgObraz->Canvas->Brush->Color = clLime; imgObraz->Canvas->Pen->Color = clBlue; imgObraz->Canvas->Pen->Style = psSolid; imgObraz->Canvas->Pen->Width = 2; imgObraz->Canvas->Ellipse(X - 10, Y - 10, X + 10, Y + 10); } if (Button == mbRight) { imgObraz->Canvas->Brush->Color = clAqua; imgObraz->Canvas->Pen->Color = clGreen; imgObraz->Canvas->Pen->Style = psSolid; imgObraz->Canvas->Pen->Width = 2; imgObraz->Canvas->Ellipse(X - 10, Y - 10, X + 10, Y + 10); } }
VY_32_INOVACE_EL_10_12 if (Shift.Contains(ssCtrl)) { if (Button == mbLeft) { imgObraz->Canvas->Pen->Color = clBlack; imgObraz->Canvas->Pen->Style = psDash; imgObraz->Canvas->Pen->Width = 1; imgObraz->Canvas->MoveTo(0, 0); imgObraz->Canvas->LineTo(X, Y); } if (Button == mbRight) { imgObraz->Canvas->Pen->Color = clFuchsia; imgObraz->Canvas->Pen->Style = psDash; imgObraz->Canvas->Pen->Width = 1; imgObraz->Canvas->MoveTo(0, 0); imgObraz->Canvas->LineTo(X, Y); } } if (Shift.Contains(ssAlt)) { if (Button == mbLeft) { imgObraz->Canvas->Pen->Color = clBlack; imgObraz->Canvas->Pen->Style = psDot; imgObraz->Canvas->Pen->Width = 1; imgObraz->Canvas->MoveTo(imgObraz->Width, imgObraz->Height); imgObraz->Canvas->LineTo(X, Y); } if (Button == mbRight) { imgObraz->Canvas->Pen->Color = clFuchsia; imgObraz->Canvas->Pen->Style = psDot; imgObraz->Canvas->Pen->Width = 1; imgObraz->Canvas->MoveTo(imgObraz->Width, imgObraz->Height); imgObraz->Canvas->LineTo(X, Y); } } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_13
Digitální učební materiál Počítačová grafika - použití v aplikaci (2. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_13 Anotace: Postup vytvoření aplikace na procvičení práce s počítačovou grafikou, její použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_13 Zadání - 2. část: Vytvořte aplikaci „Grafika2“ - na formuláři jsou umístěny tři záložky, na každé z nich je komponenta Image a Button. Pomocí tlačítek lze na každé záložce nakreslit jiný obrázek. Na první je plastický text, na druhé Lissajousův obrazec a na třetí barevný přechod od modré po zelenou.
Řešení - 2. čá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 frmGrafika2 a zapište do ní tento text:
VY_32_INOVACE_EL_10_13 //-----------------------------------------------------------------------void __fastcall TfrmGrafika2::FormCreate(TObject *Sender) { this->Caption = "Grafika2"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; btnOtevri->Caption = "Otev ř i"; btnTlac1->Caption = "Kresli"; btnTlac2->Caption = "Kresli"; btnTlac3->Caption = "Kresli"; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnOtevri, btnTlac1, btnTlac2 a btnTlac3. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------#include <math.h> #include "Grafika3.h" //-----------------------------------------------------------------------void __fastcall TfrmGrafika2::btnOtevriClick(TObject *Sender) { frmGrafika3->ShowModal(); } //-----------------------------------------------------------------------void __fastcall TfrmGrafika2::btnTlac1Click(TObject *Sender) { imgObr1->Canvas->Brush->Color = clGray; imgObr1->Canvas->Rectangle(0, 0, imgObr1->Width, imgObr1->Height); imgObr1->Canvas->Brush->Style = bsClear; imgObr1->Canvas->Font->Name = "Arial"; imgObr1->Canvas->Font->Size = 100; imgObr1->Canvas->Font->Style = imgObr1->Canvas->Font->Style << fsBold; imgObr1->Canvas->Font->Color = clBlack; imgObr1->Canvas->TextOut(33, 33, "Ahoj !"); imgObr1->Canvas->Font->Color = clWhite; imgObr1->Canvas->TextOut(27, 27, "Ahoj !"); imgObr1->Canvas->Font->Color = clGray; imgObr1->Canvas->TextOut(30, 30, "Ahoj !"); } //-----------------------------------------------------------------------void __fastcall TfrmGrafika2::btnTlac2Click(TObject *Sender) { imgObr2->Canvas->Brush->Color = clYellow; imgObr2->Canvas->Pen->Color = clRed; for (int i = 0; i < 360; i++) { int x = 95 + 85 * cos(2 * i * 2 * 3.14 / 360); //lze také: int x = 95 + 85 * cos(2 * i * 2 * M_PI / 360); //" čisté" ř ešení: int x = (int) (95 + 85 * cos(2 * i * 2 * M_PI / 360)); int y = 95 + 85 * sin(6 * i * 2 * 3.14 / 360); imgObr2->Canvas->Rectangle(x, y, x + 24, y + 16); } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_13 //-----------------------------------------------------------------------void __fastcall TfrmGrafika2::btnTlac3Click(TObject *Sender) { //p ř ípadně: int cervena = 0x00000F; int zelena = 0x000F00; //sytost barevné složky (15 * 17 = 255) int modra = 0x0F0000; int pocet = 18; int posun = 6; int delka_x = imgObr3->Width / pocet; int delka_y = imgObr3->Height / pocet; int mezera_x = 1; int mezera_y = 1; imgObr3->Canvas->Pen->Style = psClear; for (int x = 0; x < pocet; x++) { for (int y = 0; y < pocet; y++) { imgObr3->Canvas->Brush->Color = (TColor) (x * zelena + y * modra); imgObr3->Canvas->Rectangle(delka_x * x + posun, delka_y * y + posun, delka_x * (x + 1) - mezera_x + posun, delka_y * (y + 1) - mezera_y + posun); } } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_14
Digitální učební materiál Počítačová grafika - použití v aplikaci (3. část)
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_14 Anotace: Postup vytvoření aplikace na procvičení práce s počítačovou grafikou, její použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_14 Zadání - 3. část: Vytvořte aplikaci „Grafika3“, která je spuštěna jako druhý formulář z aplikace „Grafika2“ tlačítkem Otevři (viz. předchozí část) - na formuláři jsou umístěny dvě komponenty Image, tři Button a jeden CheckBox. Na první Image je umístěn obrázek. Pomocí tlačítek lze na druhé Image nakreslit černobílou kopii obrázku nebo jeho černobílý negativ, třetí tlačítko formulář zavře. Při zatržení Korekce jasu bude kopie i negativ přepočítáván s různou vahou složek RGB podle jasové rovnice.
Řešení - 3. část: Připravte druhý formulář. Vygenerujte funkci k události OnCreate pro frmGrafika3 a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmGrafika3::FormCreate(TObject *Sender) { this->Caption = "Grafika3"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; btnKopie->Caption = "ČB kopie"; btnNegativ->Caption = "ČB negativ"; btnZavri->Caption = "Zav ř i"; chbJas->Caption = "Korekce jasu"; imgVzor->Picture->LoadFromFile("obraz.bmp"); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_14 Program uložte a přeložte. Vygenerujte funkce k událostem OnClick pro btnZavri, btnKopie a btnNegativ. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmGrafika3::btnZavriClick(TObject *Sender) { this->Close(); } //-----------------------------------------------------------------------void __fastcall TfrmGrafika3::btnKopieClick(TObject *Sender) { TColor barva; unsigned char slozkaR, slozkaG, slozkaB; for (int x = 0; x < imgKopie->Width; x++) { for (int y = 0; y < imgKopie->Height; y++) { barva = imgVzor->Canvas->Pixels[x][y]; slozkaR = barva & 0x0000FF; slozkaG = (barva & 0x00FF00) >> 8; slozkaB = (barva & 0xFF0000) >> 16; if (chbJas->Checked) imgKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR * 30 + slozkaG * 59 + slozkaB * 11) / 100) * 0x010101); else imgKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR + slozkaG + slozkaB) / 3) * 0x010101); } } imgKopie->Repaint(); } //-----------------------------------------------------------------------void __fastcall TfrmGrafika3::btnNegativClick(TObject *Sender) { //standardní postup vykreslení: /* TColor barva; unsigned char slozkaR, slozkaG, slozkaB; for (int x = 0; x < imgKopie->Width; x++) { for (int y = 0; y < imgKopie->Height; y++) { barva = imgVzor->Canvas->Pixels[x][y]; slozkaR = 255 - (barva & 0x0000FF); slozkaG = 255 - ((barva & 0x00FF00) >> 8); slozkaB = 255 - ((barva & 0xFF0000) >> 16); if (chbJas->Checked) imgKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR * 30 + slozkaG * 59 + slozkaB * 11) / 100) * 0x010101); else imgKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR + slozkaG + slozkaB) / 3) * 0x010101); } } imgKopie->Repaint(); */
VY_32_INOVACE_EL_10_14 //rychlejší vykreslení (vytvo ř ení náhradní bitmapy): Graphics::TBitmap *bmpKopie = new Graphics::TBitmap; bmpKopie->Width = imgKopie->Width; bmpKopie->Height = imgKopie->Height; TColor barva; unsigned char slozkaR, slozkaG, slozkaB; for (int x = 0; x < bmpKopie->Width; x++) { for (int y = 0; y < bmpKopie->Height; y++) { barva = imgVzor->Canvas->Pixels[x][y]; slozkaR = 255 - (barva & 0x0000FF); slozkaG = 255 - ((barva & 0x00FF00) >> 8); slozkaB = 255 - ((barva & 0xFF0000) >> 16); if (chbJas->Checked) bmpKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR * 30 + slozkaG * 59 + slozkaB * 11) / 100) * 0x010101); else bmpKopie->Canvas->Pixels[x][y] = (TColor) (((slozkaR + slozkaG + slozkaB) / 3) * 0x010101); } } imgKopie->Picture->Bitmap = bmpKopie; delete bmpKopie; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_15
Digitální učební materiál Počítačová grafika - cvičení
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_15 Anotace: Postup vytvoření aplikace na procvičení práce s počítačovou grafikou 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_15 Zadání: Vytvořte aplikaci „Domácí úkol“ - na formuláři jsou umístěny komponenty Image a Button. Pomocí tlačítka se na Image postupně vykresluje postava sněhuláka.
Ř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_10_15 //-----------------------------------------------------------------------void __fastcall TfrmUkol::FormCreate(TObject *Sender) { this->Caption = "Domácí úkol"; this->BorderStyle = bsDialog; this->Position = poScreenCenter; btnKresli->Caption = "Kresli"; imgObraz->Canvas->Brush->Color = clSkyBlue; imgObraz->Canvas->FillRect( Rect(0, 0, imgObraz->Picture->Width, imgObraz->Picture->Height)); xxx = imgObraz->Picture->Width / 2; yyy = imgObraz->Picture->Height - 70; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkci k události OnClick pro btnKresli. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------int pocet = 0; int xxx; int yyy; //-----------------------------------------------------------------------void __fastcall TfrmUkol::btnKresliClick(TObject *Sender) { pocet++; switch (pocet) { case 1 : imgObraz->Canvas->Brush->Color = clWhite; imgObraz->Canvas->Ellipse(xxx - 40, yyy - 40, xxx + 40, yyy + 40); yyy -= 70; break; case 2 : imgObraz->Canvas->Ellipse(xxx - 30, yyy - 30, xxx + 30, yyy + 30); break; case 3 : xxx -= 40; imgObraz->Canvas->Ellipse(xxx - 10, yyy - 10, xxx + 10, yyy + 10); xxx += 80; imgObraz->Canvas->Ellipse(xxx - 10, yyy - 10, xxx + 10, yyy + 10); xxx -= 40; yyy -= 50; break; case 4 : imgObraz->Canvas->Ellipse(xxx - 20, yyy - 20, xxx + 20, yyy + 20); yyy -= 34; break; case 5 : imgObraz->Canvas->Brush->Color = clRed; imgObraz->Canvas->Rectangle(xxx - 14, yyy - 14, xxx + 14, yyy + 14); break;
VY_32_INOVACE_EL_10_15 case 6 : imgObraz->Canvas->Brush->Color = clSkyBlue; imgObraz->Canvas->FillRect( Rect(0, 0, imgObraz->Picture->Width, imgObraz->Picture->Height)); pocet = 0; yyy = imgObraz->Picture->Height - 70; break; } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_16
Digitální učební materiál Textový editor - 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_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_16 Anotace: Postup vytvoření ukázkové funkční aplikace „Textový editor“ 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_16 Příprava: Seznamte se nejdříve důkladně s programem „WordPad“, který je dodáván v „Příslušenství“ k operačním systémům Windows. Zadání: Vytvořte aplikaci „Textový editor“ - na formuláři je umístěna komponenta RichEdit, která plní funkci vlastního editoru. Dále je aplikace doplněna vlastní ikonou, bohatým menu s ikonami a klávesovými zkratkami, panelem nástrojů a stavovým řádkem.
VY_32_INOVACE_EL_10_16 Ř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 frmText a zapište do ní tento text: //-----------------------------------------------------------------------#define sb 22 //-----------------------------------------------------------------------void __fastcall TfrmText::FormCreate(TObject *Sender) { this->Caption = "Textový editor"; this->Constraints->MinHeight = 274; this->Constraints->MinWidth = 370; this->Position = poScreenCenter; pmnFormatTXT->Checked = true; pmnZalamovaniRadku->Checked = true; pnlPanel->Align = alTop; pnlPanel->BevelOuter = bvLowered; pnlPanel->Caption = ""; pnlPanel->Height = sb + 4; sbtNovy->Height = sb; sbtNovy->Width = sb; sbtNovy->Left = 2; sbtNovy->Top = 2; sbtNovy->Hint = "Nový"; sbtNovy->ShowHint = true; sbtOtevrit->Height = sb; sbtOtevrit->Width = sb; sbtOtevrit->Left = sb + 2; sbtOtevrit->Top = 2; sbtOtevrit->Hint = "Otev ř ít"; sbtOtevrit->ShowHint = true; sbtUlozit->Height = sb; sbtUlozit->Width = sb; sbtUlozit->Left = 2 * sb + 2; sbtUlozit->Top = 2; sbtUlozit->Hint = "Uložit"; sbtUlozit->ShowHint = true; sbtTisk->Height = sb; sbtTisk->Width = sb; sbtTisk->Left = 3 * sb + 14; sbtTisk->Top = 2; sbtTisk->Hint = "Tisk"; sbtTisk->ShowHint = true; sbtVyjmout->Height = sb; sbtVyjmout->Width = sb; sbtVyjmout->Left = 4 * sb + 26; sbtVyjmout->Top = 2; sbtVyjmout->Hint = "Vyjmout"; sbtVyjmout->ShowHint = true;
VY_32_INOVACE_EL_10_16 sbtKopirovat->Height = sb; sbtKopirovat->Width = sb; sbtKopirovat->Left = 5 * sb + 26; sbtKopirovat->Top = 2; sbtKopirovat->Hint = "Kopírovat"; sbtKopirovat->ShowHint = true; sbtVlozit->Height = sb; sbtVlozit->Width = sb; sbtVlozit->Left = 6 * sb + 26; sbtVlozit->Top = 2; sbtVlozit->Hint = "Vložit"; sbtVlozit->ShowHint = true; sbtNajit->Height = sb; sbtNajit->Width = sb; sbtNajit->Left = 7 * sb + 38; sbtNajit->Top = 2; sbtNajit->Hint = "Najít"; sbtNajit->ShowHint = true; sbtOProgramu->Anchors >> akLeft << akRight; sbtOProgramu->Height = sb; sbtOProgramu->Width = sb; sbtOProgramu->Left = pnlPanel->Width - (sb + 2); sbtOProgramu->Top = 2; sbtOProgramu->Hint = "O programu"; sbtOProgramu->ShowHint = true; redText->Align = alClient; redText->PlainText = true; redText->ScrollBars = ssBoth; redText->WordWrap = true; redText->Clear(); stbStav->Panels->Items[0]->Width = 55; stbStav->Panels->Items[0]->Alignment = taCenter; stbStav->Panels->Items[1]->Width = 77; stbStav->Panels->Items[1]->Text = " Formát : TXT"; stbStav->Panels->Items[2]->Width = 127; stbStav->Panels->Items[0]->Text = TimeToStr(Time()); dlgOtevrit->DefaultExt = "txt"; dlgOtevrit->Filter = "Soubory TXT (*.txt)|*.txt|Všechny soubory (*.*)|*.*"; dlgOtevrit->Options << ofOverwritePrompt << ofEnableSizing; dlgOtevrit->Options >> ofHideReadOnly; dlgUlozit->DefaultExt = dlgOtevrit->DefaultExt; dlgUlozit->Filter = dlgOtevrit->Filter; dlgUlozit->Options << ofOverwritePrompt << ofEnableSizing; dlgNajit->Options << frHideUpDown; tmrHodiny->Interval = 1000; tmrHodiny->Enabled = true; nastavit_jmeno_souboru("Bez_názvu.txt"); }//------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_17
Digitální učební materiál Textový editor - 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_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_17 Anotace: Postup vytvoření ukázkové funkční aplikace „Textový editor“ 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_17 Řešení - 2. část: V minulé části byla volána vlastní funkce „nastavit_jmeno_souboru“. Tuto funkci je však nutné nejprve vytvořit. Protože bude potřeba vytvořit další vlastní funkce, provedeme to nyní (nezapomeňte zapsat hlavičky funkcí do hlavičkového souboru). Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------AnsiString jmeno_souboru; int zacatek_hledani, zbyva_do_konce, nalezena_pozice; //-----------------------------------------------------------------------void TfrmText::nastavit_jmeno_souboru(AnsiString file_name) { jmeno_souboru = file_name; stbStav->Panels->Items[2]->Text = " Soubor : " + ExtractFileName(jmeno_souboru); } //-----------------------------------------------------------------------TModalResult TfrmText::ulozit_zmeny(void) { TModalResult vysledek; if (redText->Modified) { vysledek = Application->MessageBox( "Soubor byl změněn, chcete jej uložit ?", "Textový editor", MB_YESNOCANCEL + MB_ICONQUESTION); if (vysledek == mrYes) pmnUlozitClick(this); } else vysledek = mrOk; return vysledek; } //-----------------------------------------------------------------------void TfrmText::ulozit_soubor(void) { redText->Lines->SaveToFile(jmeno_souboru); redText->Modified = false; } //-----------------------------------------------------------------------void TfrmText::najit_text_dlgNajit(void) { zacatek_hledani = redText->SelStart + redText->SelLength; zbyva_do_konce = redText->Text.Length() - zacatek_hledani; // ř ešena "zatržítka" stylu hledání // ne ř ešen směr hledání (v dialogu je skrytý) if ((dlgNajit->Options.Contains(frMatchCase)) && (dlgNajit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNajit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase << stWholeWord); if ((dlgNajit->Options.Contains(frMatchCase)) && !(dlgNajit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNajit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase >> stWholeWord);
VY_32_INOVACE_EL_10_17 if (!(dlgNajit->Options.Contains(frMatchCase)) && (dlgNajit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNajit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() >> stMatchCase << stWholeWord); if (!(dlgNajit->Options.Contains(frMatchCase)) && !(dlgNajit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNajit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() >> stMatchCase >> stWholeWord); if (nalezena_pozice != -1) { redText->SetFocus(); redText->SelStart = nalezena_pozice; redText->SelLength = dlgNajit->FindText.Length(); } else { Application->MessageBox("Ukon čeno hledání (konec souboru) !!!", "Textový editor", MB_OK + MB_ICONINFORMATION); redText->SetFocus(); redText->SelStart = 0; redText->SelLength = 0; } } //-----------------------------------------------------------------------void TfrmText::najit_text_dlgNahradit(void) { zacatek_hledani = redText->SelStart + redText->SelLength; zbyva_do_konce = redText->Text.Length() - zacatek_hledani; if ((dlgNahradit->Options.Contains(frMatchCase)) && (dlgNahradit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNahradit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase << stWholeWord); if ((dlgNahradit->Options.Contains(frMatchCase)) && !(dlgNahradit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNahradit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() << stMatchCase >> stWholeWord); if (!(dlgNahradit->Options.Contains(frMatchCase)) && (dlgNahradit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNahradit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() >> stMatchCase << stWholeWord); if (!(dlgNahradit->Options.Contains(frMatchCase)) && !(dlgNahradit->Options.Contains(frWholeWord))) nalezena_pozice = redText->FindText(dlgNahradit->FindText, zacatek_hledani, zbyva_do_konce, TSearchTypes() >> stMatchCase >> stWholeWord);
VY_32_INOVACE_EL_10_17 if (nalezena_pozice != -1) { redText->SetFocus(); redText->SelStart = nalezena_pozice; redText->SelLength = dlgNahradit->FindText.Length(); } else { Application->MessageBox("Ukon čeno hledání (konec souboru) !!!", "Textový editor", MB_OK + MB_ICONINFORMATION); redText->SetFocus(); redText->SelStart = 0; redText->SelLength = 0; } } //-----------------------------------------------------------------------void TfrmText::nahradit_text_dlgNahradit(void) { if (redText->SelLength > 0) { redText->SelText = dlgNahradit->ReplaceText; redText->SetFocus(); redText->SelStart = redText->SelStart - dlgNahradit->ReplaceText.Length(); redText->SelLength = dlgNahradit->ReplaceText.Length(); } else Application->MessageBox("Nebyl ozna čen text pro nahrazení !!!", "Textový editor", MB_OK + MB_ICONINFORMATION); } //-----------------------------------------------------------------------void TfrmText::nahradit_vse_dlgNahradit(void) { najit_text_dlgNahradit(); while (nalezena_pozice != -1) { nahradit_text_dlgNahradit(); najit_text_dlgNahradit(); } } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_18
Digitální učební materiál Textový editor - 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_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_18 Anotace: Postup vytvoření ukázkové funkční aplikace „Textový editor“ 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_18 Řešení - 3. část: Nejprve vyřešíme funkci hodin na stavovém řádku a funkci menu Nápověda / O_programu (vytvořte pro ni nový formulář frmProgram. Vygenerujte funkce k událostem OnTimer pro tmrHodiny a OnClick pro všechny položky menu Nápověda. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------#include "Program.h" //-----------------------------------------------------------------------void __fastcall TfrmText::tmrHodinyTimer(TObject *Sender) { stbStav->Panels->Items[0]->Text = TimeToStr(Time()); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnOProgramuClick(TObject *Sender) { frmOProgramu->ShowModal(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtOProgramuClick(TObject *Sender) { pmnOProgramuClick(this); } //------------------------------------------------------------------------
Program uložte a přeložte. Dále vyřešíme funkci menu Soubor. Vygenerujte funkce k událostem OnClick pro všechny položky menu Soubor a OnCloseQuery pro frmText. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmText::pmnNovyClick(TObject *Sender) { if (ulozit_zmeny() != mrCancel) { if (pmnFormatTXT->Checked) nastavit_jmeno_souboru("Bez_názvu.txt"); else nastavit_jmeno_souboru("Bez_názvu.rtf"); redText->Clear(); redText->Modified = false; } } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtNovyClick(TObject *Sender) { pmnNovyClick(this); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_18 //-----------------------------------------------------------------------void __fastcall TfrmText::pmnOtevritClick(TObject *Sender) { if (ulozit_zmeny() != mrCancel) if (dlgOtevrit->Execute()) { nastavit_jmeno_souboru(dlgOtevrit->FileName); redText->Lines->LoadFromFile(jmeno_souboru); redText->Modified = false; redText->ReadOnly = dlgOtevrit->Options.Contains(ofReadOnly); } } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtOtevritClick(TObject *Sender) { pmnOtevritClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnUlozitClick(TObject *Sender) { if ((jmeno_souboru == "Bez_názvu.txt") || (jmeno_souboru == "Bez_názvu.rtf")) pmnUlozitJakoClick(this); else ulozit_soubor(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtUlozitClick(TObject *Sender) { pmnUlozitClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnUlozitJakoClick(TObject *Sender) { if (dlgUlozit->Execute()) { nastavit_jmeno_souboru(dlgUlozit->FileName); ulozit_soubor(); } } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnNastaveniTiskarnyClick(TObject *Sender) { dlgNastaveniTiskarny->Execute(); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnTiskClick(TObject *Sender) { if (dlgTisk->Execute()) redText->Print(jmeno_souboru); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtTiskClick(TObject *Sender) { pmnTiskClick(this); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_18 //-----------------------------------------------------------------------void __fastcall TfrmText::pmnKonecClick(TObject *Sender) { this->Close(); } //-----------------------------------------------------------------------void __fastcall TfrmText::FormCloseQuery(TObject *Sender, bool &CanClose) { if (ulozit_zmeny() != mrCancel) { CanClose = true; Application->Terminate(); } else CanClose = false; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_19
Digitální učební materiál Textový editor - 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_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_19 Anotace: Postup vytvoření ukázkové funkční aplikace „Textový editor“ 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_19 Řešení - 4. část: Dále vyřešíme funkci menu Úpravy. Vygenerujte funkce k událostem OnClick pro všechny položky menu Úpravy, OnFind a OnReplace pro příslušné dialogy. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmText::pmnVyjmoutClick(TObject *Sender) { redText->CutToClipboard(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtVyjmoutClick(TObject *Sender) { pmnVyjmoutClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnKopirovatClick(TObject *Sender) { redText->CopyToClipboard(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtKopirovatClick(TObject *Sender) { pmnKopirovatClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnVlozitClick(TObject *Sender) { redText->PasteFromClipboard(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtVlozitClick(TObject *Sender) { pmnVlozitClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnVybratVseClick(TObject *Sender) { redText->SelectAll(); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnNajitClick(TObject *Sender) { dlgNajit->FindText = redText->SelText; dlgNajit->Execute(); } //-----------------------------------------------------------------------void __fastcall TfrmText::sbtNajitClick(TObject *Sender) { pmnNajitClick(this); } //-----------------------------------------------------------------------void __fastcall TfrmText::dlgNajitFind(TObject *Sender) { najit_text_dlgNajit(); } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_19 //-----------------------------------------------------------------------void __fastcall TfrmText::pmnNahraditClick(TObject *Sender) { dlgNahradit->FindText = redText->SelText; dlgNahradit->Execute(); } //-----------------------------------------------------------------------void __fastcall TfrmText::dlgNahraditFind(TObject *Sender) { najit_text_dlgNahradit(); } //-----------------------------------------------------------------------void __fastcall TfrmText::dlgNahraditReplace(TObject *Sender) { if (dlgNahradit->Options.Contains(frReplace)) nahradit_text_dlgNahradit(); else nahradit_vse_dlgNahradit(); } //------------------------------------------------------------------------
Program uložte a přeložte. Nakonec vyřešíme funkci menu Formát. Vygenerujte funkce k událostem OnClick pro všechny položky menu Formát. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmText::pmnPismoClick(TObject *Sender) { if (redText->SelLength > 0) { dlgPismo->Font->Assign(redText->SelAttributes); if (dlgPismo->Execute()) redText->SelAttributes->Assign(dlgPismo->Font); //redText->SelAttributes->Charset = dlgPismo->Font->Charset; //redText->SelAttributes->Color = dlgPismo->Font->Color; //redText->SelAttributes->Height = dlgPismo->Font->Height; //redText->SelAttributes->Name = dlgPismo->Font->Name; //redText->SelAttributes->Pitch = dlgPismo->Font->Pitch; //redText->SelAttributes->Size = dlgPismo->Font->Size; } else { dlgPismo->Font->Assign(redText->DefAttributes); if (dlgPismo->Execute()) redText->DefAttributes->Assign(dlgPismo->Font); } } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_19 //-----------------------------------------------------------------------void __fastcall TfrmText::pmnBarvaClick(TObject *Sender) { if (redText->SelLength > 0) { dlgBarva->Color = redText->SelAttributes->Color; if (dlgBarva->Execute()) redText->SelAttributes->Color = dlgBarva->Color; } else { dlgBarva->Color = redText->DefAttributes->Color; if (dlgBarva->Execute()) redText->DefAttributes->Color = dlgBarva->Color; } } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnFormatTXTClick(TObject *Sender) { pmnFormatTXT->Checked = true; pmnFormatRTF->Checked = false; redText->PlainText = true; dlgOtevrit->DefaultExt = "txt"; dlgUlozit->DefaultExt = dlgOtevrit->DefaultExt; dlgOtevrit->Filter = "Soubory TXT (*.txt)|*.txt|Všechny soubory (*.*)|*.*"; dlgUlozit->Filter = dlgOtevrit->Filter; stbStav->Panels->Items[1]->Text = " Formát : TXT"; if (jmeno_souboru == "Bez_názvu.rtf") nastavit_jmeno_souboru("Bez_názvu.txt"); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnFormatRTFClick(TObject *Sender) { pmnFormatTXT->Checked = false; pmnFormatRTF->Checked = true; redText->PlainText = false; dlgOtevrit->DefaultExt = "rtf"; dlgUlozit->DefaultExt = dlgOtevrit->DefaultExt; dlgOtevrit->Filter = "Soubory RTF (*.rtf)|*.rtf|Všechny soubory (*.*)|*.*"; dlgUlozit->Filter = dlgOtevrit->Filter; stbStav->Panels->Items[1]->Text = " Formát : RTF"; if (jmeno_souboru == "Bez_názvu.txt") nastavit_jmeno_souboru("Bez_názvu.rtf"); } //-----------------------------------------------------------------------void __fastcall TfrmText::pmnZalamovaniRadkuClick(TObject *Sender) { pmnZalamovaniRadku->Checked = !pmnZalamovaniRadku->Checked; redText->WordWrap = !redText->WordWrap; } //------------------------------------------------------------------------
Program uložte a přeložte.
VY_32_INOVACE_EL_10_20
Digitální učební materiál Inicializační soubory - použití v aplikaci
Šablona: III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT Sada: VY_32_INOVACE_EL_10 - Programování v jazyce C++ pro 4. ročník DUM: VY_32_INOVACE_EL_10_20 Anotace: Postup vytvoření aplikace na procvičení práce s inicializačními soubory, jejich použití v aplikaci a seznámení s dalšími komponentami 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: 4. Použitá literatura: Václav Kadlec - Učíme se programovat v C++Builder a jazyce C++
VY_32_INOVACE_EL_10_20 Příprava: Inicializační soubory (*.ini) jsou běžnou součástí většiny aplikací. Slouží k nastavení výchozích hodnot při spuštění aplikace a k zapamatování změn těchto hodnot při ukončení aplikace. Pro čtení inicializačních souborů a zápis do nich lze použít např. funkce z knihovny „inifiles.hpp“. Zadání: Vytvořte aplikaci „Inicializace“ - na formuláři jsou umístěny komponenty Edit a tři CheckBox. Pomocí souboru „inicializace.ini“ nastavte výšku a šířku formuláře, jeho umístění zleva a shora, text zobrazený v Edit a zatržení v CheckBox. Při ukončení aplikace do souboru zapište aktuální hodnoty a doplňte datum a čas poslední změny.
Ř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 frmInicializace a zapište do ní tento text: //-----------------------------------------------------------------------void __fastcall TfrmInicializace::FormCreate(TObject *Sender) { this->Caption = "Inicializace"; this->Height = pVyska; this->Width = pSirka; this->Left = pZleva; this->Top = pShora; edtNapis->Text = pNapis; chbBox1->Caption chbBox1->Checked chbBox2->Caption chbBox2->Checked chbBox3->Caption chbBox3->Checked
= = = = = =
"box č .1"; pBox1; "box č .2"; pBox2; "box č .3"; pBox3;
} //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_20 Program uložte a přeložte. Vytvořte soubor „inicializace.ini“, konstruktor a destruktor. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------#include
int pVyska, pSirka, pZleva, pShora; AnsiString pNapis, ppNapis; bool pBox1, ppBox1, pBox2, ppBox2, pBox3, ppBox3; TDateTime ppZmena; //-----------------------------------------------------------------------__fastcall TfrmInicializace::TfrmInicializace(TComponent* Owner) : TForm(Owner) { TIniFile *inisoubor = new TIniFile(GetCurrentDir() + "\\inicializace.ini"); pVyska pSirka pZleva pShora
= = = =
inisoubor->ReadInteger("Rozmery", "Vyska", 100); inisoubor->ReadInteger("Rozmery", "Sirka", 100); inisoubor->ReadInteger("Poloha", "Zleva", 50); inisoubor->ReadInteger("Poloha", "Shora", 50);
pNapis = inisoubor->ReadString("Text", "Napis", "text nena čten"); pBox1 = inisoubor->ReadBool("Boxy", "Box1", 0); pBox2 = inisoubor->ReadBool("Boxy", "Box2", 0); pBox3 = inisoubor->ReadBool("Boxy", "Box3", 0); delete inisoubor; } //-----------------------------------------------------------------------__fastcall TfrmInicializace::~TfrmInicializace() { TIniFile *inisoubor = new TIniFile(GetCurrentDir()+"\\inicializace.ini"); inisoubor->WriteString("Text", "Napis", ppNapis); inisoubor->WriteBool("Boxy", "Box1", ppBox1); inisoubor->WriteBool("Boxy", "Box2", ppBox2); inisoubor->WriteBool("Boxy", "Box3", ppBox3); ppZmena = Now().CurrentDateTime(); inisoubor->WriteDateTime("Cas", "Zmena", ppZmena); delete inisoubor; } //------------------------------------------------------------------------
Program uložte a přeložte. Vygenerujte funkce k událostem OnChange pro EdtNapis a OnClick pro chbBox1, chbBox2 a chbBox3. Do zdrojového kódu zapište tento text: //-----------------------------------------------------------------------void __fastcall TfrmInicializace::edtNapisChange(TObject *Sender) { ppNapis = edtNapis->Text; } //------------------------------------------------------------------------
VY_32_INOVACE_EL_10_20 //-----------------------------------------------------------------------void __fastcall TfrmInicializace::chbBox1Click(TObject *Sender) { ppBox1 = chbBox1->Checked; } //-----------------------------------------------------------------------void __fastcall TfrmInicializace::chbBox2Click(TObject *Sender) { ppBox2 = chbBox2->Checked; } //-----------------------------------------------------------------------void __fastcall TfrmInicializace::chbBox3Click(TObject *Sender) { ppBox3 = chbBox3->Checked; } //------------------------------------------------------------------------
Program uložte a přeložte.