IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

10. diel - Programy XXprofesor, automat a delenie

A je to tu! Desiata časť návodu. To znamená, že by mal byť nejaký zaujímavý ... A taky bude! Chcete si vyrobiť vlastného XXProfesora? Čítajte ďalej a dočkáte sa! :-)

Začnem ale doplnením ešte jedného objektu. Presnejšie zo Smaples. A je to: SPINEDIT

SpinEdit

Je to Edit, v ktorom sa špeciálne vypĺňajú len čísla. Navyše obsahuje tiež 2 sipecka, ktoré číslo zvyšujú alebo znižujú o 1. A čo dôležité nám ponúka Properties v Object Inspector ?:

  • Maxvalue - najvyššia hodnota integer zapísaná do SpinEditu
  • MINVALUE tak - najnižšia hodnota integer zapísaná do SpinEditu
  • Value - číslo napísané vo SpinEditu

Pozor ale na to, keby ste chceli reagovať na zmenu obsahu pomocou procedúry OnChange. Keď totiž zmaže používateľ obsah a chce napísať svoje číslo, program nahlási chybu, že (NIC) nie je Integer. A to teda naozaj nie je!

Ešte mi dovoľte doplniť 3.díl 6.časť. Hovoril som o MASKEDITu Písal som, že sa líši od Editu akurát položkou PasswordChar, ale to nie je pravda. Edit má túto položku tiež. V čom sa teda líši ?:

  • EditMask - kliknite na položku dvakrát a zvoľte číselný tvar, aký má mať vyplnenie text
  • Character for Blanks - tu si nastavíte znak, ktorý sa zobrazí, keď používateľ zmaže nutné číslo
  • Save Literal Characters - či sa majú v Textu zobrazovať tiež bodky, čiarky a ostatné veci, ktoré užívateľ nezapíše

To by bolo a teraz poďme k XXProfesorovi:

Hlavné, čo k tomu budete potrebovať, je vedieť kresliť na PC a programovať v Delphi. A program neobsahuje nič zložité, čo by ste nevedeli! Takže ako na programovanie? Začnite nastavením okna: Name - laboratorium, BorderStyle - bsSingle, Caption - (Ako chcete aby sa to volalo!), Height - 480, Width - 640 a Position - poScreenCenter.

Vložte panel au neho nastavte: Name - HlPanel, Align - alClient, BevelInner i BevelOuter - bvLowered a BevelWidth - 2.

A teraz už Mure u laboratóriách nastaviť ActiveControl. Akú? HlPanel! Teraz budeme vkladať zvyšné objekty (všetky do HlPanelu): 1hlavní obrázok (Image- Name = Walls), 4x SpeedButton (ET1, ET2, ET3 a ET4 - to sú ich mená (Name)), 6x Image (pomenujte, ako chcete), 2x Label (Vysledky, Nastroje), 24x Image (to sú tie najhlavnejšie - pomenuje je vždy ET1A, ET1B, ET1C, ET1D, ET1E a ET1F. Ďalšie zase ET2A, ET2B ... ET2F a tak až k ET4F au všetkých nastavte Visible na false.) a ešte 6x RadioButton (Sekera, Mec, Elektro, Voda, Ohen a štipec). Tým máme vložené objekty, ktoré sú potrebné pre chod a pekný vzhľad programu (jediné, čo chýba je vlastne len 1 Label obsahujúce dátum výroby!). A teraz tu najdôležitejšia časť! Vyrobte si obrázky štyroch tvorov na výskum (bmp približne 95x105 pixelov). To je ešte tá jednoduchšia časť. Mali by ste ich zladiť s obrázkom na pozadí! A potom vyrobiť ku každému výsledok po tom, čo na nich použijete mučiace nástroje a vložte do Image (podľa toho, akého tvora a aký nástroj použijete. Nástroje: Sekera = A, Meč = B, Elektrický prúd = C, Voda = D, Oheň = E a Štipec je F. a čísla tvorov zvoľte podľa toho, do akého obrázku ste umiestnili tvora v klietke - či do ET1, ET2, ET3 alebo ET4). RadioButtonům nastavte Checked na False (okrem Sekera), a Caption na: Sekera = Sekera, Mec = Meč, Elektro = E.Proud, Voda = Voda, Ohen = Oheň a štipec = Skřipec. A teraz už len napísať veľmi jednoduchý program a umiestniť veci na správne miesto (napr. Tých 6 Image voľného mená, do ktorých pre lepší vzhľad umiestnite ilustrácie k mučiacim nástrojom a umiestnite ich blízkosti RadioButton) ...

