Lekce 10 - Programy XXprofesor, automat a dělení
A je to tu! Desátá část návodu. To znamená, že by měl být nějaký
zajímavý... A taky bude! Chcete si vyrobit vlastního XXProfesora? Čtěte
dál a dočkáte se!
Začnu ale doplněním ještě jednoho objektu. Přesněji ze Smaples. A je to: SPINEDIT
SpinEdit
Je to Edit, ve kterém se speciálně vyplňují pouze čísla. Navíc obsahuje také 2 šipečky, které číslo zvyšují nebo snižují o 1. A co důležitého nám nabízí Properties v Object Inspectoru?:
- MaxValue - nejvyšší hodnota Integeru zapsaná do SpinEditu
- MinValue - nejnižší hodnota Integeru zapsaná do SpinEditu
- Value - číslo napsané ve SpinEditu
Pozor ale na to, kdybyste chtěli reagovat na změnu obsahu pomocí procedury OnChange. Když totiž smaže uživatel obsah a chce napsat své číslo, program nahlásí chybu, že (NIC) není Integer. A to teda opravdu není!
Ještě mi dovolte doplnit 3.díl 6.část. Mluvil jsem o MASKEDITu Psal jsem, že se liší od Editu akorát položkou PasswordChar, ale to není pravda. Edit má tuto položku také. V čem se teda liší?:
- EditMask - klikněte na položku dvakrát a zvolte číselný tvar, jaký má mít vyplnění text
- Character for Blanks - zde si nastavíte znak, který se zobrazí, když uživatel smaže nutné číslo
- Save Literal Characters - zda se mají v Textu zobrazovat také tečky, čárky a ostatní věci, které uživatel nezapíše
To by bylo a teď pojďme k XXProfesorovi:
Hlavní, co k tomu budete potřebovat, je umět kreslit na PC a programovat v Delphi. A program neobsahuje nic složitého, co byste neuměli! Takže jak na programování? Začněte nastavením okna: Name - Laborator, BorderStyle - bsSingle, Caption - (Jak chcete aby se to jmenovalo!), Height - 480, Width - 640 a Position - poScreenCenter.
Vložte panel a u něj nastavte: Name - HlPanel, Align - alClient, BevelInner i BevelOuter - bvLowered a BevelWidth - 2.
A teď už můřeme u Laboratore nastavit ActiveControl. Jakou? HlPanel! Nyní budeme vkládat zbylé objekty (všechny do HlPanelu): 1hlavní obrázek (Image- Name=Walls), 4x SpeedButton (ET1, ET2, ET3 a ET4 - to jsou jejich jména (Name)), 6x Image (pojmenujte, jak chcete), 2x Label (Vysledky, Nastroje), 24x Image (to jsou ty nejhlavnější - Pojmenujete je vždy ET1A, ET1B, ET1C, ET1D, ET1E a ET1F. Další zase ET2A, ET2B ... ET2F a tak až k ET4F a u všech nastavte Visible na False.) a ještě 6x RadioButton (Sekera, Mec, Elektro, Voda, Ohen a Skripec). Tím máme vložené objekty, které jsou nutné pro chod a pěkný vzhled programu (jediné, co chybí je vlastně jen 1 Label obsahující datum výroby!). A teď tu nejdůležitější část! Vyrobte si obrázky čtyř tvorů na výzkum (bmp přibližně 95x105 pixelů). To je ještě ta jednodušší část. Měli byste je sladit s obrázkem na pozadí! A potom vyrobit ke každému výsledek poté, co na ně použijete mučicí nástroje a vložte do Image (podle toho, jakého tvora a jaký nástroj použijete. Nástroje: Sekera=A, Meč=B, Elektrický proud=C, Voda=D, Oheň=E a Skřipec je F. A čísla tvorů zvolte podle toho, do jakého obrázku jste umístili tvora v kleci - jestli do ET1, ET2, ET3 nebo ET4). RadioButtonům nastavte položku Checked na False (kromě Sekera), a Caption na: Sekera=Sekera, Mec=Meč, Elektro=E.Proud, Voda=Voda, Ohen=Oheň a Skripec=Skřipec. A teď už jen napsat velice jednoduchý program a umístit věci na správné místo (např. těch 6 Image volného jména, do kterých pro lepší vzhled umístěte ilustrace k mučícím nástrojům a umístěte je poblíž RadioButtonů)...
Nebudeme to protahovat a skočíme do toho rovnou po hlavě . Začněme přiřazením
obrázků mučicích nástrojů k RadioButtonům. Po kliknutí na nějaký z
obrázků nastavte např.: Mec.Checked := True;
Ostatní RadioButtony automaticky nebudou zaškrtnuté. Takže po kliknutí na
obrázek meče se zaškrtne RadioButton s nápisem Meč. To samé udělejte i u
ostatních obrázků! A teď vám zde napíšu hlavní zdrojový kód, který
použijete pro každý SpeedButton pro OnClick:
ET§A.Visible := False; ET§B.Visible := False; ET§C.Visible := False; ET§D.Visible := False; ET§E.Visible := False; ET§F.Visible := False; if Sekera.Checked then ET§A.Visible := True else if Mec.Checked then ET§B.Visible := True else if Elektro.Checked then ET§C.Visible := True else if Voda.Checked then ET§D.Visible := True else if Ohen.Checked then ET§E.Visible := True else if Skripec.Checked then ET§F.Visible := True;
§ vždy nahraďte číslem za ET v názvu SpeedButtonu (takže u ET1 bude místo § jednička (1)). Potom už jenom zkontrolovat, zda se výsledky pokusů zobrazují pod správným tvorem a pod Labelem Vysledky (má Caption "Výsledky jednotlivých pokusů:") a zda jsou u sebe spráné obrázky nástrojů u správných RadioButtonů a ty všechny pod Labelem Nastroje (Caption=Nástroje:) (ta dvojtečka tam patří- není to smajlík! Ty jsou grafické ). No a XXProfesor je hotov. Můžete si ho i stáhnout (na konci článku).

