Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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).

Delphi

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 131 160 auto auto Tučný 10
Korun 130 75 auto auto Tučná kurzíva 10
Korunek 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.

Delphi

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=bsDi­alog, Caption=Program na písemné dělení pro kontrolu a podvodníky, Color si nastavte, jak chcete a Position=poScre­enCenter. 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
Vysvětlivky: --= položka Value (ne Caption) XXX=Courier New, Tučné 8 auto = vypočítá se samo ze zadaných hodnot

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 :-) ...

Delphi

 

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 425x (1.37 MB)
Aplikace je včetně zdrojových kódů v jazyce Delphi

 

Předchozí článek
Bitmapy a vlastní malování
Všechny články v sekci
Delphi
Přeskočit článek
(nedoporučujeme)
Matematické funkce a funkce, práce s Shell, animovaná ryba
Článek pro vás napsal Kukensius
Avatar
Uživatelské hodnocení:
3 hlasů
Jméno: Lukáš Kučera alias Kukensius<br/> Narození: říjen 1987 (ve znamení vah)<br/> Bydliště: Jihlava, Česká Republika<br/> Studium: 1. ročník magisterského studia<br/> Škola: Vysoké učení technické v Brně<br/> Fakulta: Fakulta elektrotechniky ...
Aktivity