Nebudeme to preťahovať a skočíme do toho rovno po hlave :-) . Začnime priradením obrázkov mučiacich nástrojov k RadioButtonům. Po kliknutí na nejaký z obrázkov nastavte napr .: Mec.Checked: = True;
Ostatné RadioButton automaticky nebudú zaškrtnuté. Takže po kliknutí na obrázok meča sa zaškrtne RadioButton s nápisom Meč. To isté urobte aj u ostatných obrázkov! A teraz vám tu napíšem hlavné zdrojový kód, ktorý použijete pre každý SpeedButton pre 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 číslom za ET v názve SpeedButtonu (takže u ET1 bude miesto § jednička (1)). Potom už len skontrolovať, či sa výsledky pokusov zobrazujú pod správnym tvorom a pod labelom Vysledky (má Caption "Výsledky jednotlivých pokusov:") a či sú pri sebe spráné obrázky nástrojov u správnych RadioButton a tie všetky pod labelom Nastroje (Caption = Nástroje :) (tá dvojbodka tam patří- nie je to smajlík! Tie sú grafické). No a XXProfesor je hotový. Môžete si ho aj stiahnuť (na konci článku).

Delphi
Pozrite na to! Sme ešte len pri štvrtom bode a už som vám povedal taj jedného svojho programu. Tak ideme ďalej! A máme tu hneď jednu zaujímavú vecičku (aby ste si uvedomili, že aj celkom zábavná vec môže byť ľahko naprogramovatelná- stačí len nápad). A to:

Žrebovanie