Koukněte na to! Jsme teprve u čtvrtého bodu a už jsem vám řekl taj jednoho svého programu. Tak jdeme dál! A máme tu hned jednu zajímavou věcičku (abyste si uvědomili, že i celkem zábavná věc může být lehko naprogramovatelná- stačí jen nápad). A to:
Losování
To je hra, která (jak jste se mohli dočíst v TVORBĚ sklidila největší
úspěch, když jsem chodil na ZŠ. A teď se s vámi podělím o 1. verzi
(stejně jako u XXProfesora - vždyť i ZOOProfesor byl tvořen z 1. verze):
Nejprve vložte panel (tentokrát zhezčuje vzhled okna), pojmenujete ho opět
HlPanel (ano, hodně používám panely - je to lepší než program ze sto
šedesáti sedmi okny ne? ),
Align nastavte na alClient, BevelInner na bvLowered a Color na clGray. Rozměry
okna nastavte na: Width=162 a Height=214. Do HlPanelu vložte Button (ano,
prostý Button) s Captionem X a Namem Exit. Do procedury OnClick napište pouhé
Close;.
Teď už můžeme nastavit zbytek věcí okna. Já jsem ho pojmenoval Project, ale to je úplně jedno. Hlavní jsou ostatní parametry: ActiveControl je HlPanel, BorderStyle nastavte na bsNone a Position bude poScreenCenter. To by bylo. Teď, když program spustíte, půjde okno zavřít pouze tlačítkem Exit (s nápisem X - to má vypadat jako křížek na zavření okna!). Teď vložte Timer a pojmenujte ho Zmena. Jeho Interval bude 200. Předepište si proměnné:
Playing : Boolean; Jmeni, Odmena, pf : Integer;
A u okna do procedury OnCreate napište:
Playing := True;
Jmeni := 10;
A teď vložíme zbývající objekty...
Nejprve vložte 3 panely (Obr1, Obr2 a Obr3). U všech nastavte Height i
Width na 41. Obr1 (Left=8, Top=24) bude obsahovat Shape pojmenovaný Shp1 (Left
i Top=1, Pen.Style=psClear, Height i Width = 39), Obr2 (Left=56, Top=24) bude
obsahovat Shape Shp2 (se stejnými vlastnostmi, jako Shp1) a v Obr3 (Left=104,
Top=24) opět Shape a tentokrát s Name Shp3 (vlastnosti jako u Shp1 a Shp2). To
bysme měli 3 hlavní losovací obrázky. Teď umístíme tlačítko (Button),
které pojmenujeme Los. Caption bude Zastavit, Height 17, Left=2, Top také 2 a
Width bude 55. Vložte (do HlPanelu) 7 Labelů (Kc, Korun, Korunek, Kredit,
Vsadit, Vyhra, Vyrobeno), 2 Panely (PanelJmeni, PanelVyhry), nastavte u nich
BevelOuter na bvNone, Color na clGray a do každého jeden Label (do PanelJmeni
Prachu a do PanelVyhry Vydelek). Ještě vložte SpinEdit (já vám říkal, že
ho hodně používám (nebo neříkal?) a pojmenujte ho Castka.
A teď doplňte parametry podle tabulky:
Name | Caption | Left | Top | Height | Width | Font |
Kc | Kč | 131 | 160 | auto | auto | Tučný 10 |
Korun | Kč | 130 | 75 | auto | auto | Tučná kurzíva 10 |
Korunek | Kč | 131 | 120 | auto | auto | Tučný 10 |
Kredit | Vaše aktuální jmění: | 7 | 144 | auto | auto | Tučný 10 |
Vsadit | Vsadit: | 5 | 76 | auto | auto | neměnit |
Vyhra | Poslední výhra: | 7 | 104 | auto | auto | Tučný 10 |
Vyrobeno | (datum výroby) | 58 | 5 | auto | auto | MS Serif 7 stříb. |
Prachu | 10 | auto | auto | auto | auto | Tučný 10 |
Vydelek | 0 | auto | auto | auto | auto | Tučný 10 |
Castka | X | 40 | 72 | 26 | 89 | Tučná kurzíva 10 |
Vysvětlivky:
X = neobsahuje tuto položku
auto = vypočítá se samo ze zadaných hodnot
U Prachu a Vydelek nastavte Align na alRight a u Castka nastavte MaxValue na 10, MinValue na 0 a Value na 1. A teď už jenom vlastní program:
A teď si vám dovolím napsat procedury a ke každé popsat, co se děje: Nejprve procedura, která se zavolá (spustí, provede, nebo jak chcete...) poté, co kliknete na tlačítko Los:
procedure TProject.LosClick(Sender: TObject); begin if Playing then begin Los.Caption := 'Losovat'; Playing := False; Zmena.Enabled := False; Vyhrat; end else begin Los.Caption := 'Zastavit'; Los.Enabled := False; Playing := True; Zmena.Enabled := True; end; end;
Playing je proměnná, která nám určuje, zda se mění symboly losování. Pokud se tedy losuje a vy kliknete na tlačítko, změní se nápis na tlačítku na "Losovat", Playing se změní na False (to znamená, že se už nemění tvary), příkaz Zmena.Enabled := False; se zastaví časovač Zmena a Vyhrat; spustí proceduru Vyhrat (tu jsme zatím nenadefinovali). A pokud nebu Playing True, nápis se změní na "Zastavit", znepřístupní se tlačítko Los (nedá se na něj kliknout (ale to se v časovači změní. Je to kvůli neustálému zastavování a spouštění stejné sestavy tvarů za účelem výhry velké částky!)- dosáhne se toho příkazem Los.Enabled := False;), Playing se změní na True a spustí se časovač. A teď probereme, co se stane každou pětinu sekundy (neboli co napíšeme do procedur OnTimer:
procedure TProject.ZmenaTimer(Sender: TObject); var x : Integer; begin Los.Enabled := True; Randomize; x := Random(2); if x = 0 then Shp1.Shape := StCircle else Shp1.Shape := StRectangle; x := Random(2); if x = 0 then Shp2.Shape := StCircle else Shp2.Shape := StRectangle; x := Random(2); if x = 0 then Shp3.Shape := StCircle else Shp3.Shape := StRectangle;
Nejprve jsme zpřístupnili tlačítko Los (viz. výše), poté jsme spustili
generování náhodných čísel a potom jsme do místní proměnné x (Integer)
dosadili náhodné číslo. Pokud je číslo x 0, Shp1 se změní na kruh, jinak
na obdélník. To samé se opakuje pro všechny tři tvary.
Ale pojďme dále:
x := Random(6); if x = 0 then Shp1.Brush.Color := clBlack else if x = 1 then Shp1.Brush.Color := clWhite else if x = 2 then Shp1.Brush.Color := clRed else if x = 3 then Shp1.Brush.Color := clBlue else if x = 4 then Shp1.Brush.Color := clGreen else Shp1.Brush.Color := clYellow;
Opět dosadíme za x náhodné číslo do 6 (včetně nuly a vyjma 6 = šestka tam není!). Pokud je číslo 0, Shp1 jedna bude černý, pokud 1, je bílý, 2=červený, 3=modrý, pokud je x 4, bude Shp1 zelený a pokud něco jiného (=5), bude žlutý. To se opakuje pro všechny tři Shpey (to je níže:)
x := Random(6); if x = 0 then Shp2.Brush.Color := clBlack else if x = 1 then Shp2.Brush.Color := clWhite else if x = 2 then Shp2.Brush.Color := clRed else if x = 3 then Shp2.Brush.Color := clBlue else if x = 4 then Shp2.Brush.Color := clGreen else Shp2.Brush.Color := clYellow; x := Random(6); if x = 0 then Shp3.Brush.Color := clBlack else if x = 1 then Shp3.Brush.Color := clWhite else if x = 2 then Shp3.Brush.Color := clRed else if x = 3 then Shp3.Brush.Color := clBlue else if x = 4 then Shp3.Brush.Color := clGreen else Shp3.Brush.Color := clYellow; end;
A to jsou celé dvě procedury, které jsou automaticky vytvořitelné, ale chybí nám ještě jedna...
A to je procedura Vyhrat, kterou musíte předdefinovat nahoře (před private a public za ostatní předepsání procedur). Dále už prostě pište:
procedure TProject.Vyhrat; var odme : Boolean; begin Odmena := Castka.Value; odme := False; if (Shp1.Shape = Shp2.Shape) and (Shp3.Shape = Shp2.Shape) then begin Odmena := Odmena * 5; odme := True; end;
Nejprve uložíme do proměnné Odmena hodnotu, jakou jste vsadili (kterou jste zadali do Castka). Dále se místní proměnná odme nastaví na Fasle (to znamená, že hráč nemá zatím žádnou výhru). A teď začíná nejdůležitější část programu: BODOVÁNÍ! Pokud bude mít Shp1 a Shp2 stejný tvar a zároveň je tvar Shp3 stejný jako tvar Shp2 (to znamená, že mají všechny Shpy stejný tvar - níže to budu psát takto (zkráceně)), Odmena se vynásobí pětkrát a odme se změní na True (hráč už něco vyhrál).
if (Shp1.Brush.Color = Shp2.Brush.Color) and (Shp3.Brush.Color = Shp2.Brush.Color) then begin Odmena := Odmena * 5; odme := True; end else
Pokud mají všechny Shpy stejnou barvu, vynásobí se Odmena také 5x (a odme se změní na True (to už psát nebudu)). Pokud však všechny barvy nejsou stejné, pokračuje program dále:
if Shp1.Brush.Color = Shp2.Brush.Color then begin odme := True; if Shp1.Shape = Shp2.Shape then Odmena := Odmena * 2 else Odmena := Odmena * 1; end else
Pokud mají Shp1 a Shp2 stejnou barvu, vynásobí se Odmena 2x, pokud mají i stejný tvar a 1x, pokud ne. A jestli to neplatí, program pokračuje ve zjišťování podobnosti barev dál:
if Shp2.Brush.Color = Shp3.Brush.Color then begin odme := True; if Shp2.Shape = Shp3.Shape then Odmena := Odmena * 2 else Odmena := Odmena * 1; end else
Jestli mají Shp2 a Shp3 stejnou barvu, stane se to samé, jako u předchozí části.
if Shp1.Brush.Color = Shp3.Brush.Color then begin odme := True; if Shp1.Shape = Shp3.Shape then Odmena := Odmena * 2 else Odmena := Odmena * 1; end;
A nakonec se ještě zjistí barevná a tvarová podobnost Shp1 se Shp3. A tím končí skupina IFů spojených ELSE. Tím ale procedura nekončí!
if odme = False then Odmena := 0; Vydelek.Caption := IntToStr(Odmena - Castka.Value); Jmeni := Jmeni + Odmena - Castka.Value; Prachu.Caption := IntToStr(Jmeni); Castka.MaxValue := Jmeni;
Pokud jste se netrefili do žáné výherní varianty (odme je False), Odmena je nula. Do nápisu Vysledek se dosadí Odmena bez vsazené částky, převedená na string. Ke Jmeni (tj. kolik vlastníte peněz) se přičte Odmena a odečte vsazená částka (Castka.Value). Vysledek se převede na string a zapíše do Prachu (nápis, který informuje hráče o jeho jmění) a maximální hodnota vsazených peněz se přeřídí na hodnotu peněz na kontě hráče.
if Jmeni < 1 then begin Castka.Enabled := False; Los.Enabled := False; Castka.Value := 0; end; end;
A nakonec, pokud je Jmeni menší, než 1, nemůžete (logicky) nic vsadit (Castka se znepřístupní), Nemůžete kliknout na tlačítko Los a vsázená částka se nastaví na 0. A tím máte Losování hotové. Navíc si můžete opět stáhnout na konci článku.

Tak co? Her už máte dost, tak na závěr jeden program. A stejně jako XXProfesor se bude jednat o program, který můžete vylepšit (tentokrát ne změnou vzhledu, ale rozšířením funkce. Jaké funkce? Dělení. Ano, teď vám řeknu (napíšu), jak vyrobit Dělení (a to 2.verzi!):
Dělení
Začněme nastavením okna: Width=340, Height=290, v položce BorderIcons
nastavte vše (kromě biSystemMenu) na False, BorderStyle=bsDialog,
Caption=Program na písemné dělení pro kontrolu a podvodníky, Color si
nastavte, jak chcete a Position=poScreenCenter. A teď si vložíme objekty:
3x Label (Deleno, RovnaSe a Zbyde), 1 Button (Vypocet), 2x SpinEdit (Delenec,
Delitel) a 11x Panel (p1, p2 až p9, Podil a Zbytek).
A co do nich dosadíte? Tohle:
Name | Caption | Left | Top | Height | Width | Font |
p1 | 100 | 24 | 33 | 23 | 33 | XXX |
p2 | 31 | 58 | 23 | 33 | XXX | |
p3 | 38 | 83 | 23 | 33 | XXX | |
p4 | 45 | 108 | 23 | 33 | XXX | |
p5 | 52 | 133 | 23 | 33 | XXX | |
p6 | 59 | 158 | 23 | 33 | XXX | |
p7 | 66 | 183 | 23 | 33 | XXX | |
p8 | 73 | 208 | 23 | 33 | XXX | |
p9 | 80 | 233 | 23 | 33 | XXX | |
Delenec | --500 | 24 | 8 | 23 | 89 | XXX |
Delitel | --200 | 120 | 8 | 23 | 49 | XXX |
Podil | 2 | 185 | 8 | 23 | 73 | XXX |
Zbytek | 100 | 280 | 8 | 23 | 27 | XXX |
Vypocet | Vypočítat příklad | 185 | 40 | 17 | 122 | Tučné 8 |
Deleno | : | 112 | 5 | auto | auto | Tučné 14 |
RovnaSe | = | 170 | 7 | auto | auto | Tučné 14 |
Zbyde | Zb. | 260 | 13 | auto | auto | Tučné 8 |
U panelů a SpinEditů nastavte Color na clWhite, Delenec bude mít MaxLength 9, MaxValue 999999999, MinValue 1 a Delitel MaxLength=3, MaxValue 999 a MinValue také 1. A u všech panelů nastavte BevelInner i BevelOuter na bvLowered. A můžeme se pustit do programování...
Je tu jen jedna procedura. Když kliknete na Vypocet.
procedure TCentrOkno.VypocetClick(Sender: TObject); var Dlnc, Dltl, Zbtk, Pos, Delka : Integer; Vysledek : string; Cha : Boolean; begin Cha := True; p1.Caption := ''; p2.Caption := ''; p3.Caption := ''; p4.Caption := ''; p5.Caption := ''; p6.Caption := ''; p7.Caption := ''; p8.Caption := ''; p9.Caption := ''; p1.Left := 24-8; p2.Left := 31-8; p3.Left := 38-8; p4.Left := 45-8; p5.Left := 52-8; p6.Left := 59-8; p7.Left := 66-8; p8.Left := 73-8; p9.Left := 80-8; Vysledek := ''; Dltl := Delitel.Value; Delka := Length(Delenec.Text) + 1;
Takže, teď už máme nastavené nápisy v p1 až p9 na nic a umístěné v základní pozici. Vysledek je také prozatím prázdný, proměnná Dlt má hodnotu Delitel.Value a proměnná Delka má hodnotu o jedna větší, než je počet písmen v Delenec.
// Výsledek :
Podil.Caption := IntToStr(Delenec.Value div Delitel.Value);
Zbytek.Caption := IntToStr(Delenec.Value mod Delitel.Value);
Na tom nebylo co vysvětlovat. Prostě jsem vydělelil Delenec Delitelem a vyšel mi nápis do Podilu. A zbytek jsem udělal stejným způsobem.
// Příprava : if StrToInt(Delenec.Text[1]) >= Delitel.Value then begin p1.Left := p1.Left - 8; p2.Left := p2.Left - 8; p3.Left := p3.Left - 8; p4.Left := p4.Left - 8; p5.Left := p5.Left - 8; p6.Left := p6.Left - 8; p7.Left := p7.Left - 8; p8.Left := p8.Left - 8; p9.Left := p9.Left - 8; Pos := 2; Dlnc := StrToInt(Delenec.Text[1]) end else
Pokud je v Delnci první písmeno (převedené na Integer) větší, nebo rovno Deliteli, posunou se všechny pčka o 8 pixelů doleva od základní pozice, Pos bude mít hodnotu 2 a Dlnc bude mít hodnotu prvního písmene v Delenec (samozřejmě převedeného na Integer). Pokud však ne, pokračuje program zde:
if StrToInt(Copy(Delenec.Text, 1, 2)) >= Delitel.Value then begin Pos := 3; Dlnc := StrToInt(Copy(Delenec.Text, 1, 2)) end else if StrToInt(Copy(Delenec.Text, 1, 3)) >= Delitel.Value then begin p1.Left := p1.Left + 8; p2.Left := p2.Left + 8; p3.Left := p3.Left + 8; p4.Left := p4.Left + 8; p5.Left := p5.Left + 8; p6.Left := p6.Left + 8; p7.Left := p7.Left + 8; p8.Left := p8.Left + 8; p9.Left := p9.Left + 8; Pos := 4; Dlnc := StrToInt(Copy(Delenec.Text, 1, 3)); end else
To byly opět dvě na sebe navazující IFové části spojené ELSE. 1.: Pokud je nápis v Delenci na prvním až druhém místě větší nebo roven Deliteli, Pos bude 3 a Dlnc ona 2 písmena na začátku. A pozice pček zůstane základní. 2.: Když bude 1. až třetí písmeno Delence větší nebo rovno Deliteli, bude Pos 4 pčka se posunou o 8 pixelů doprava a Dlnc bude opět mít hodnotu oněch zjišťovaných písmen.
begin p1.Left := p1.Left + 16; p2.Left := p2.Left + 16; p3.Left := p3.Left + 16; p4.Left := p4.Left + 16; p5.Left := p5.Left + 16; p6.Left := p6.Left + 16; p7.Left := p7.Left + 16; p8.Left := p8.Left + 16; p9.Left := p9.Left + 16; Pos := 5; Dlnc := StrToInt(Copy(Delenec.Text, 1, 4)); end;
A nakonec, pokud nesedělo ani jedno z předchozích zjištění, posunou se pčka o 16p doprava Pos bude 5 a Dlnc budou první 4 písmena.
if Delenec.Value < Delitel.Value then begin p1.Left := 24; p2.Left := 31; p3.Left := 38; p4.Left := 45; p5.Left := 52; p6.Left := 59; p7.Left := 66; p8.Left := 73; p9.Left := 80; Pos := 4; Dlnc := StrToInt(Copy(Delenec.Text, 1, 3)); end;
Na závěr //Přípravy jsme ještě doplnili, že pokud je Dlenec menší než Dělitel, budou mít pčka pozici, kterou jsme jim zadali v Object Inspectoru, Pos bude 4 a Dlnc první 3 písmena. A teď se pustíme do vypsání výsledků:
// Zápis :1. if Pos < Delka then begin try Vysledek := Vysledek + IntToStr(Dlnc div Dltl); p1.Caption := IntToStr(Dlnc mod Dltl) + Delenec.Text[Pos]; Dlnc := StrToInt(p1.Caption); Pos := Pos + 1; except Vysledek := '0'; p1.Caption := ''; end; end else
Pokud bude Pos menší než Delka, potom se zkusí (to je to try - neprobírali jsme to, ale třeba to pochopíte) vydělit Dlnc Dltlem a připsat k Vysledek. Nápis p1 bude zbytek po vydělení Dlnce Dltlem a číslo Delence na "Postém" místě. Dlnc se nastaví na obsah p1 a k Posu se přidá jednička. Pokud to nepůjde (Pokud se třeba bude dělit nulou), proběhne část programu od EXCEPT do END;, tedy Vysledek bude 0 a p1 bude prázdné.
begin if Cha = True then begin p1.Caption := Zbytek.Caption + ' '; Cha := False; end; end;
Pokud nebude Pos menší než Delka a Cha bude True, nápis v p1 se nastaví na mezeru a Cha na False. Tyto 2 části programu napište celkem devětkrát (pro každý mezipočet (mezizbytek)). Jediné, co změníte, je, že místo p1 napíšete p2, p3 atd. Až skončíte u p9 (nic si z toho nedělejte- je to to samé!):
// Zápis :9. if Pos < Delka then begin try Vysledek := Vysledek + IntToStr(Dlnc div Dltl); p9.Caption := IntToStr(Dlnc mod Dltl) + Delenec.Text[Pos]; Dlnc := StrToInt(p9.Caption); Pos := Pos + 1; except Vysledek := Vysledek; p9.Caption := ''; end; end else begin if Cha = True then begin p9.Caption := Zbytek.Caption + ' '; Cha := False; end; end; end;
A je to! Pokud si to chcete stáhnout, tak můžete o kousek níže! Programy
jsou hotové, návod je dopsaný a já si konečně dám šlofíka ...

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 429x (1.37 MB)
Aplikace je včetně zdrojových kódů v jazyce Delphi