Vstup pomocí komponenty Radiogroup

Cílem této lekce bude vytvořit jednoduchý a kratičký testovací program, zatím sice nešikovným, ale funkčním způsobem. Pro výběr správné odpovědi na otázku použijeme komponentu Radiogroup, což je skupina RadioButtonů (přepínačů).



Okno aplikace pro testování na obrázku obsahuje Label1 s hlavním nadpisem, Label2 s testovou otázkou, dvě tlačítka pro kontrolu odpovědi a přechod na další otázku a pro nás novou komponentu RadioGroup. Z vlastností této komponenty můžeme využít Caption - text v záhlaví boxu (vyber odpověď). Podobně jako v ComboBoxu jsou jádrem jednotlivé položky, které můžete zapsat ve vlastnosti Items stejným způsobem jako u ComboBoxu. A opět stejně jako u ComboBoxu jsou jednotlivé položky číslované od nuly (!).
Po přípravě vzhledu aplikace přistoupíme k programování, nejprve zajistíme kontrolu správnosti odpovědi, tedy událost tlačítka pro kontrolu.

Na obrázku je vidět také část boxu s informací o správnosti (či nesprávnosti) vybrané odpovědi. Pro takovéto kratičké, jednoduché informace pro uživatele se používá také box ShowMessage.


Výstupní box ShowMessage

Událost OnClick tlačítka pro kontrolu odpovědi doplníme takto:
procedure TForm2.Button1Click(Sender: TObject);
begin
if radiogroup1.itemindex=0 then ShowMessage('Správná odpověď') else ShowMessage('Chyba!');
end;
Pro ty z vás, kdo minulé lekce pochopili, už překlad nebude nutný, ale přece jen pro jistotu - doplněný programový řádek znamená:
jestliže je vybraná první položka ze seznamu odpovědí, potom hlaš Správná odpověď (text je uzavřený v apostrofech), jinak hlaš Chyba! (to ale neodpovídá otázce na obrázku:-) ).

Poznámka od P. Bartoně: Pokud chcete do hlášky přidat číslo, je potřeba ho převést na řetězec a "přičíst" (spojit) k ostatním řetězcům:
slovo:=IntToStr(pocet); {pocet je typu integer}
if edit1.text='Schumacher' then ShowMessage('správně,trvalo ti to '+slovo+' kliknutí') else ShowMessage('špatně zkus to znovu Dej si pozor na velká písmena');

Teď už můžeme vyzkoušet, jestli aplikace reaguje na výběr odpovědi, test s jednou otázkou je připravený. Málokterému vyučujícímu by ale jedna otázka v testu stačila -:) , zkusíme proto přidat další otázku.

Složený příkaz

Přidat další otázku znamená, že po kliknutí na tlačítko pro další otázku chceme změnit hodnoty komponent Label2 (text otázky) a RadioGroup (texty odpovědí). Navíc počítáme, že otázek bude více, takže musí být jasné, kterou otázku a odpovědi chceme vypsat. Proto zavedeme proměnnou, která bude otázky počítat, například:
var
Form1: TForm1;
otazka: integer;

Takže po kliknutí na tlačítko Další otázka chceme zvětšit proměnnou otazka o jedničku a podle její hodnoty změnit otázku a odpovědi. Událost OnClick by mohla být doplněna například takto:
procedure TForm2.Button2Click(Sender: TObject);
begin
otazka:=otazka+1; {zvetseni promenne otazka o 1}
if otazka=1 then
begin {zacatek slozeneho prikazu}
label2.Caption:='Srdcem počítače se dá nazvat:';
radiogroup1.Items[0]:='kompresor';
radiogroup1.Items[1]:='profesor';
radiogroup1.Items[2]:='procesor';
radiogroup1.Items[3]:='motor';
end; {konec slozeneho prikazu}
end;
První drobná novinka v této proceduře je text ve složených závorkách { ... } - jedná se o takzvaný komentář , slouží programátorovi k připisování vysvětlujících poznámek buď pro pozdější zkoumání nebo jiné kolegy programátory (nemluvě o vyučujícím :-) ), takový text je překladačem programu ignorován.
Následuje příkaz if a then, za kterým může být zapsaný jen jeden příkaz. My ale potřebujeme vykonat příkazů více - změnit Label2 (otázku) a hodnoty RadioGroupu, proto musíme tyto příkazy "uzavřít" mezi begin a end a vytvořit tak jeden takzvaný složený příkaz. Zkuste si vložený begin a end odmyslet a vidíte, že nelze poznat, které příkazy se mají ještě za dané podmínky vykonávat a které už patří mimo podmínku.

Máme připravenou druhou otázku našeho minitestu a chtěli bychom zkontrolovat odpověď, ale na tlačítku pro odpověď máme kontrolu první otázky. Bude potřeba tuto kontrolu upravit, nejdřív zkontrolujeme, na kterou otázku se odpovídá a potom teprve odpověď. Událost OnClick na tlačítku Kontrola by mohla být ošetřena takto:
procedure TForm2.Button1Click(Sender: TObject);
begin
if otazka=0 then if radiogroup1.itemindex=2 then ShowMessage('Správná odpověď') else ShowMessage('Chyba!');
if otazka=1 then if radiogroup1.itemindex=2 then ShowMessage('Správná odpověď') else ShowMessage('Chyba!');
end;
Podmínka už je trochu složitější, ale snad jasná:
jestli je otázka první (číslo 0) potom jestli je odpověď číslo 3 (index 2) nahlaš správnou odpověď jinak chybu
Ve složitějších příkazech se else vztahuje vždy k bezprostředně předcházejícímu then.

Dvěma drobnostmi ještě vylepšíme proceduru na tlačítku Další otázka, jistě je najdete a pochopíte:
procedure TForm2.Button2Click(Sender: TObject);
begin
otazka:=otazka+1;
radiogroup1.ItemIndex:=-1; {neni vybrana zadna polozka - zruseni vyberu}
if otazka=1 then
begin
label2.Caption:='Srdcem počítače se dá nazvat:';
radiogroup1.Items[0]:='kompresor';
radiogroup1.Items[1]:='profesor';
radiogroup1.Items[2]:='procesor';
radiogroup1.Items[3]:='motor';
end;
if otazka=2 then {ukonceni programu}
begin
ShowMessage('Máš to za sebou'); Application.Terminate;
end;
end;

Aplikaci ukládej do složky s názvem lekce6.

Úkoly:

Základní úloha:

Vytvoř aplikaci podle textu lekce a doplň ještě jednu otázku na dané téma, můžeš využít ukázku .


Úloha na plus:

Doplň test na pět otázek (téma můžeš zvolit jiné) a ohodnoť testovaného známkou.


Úloha na jedničku:

Vytvoř takzvanou poznávačku - test, ve kterém zkoušený určuje název objektu na obrázku (ptáci, stromy, hrady, herci apod.). Test doplň tak, aby zkoušený nemohl přejít k další otázce bez odpovědi.