To je hra, ktorá (ako ste sa mohli dočítať v TVORBE zožala najväčší úspech, keď som chodil na ZŠ. A teraz sa s vami podelím o 1. verzii (rovnako ako u XXProfesora - veď aj ZOOProfesor bol tvorený z 1. verzia): najprv vložte panel (tentoraz zhezčuje vzhľad okna), pomenujete ho opäť HlPanel (áno, veľa používam panely - je to lepšie ako program zo sto šesťdesiatich siedmich oknami nie? Delphi
), Align nastavte na alClient, BevelInner na bvLowered a Color na clGray. Rozmery okna nastavte na: Width = 162 a Height = 214. Do HlPanelu vložte Button (áno, prostý Button) s Caption X a Name Exit. Do procedúry OnClick napíšte púhe Close ;.

Teraz už môžeme nastaviť zvyšok vecí okna. Ja som ho pomenoval Project, ale to je úplne jedno. Hlavné sú ostatní parametre: ActiveControl je HlPanel, BorderStyle nastavte na bsNone a Position bude poScreenCenter. To by bolo. Teraz, keď program spustíte, pôjde okno zatvoriť iba tlačidlom Exit (s nápisom X - to má vyzerať ako krížik na zatvorenie okna!). Teraz vložte Timer a pomenujte ho Zmenit. Jeho Interval bude 200. predpíše si premenné:

Playing : Boolean;
Jmeni, Odmena, pf : Integer;

A pri okne do procedúry OnCreate napíšte:

Playing := True;
Jmeni := 10;

A teraz vložíme zvyšné objekty ...

Najprv vložte 3 panely (obr1, Obr2 a Obr3). Pri všetkých nastavte Height aj Width na 41. obr1 (Left = 8, Top = 24) bude obsahovať Shape pomenovaný Shp1 (Left aj Top = 1, Pen.Style = psClear, Height aj Width = 39), Obr2 (Left = 56, top = 24) bude obsahovať Shape Shp2 (s rovnakými vlastnosťami, ako Shp1) a v Obr3 (Left = 104, top = 24) opäť Shape a tentoraz s Name Shp3 (vlastnosti ako u Shp1 a Shp2). To by sme mali 3 hlavné žrebovacie obrázky. Teraz umiestnime tlačidlo (Button), ktoré pomenujeme Los. Caption bude Zastaviť, Height 17, Left = 2, Top tiež 2 a Width bude 55. Vložte (do HlPanelu) 7 Label (Kc, Korún, koruniek, Kredit, Staviť, Vyhra, Vyrobené), 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 zárobok). Ešte vložte SpinEdit (ja vám hovoril, že ho veľa používam (alebo nehovoril? Delphi
) A pomenujte ho čiastkou.

A teraz doplňte parametre podľa tabuľky:

name caption Left top height width font
kc Sk 131 160 auto auto Tučný 10
korún Sk 130 75 auto auto Tučná kurzíva 10
koruniek Sk 131 120 auto auto Tučný 10
kredit Vaša aktuálna imanie: 7 144 auto auto Tučný 10
staviť staviť: 5 76 auto auto nemeniť
vyhra Posledná výhra: 7 104 auto auto Tučný 10
vyrobené (Dátum výroby) 58 5 auto auto MS Serif 7 strieb.
prachu 10 auto auto auto auto Tučný 10
zárobok 0 auto auto auto auto Tučný 10
čiastku X 40 72 26 89 Tučná kurzíva 10
vysvetlivky: X = neobsahuje túto položku auto = vypočíta sa samo zo zadaných hodnôt

U Prachu a zárobok nastavte Align na Alright au čiastku nastavte maxvalue na 10, MINVALUE tak na 0 a Value na 1. A teraz už len vlastný program:

A teraz si vám dovolím napísať procedúry a ku každej popísať, čo sa deje: Najprv procedúra, ktorá sa zavolá (spustí, vykoná, alebo ako chcete ...) potom, čo kliknete na tlačidlo 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 premenná, ktorá nám určuje, či sa mení symboly žrebovania. Ak sa teda žrebuje a vy kliknete na tlačidlo, zmení sa nápis na tlačidle na "Žrebovať", Playing sa zmení na False (to znamená, že sa už nemení tvary), príkaz Zmena.Enabled: = False; sa zastaví časovač Zmena a výhry; spustí procedúru výhry (tú sme zatiaľ nenadefinovali). A ak nebud Playing True, nápis sa zmení na "Zastaviť", zneprístupní sa tlačidlo Los (nedá sa naň kliknúť (ale to sa v časovači zmení. Je to kvôli neustálemu zastavovanie a spúšťanie rovnakej zostavy tvarov za účelom výhry veľké sumy!) - dosiahne sa toho príkazom Los.Enabled: = False;), Playing sa zmení na True a spustí sa časovač. A teraz preberieme, čo sa stane každú pätinu sekundy (čiže čo napíšeme do procedúr 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;

Najprv sme sprístupnili tlačidlo Los (viz. Vyššie), potom sme spustili generovanie náhodných čísel a potom sme do miestnej premennej x (Integer) dosadili náhodné číslo. Ak je číslo x 0, Shp1 sa zmení na kruh, inak na obdĺžnik. To isté sa opakuje pre všetky tri tvary.
Ale poďme ďalej:

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äť dosadíme za x náhodné číslo do 6 (vrátane nuly a okrem 6 = šestka tam nie je!). Ak je číslo 0, Shp1 jedna bude čierny, ak 1, je biely, 2 = červený, 3 = modrý, ak x 4, bude Shp1 zelený a ak niečo iné (= 5), bude žltý. To sa opakuje pre všetky tri Shpey (to je nižšie :)

  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 sú celé dve procedúry, ktoré sú automaticky vytvořitelné, ale chýba nám ešte jedna ...

A to je procedúra výhra, ktorú musíte preddefinovať hore (pred private a public za ostatné predpísanie procedúr). Ďalej už proste píš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;

Najprv uložíme do premennej Odmena hodnotu, akú ste stavili (ktorú ste zadali do sumy). Ďalej sa miestna premenná napuchne nastaví na Fasle (to znamená, že hráč nemá zatiaľ žiadnu výhru). A teraz začína najdôležitejšia časť programu: BODOVANIE! Pokiaľ bude mať Shp1 a Shp2 rovnaký tvar a zároveň ich tvar Shp3 rovnaký ako tvar Shp2 (to znamená, že majú všetky Shpy rovnaký tvar - nižšie to budem písať takto (skrátene)), Odmena sa vynásobí päťkrát a napuchne zmení na True (hráč už niečo vyhral).

if (Shp1.Brush.Color = Shp2.Brush.Color) and (Shp3.Brush.Color = Shp2.Brush.Color) then
begin
  Odmena := Odmena * 5;
  odme := True;
end else

Ak majú všetky Shpy rovnakú farbu, vynásobí sa Odmena tiež 5x (a napuchne zmení na True (to už písať nebudem)). Ak však všetky farby nie sú rovnaké, pokračuje program ďalej:

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

Ak majú Shp1 a Shp2 rovnakú farbu, vynásobí sa Odmena 2x, ak majú aj rovnaký tvar a 1x, ak nie. A či to neplatí, program pokračuje v zisťovaní podobnosti farieb ďalej:

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

Ak majú Shp2 a Shp3 rovnakú farbu, stane sa to isté, ako u predchádzajúcej časti.

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 nakoniec sa ešte zistí farebná a tvarová podobnosť Shp1 sa Shp3. A tým končí skupina IFU spojených ELSE. Tým ale procedúra 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;

Ak ste sa netrafili do Zane výhernej varianty (napuchne je False), Odmena je nula. Do nápisu Vysledok sa dosadí Odmena bez vsadenej sumy, prevedená na string. K menu (tj. Koľko vlastníte peňazí) sa pripočíta Odmena a odpočíta stavená čiastka (Castka.Value). Vysledok sa prevedie na string a zapíše do Prachu (nápis, ktorý informuje hráča o jeho majetok) a maximálna hodnota vsadených peňazí sa přeřídí na hodnotu peňazí na konte hráča.

  if Jmeni < 1 then
  begin
    Castka.Enabled := False;
    Los.Enabled := False;
    Castka.Value := 0;
  end;
end;

A nakoniec, ak je meno menšie, než 1, nemôžete (logicky) nič staviť (suma sa zneprístupní), Nemôžete kliknúť na tlačidlo Los a stavená čiastka sa nastaví na 0. A tým máte Losovanie hotové. Navyše si môžete opäť stiahnuť na konci článku.

Delphi
Tak čo? Her už máte dosť, tak na záver jeden program. A rovnako ako XXProfesor sa bude jednať o program, ktorý môžete vylepšiť (tentoraz nie zmenou vzhľadu, ale rozšírením funkcie. Aké funkcie? Delenie. Áno, teraz vám poviem (napíšem), ako vyrobiť Delenie (a to 2.verzia!):

Delenie

Začnime nastavením okna: Width = 340, Height = 290, v položke BorderIcons nastavte všetko (okrem biSystemMenu) na False, BorderStyle = bsDialog, Caption = Program na písomné delenie pre kontrolu a podvodníkov, Color si nastavte, ako chcete a Position = poScreenCenter. A teraz si vložíme objekty: 3x Label (delenie, RovnaSe a Zostane), 1 Button (Vypocet), 2x SpinEdit (delenec, deliteľ) a 11x Panel (p1, p2 až p9, Podiel a Zvyšok).
A čo 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
deliteľ --200 120 8 23 49 XXX
podiel 2 185 8 23 73 XXX
zvyšok 100 280 8 23 27 XXX
vypocet vypočítať príklad 185 40 17 122 Tučné 8
delenie : 112 5 auto auto Tučné 14
RovnaSe = 170 7 auto auto Tučné 14
zostane Zb. 260 13 auto auto Tučné 8
Vysvetlivky: - = položka Value (nie Caption) XXX = Courier New, Tučné 8 auto = vypočíta sa samo zo zadaných hodnôt

U panelov a SpinEditů nastavte Color na clWhite, delenec bude mať Maxlength 9, maxvalue 999999999, MINVALUE tak 1 a deliteľa Maxlength = 3, maxvalue 999 a MINVALUE tak tiež 1. A u všetkých panelov nastavte BevelInner aj BevelOuter na bvLowered. A môžeme sa pustiť do programovania ...

Je tu len jedna procedúra. Keď 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, teraz už máme nastavené nápisy v p1 až p9 na nič a umiestnené v základnej pozícii. Vysledok je tiež zatiaľ prázdny, premenná Dlt má hodnotu Delitel.Value a premenná Dlzka má hodnotu o jedna väčšia, 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 nebolo čo vysvetľovať. Jednoducho som vydělelil delenec deliteľa a vyšiel mi nápis do podielov. A zvyšok som urobil rovnakým spôsobom.

// 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

Pokiaľ je v Delnci prvé písmeno (prevedené na Integer) väčšie, alebo rovné deliteľ, posunú sa všetky pčka o 8 pixelov doľava od základnej pozície, Pos bude mať hodnotu 2 a Dlnc bude mať hodnotu prvého písmena v delenec (samozrejme prevedeného na Integer). Ak však nie, pokračuje program tu:

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 boli opäť dve na seba nadväzujúce IFOV časti spojené ELSE. 1 .: Ak je nápis v delenca na prvom až druhom mieste väčší alebo rovný deliteľ, Pos bude 3 a Dlnc ona 2 písmená na začiatku. A pozície pček zostane základné. 2 .: Keď bude 1. až tretie písmeno delenca väčšie alebo rovné deliteľ, bude Pos 4 pčka sa posunú o 8 pixelov doprava a Dlnc bude opäť mať hodnotu oných zisť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 nakoniec, ak nesedelo ani jedno z predchádzajúcich zistení, posunú sa pčka o 16p doprava Pos bude 5 a Dlnc budú prvé 4 písmená.

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áver // Prípravy sme ešte doplnili, že ak je Dlenec menšia ako Deliteľ, budú mať pčka pozíciu, ktorú sme im zadali v Object Inspector, Pos bude 4 a Dlnc prvé 3 písmená. A teraz sa pustíme do vypísania výsledkov:

// 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

Pokiaľ bude Pos menšia ako Dlzka, potom sa skúsi (to je to try - nepreberala sme to, ale treba to pochopíte) vydeliť Dlnc Dltlem a pripísať k Vysledok. Nápis p1 bude zvyšok po vydelení Dlnce Dltlem a číslo delenca na "post" mieste. Dlnc sa nastaví na obsah p1 a k Posu sa pridá jednička. Ak to nepôjde (Ak sa napríklad bude deliť nulou), prebehne časť programu od EXCEPT do END ;, teda Vysledok bude 0 a p1 bude prázdne.

begin
  if Cha = True then
  begin
    p1.Caption := Zbytek.Caption + ' ';
    Cha := False;
  end;
end;

Pokiaľ nebude Pos menšia ako Dlzka a Cha bude True, nápis v p1 sa nastaví na medzeru a Cha na False. Tieto 2 časti programu napíšte celkom deväťkrát (pre každý mezipočet (mezizbytek)). Jediné, čo zmeníte, je, že miesto p1 napíšete p2, p3 atď. Keď skončíte u p9 (nič si z toho nedělejte- je to to isté!):

// 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! Ak si to chcete stiahnuť, tak môžete o kúsok nižšie! Programy sú hotové, návod je dopísanie a ja si konečne dám šlofíka :-) ...

Delphi

 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 425x (1.37 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Delphi

 

Predchádzajúci článok
Bitmapy a vlastné maľovanie
Všetky články v sekcii
Delphi
Preskočiť článok
(neodporúčame)
Matematické funkcie a funkcie, práca s Shell, animovaná ryba
Článok pre vás napísal Kukensius
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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