Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
-
30. září 2024
-
4. října 2024
-
14. listopadu 2024
-
11. prosince 2024
Go verze
FLASH 5 - Kalkulačka v 2.0
Flash kalkulačka
13. listopadu 2001, 00.00 | Navážeme na předchozí článek a budeme pokračovat ve vylepšování kalkulačky. Podstatným nedostatkem je velikost displeje, resp. počet zobrazovaných číslic, při zadávání čísel a také při konečném výsledku, který upravíme.
Navážeme na předchozí článek a budeme pokračovat ve vylepšování kalkulačky. Podstatným nedostatkem je velikost displeje, resp. počet zobrazovaných číslic, při zadávání čísel a také při konečném výsledku, který upravíme.spam_email('.cz', '@', 'centrum', 'filip.zavadil');>
Do vlastností textového pole displej přidáme ještě + e, aby se čísla zobrazovala ve tvaru 2.71e+20 nebo 2.71e-20. Nyní nám zbývá vyřešit poslední problém, a tím je počet čísel zobrazovaných na displeji. Možná víte o možnosti Max. chars (max počet znaků) u textového pole typu input, takže bychom jednoduše dynamické textové pole displej mohli přeměnit, ale tohle je špatná cesta, protože omezení počtu znaků nebude fungovat (fungovalo by jen v případě přímého zápisu do tohoto pole). Proto budeme muset vytvořit funkci na omezení počtu znaků na displeji:1) Funkce bude omezovat počet znaků při psaní na displej. Nezapomeneme na znaménko a také na to, že po napsání max. počtu znaků na displej budeme moci změnit znaménko "+/-", a v tomto případě musíme nadefinovat akci, která bude řešit i tuto možnost.
Do prvního framu vrstvy action našeho souboru přidáme proměnnou, kde nadefinujeme délku displeje disdelka="15"; na níž se budeme dále odkazovat (kdybychom později chtěli změnit délku displeje, stačí jen změnit implicitně nastavenou hodnotu na jinou). Funkci pridavani přeměníme následovně - viz. ActionScript pod textem, omezíme tak délku displeje. Musíme také počítat s tím, že je možné změnit u čísla znaménko (+/-) nebo může být záporné, tomu se budeme věnovat později. Můžeme tedy napsat pouze 15 čísel (za číslo se počítá i desetinná tečka).
stop ();2) Při početních operacích nemůžeme jednoduše odříznout zbytek reálného čísla nebo zaokrouhlit, protože by docházelo ke značnému zkreslení, i když by to bylo určitě jednodušší. Musíme počítat s hodně velkými (nebo malými) čísly ve tvaru 2.71234567890123456789e+20 (e-20), která musíme převést na danou délku displeje. K tomu bude sloužit následující funkce, kterou vytvořil a tímto mu chci poděkovat za spolupráci, přidal jsem k ní podrobné komentáře. Přidáme další vrstvu do hlavní scény s názvem kontrola a umístíme do ní funkci kontrola.
displej = "0";
// na displeji bude nula
pamet = "0";
// vynulovani pameti
disdelka = "10";
// delka displeje
function pridani (cislo) {
// funkce pro pridani cisel na displej
if (clear) {
clear = false;
decimal = false;
displej = "0";
}
// a kontrola delky cisla pri zadavani
if (displej == "0" && cislo != "." && displej.length < disdelka) {
displej = cislo;
} else if {(displej.length < disdelka) {
displej = displej + cislo;
}
}
// PRIKLADY UVADENE V POZNAMKACH JSOU PRO DELKU DISPLEJE 10 (disdelka="10";)
function kontrola (); {
displej = displej.toString();
// prevede displej na string (textovy retezec)
znamenko = displej.substring(0,1);
displej = displej.substring(1);
porovnani = "";
// porovnani zjistuje, zda cislo, ktere ma byt zobrazeno, je vetsi nebo mensi nez cislo,
// ktere se maximalne vejde na displej, napr.: displej ma pet mist, nejvetsi zobrazitelne
// cislo bez exponentu je 99999
for (i=1; i<disdelka; i++) {
// smycka for na zaklade udaje o delce displeje vygeneruje cislo, ve kterem jsou same devitky
// smycka bezi tak, ze v prvnim pruchodu vytvori string "9", ve druhem "99"....
// a v zahlavi smycky je omezeni, dokud je "i" mensi nez disdelka
porovnani += "9";
}
if (displej.length>(disdelka-1) && displej.indexOf("e") != -1) {
// pokud bude napr. cislo 2.1234567890123456789e+22,
// jsou vynechana nadbytecna des. mista a ponechá se exponent e+22
delic = displej.indexOf("e");
// pokud displej obsahuje "e"
string1 = displej.substring(0, delic);
// ohodnocen ma by retezec 0 a delic udava pocet znaku z leve strany,
// ktere maji byt pouzity jako startovaci cara
string2 = displej.substring(delic);
// ohodnocen ma byt retezec delic
delkaVyrazu = disdelka-string2.length-1;
// delkaVyrazu = delka displej - ciselne ohodnoceny pocet znaku promenne string2 - 1
// -1 protoze jednu pozici zabira znamenko
displej = string1.substr(0, delkaVyrazu)+string2;
// displej = ohodnoceny string1 (napr. 2.123456) + string2 (napr. e+22)
}
if (displej.length>disdelka-1 && parseFloat(displej)>parseFloat(porovnani)) {
// pokud bude cislo delsi nez delka displeje (napr. 1234567890123456789),
// jsou vynechana nadbytecna des. mista a cislo se uvede v exponencialnim tvaru
num = Math.round(parseFloat(displej));
// zaokrouhli displej
stringNum = num.toString();
// num je prevedeno na string; funkce toString zarucuje, ze bude pracovano s textovym retezcem,
// protoze retezcove operace s cisly nefunguji
pocetDesitek = stringNum.length-1;
// napr. delka stringNum je 10, pocet desitek pak 10-1=9
apendix = "e+"+pocetDesitek;
// apendix = e+9
delkaVyrazu = disdelka-apendix.length-1;
// delkaVyrazu = disdelka napr. 10 - 2 - 1 = 7
meziVypocet = (num/Math.pow(10, pocetDesitek)).toString();
// meziVypocet = (num/Math.pow(10,9)).toString(); vydeli tedy zaokrouhleny displej cislem
// 1000000000 a prevede na string
displej = meziVypocet.substr(0, delkaVyrazu)+apendix;
// displej = hodnota meziVypocet, kdy je pouzito 7 cisel zleva a prida se apendix = napr. 1234567e+9
}
if (displej.length>disdelka-1) {
// pokud je cislo delsi nez delka displeje, jsou vynechana nadbytecna des. mista
displej = displej.substr(0, disdelka-1);
if (displej.indexOf(".") == displej.length-1) {
// pokud je posledni znak po oriznuti des. tecka, vymaze se
delicT = displej.indexOf(".");
displej = displej.substring(0, delicT);
}
}
displej = znamenko+displej;
Number.toString
Syntaxe: myNumber.toString (zaklad);
Argument: zaklad specifikuje numerický základ
(od 2 k 36) k použití pro number-to-string přeměnu. Jestliže
nespecifikujete zaklad, implicitní hodnota je 10.
Popis: Metoda; vrací řetězcovou reprezentaci specifikovaného číselného
objektu myNumber. Funkce toString zaručuje, že bude
pracováno s textovým řetězcem, protože řetězcové operace s čísly
nefungují.
Příklad:
myNumber = new Number (1000);
(1000).toString (2);
Vrací řetězec, který obsahuje binární reprezentaci čísla 1000.
String.indexOf
Syntaxe: myString.indexOf (hodnota); myString.index
of (hodnota, start);
Argumenty:
hodnota je celé číslo nebo řetězec, který specifikuje podřetězec
hledaný uvnitř myString
start je celé číslo, které specifikuje výchozí bod podřetězce,
tento argument je nepovinný
Popis: Metoda; hledá řetězce a vrací pozici prvního výskytu z hodnoty,
jestliže hodnota neexistuje, metoda vrací -1.
Příklad:
myNumber = new Number (1000);
(1000).toString (2);
Vrací řetězec, který obsahuje binární reprezentaci čísla 1000.
Tuto funkci kontrola zavoláme do vrstvy vypocty, přidáme ji tedy
do funkce vypocty následujícím zápisem - kontrola(); stejně jako
do vrstvy proc, tedy funkce proc, a rovněž ji využijeme pro
kontrolu délky displeje při změně znaménka (+/-). A to není všechno, kontrolovat musíme veškerá tlačítka, které nejsou zahrnuty do funkce vypocty nebo nejsou konstantami, takže do těchto tlačítek zavoláme funkci kontrola (sin, cos, tag, log, ...).
Určitě jste si všimli, že jsem jednotlivým tlačítkům přiřazoval pro lepší
ovládání i klávesy, a pro ještě větší přehlednost si uděláme malou nápovědu nebo
mapu kláves, kterými lze kalkulačku ovládat.
Řada | Sloupec 1 | Slopec 2 | Sloupec 3 | Sloupec 4 |
1) | M | R | BackSpace | C |
2) | U | I | O | F |
3) | Delete | End | PageDown | A |
4) | H | J | B | N |
5) | E | L | W | G |
6) | P | Home | Insert | X |
7) | 7 | 8 | 9 | / |
8) | 4 | 5 | 6 | * |
9) | 1 | 2 | 3 | - |
10) | 0 | , | Enter | + |
Tutéž nápovědu můžeme udělat i ve Flashi nějakým nápaditým způsobem - určitě
vytvoříme tlačítko s otazníkem, u něhož se po kliknutí objeví nápověda s
danými klávesami, ale to už nechám na vás. Samozřejmě si můžete klávesy předefinovat podle vlastních
potřeb.
Zdrojový soubor po úpravě délky displeje.
Obsah seriálu (více o seriálu):
- FLASH - vyčkávající Trojský kůň
- FLASH - vyčkávající Trojský kůň - druhý díl
- FLASH - vyčkávající Trojský kůň - třetí díl
- FLASH - ANIMAČNÍ TECHNIKY I.
- SEZNAMTE SE - FLASH 4 - I
- SEZNAMTE SE - FLASH 4 - II
- SEZNAMTE SE - FLASH 4 - III
- SEZNAMTE SE - FLASH 4 - IV
- SEZNAMTE SE - FLASH 4 - V
- SEZNAMTE SE - FLASH 4 - VI
- SEZNAMTE SE - FLASH 4 - VII
- SEZNAMTE SE - FLASH 4 - VIII
- SEZNAMTE SE - FLASH 4 - IX
- FLASH - X - animace bitmapy
- JAK DOSTAT ČEŠTINU DO FLASHE ?
- FLASH XI - 3D hvězda, zvuk na pozadí
- FLASH XII - akce pro tlačítka
- FLASH XIII - jak na preloader a jak ho umístit
- FLASH XIV - intro a menu
- FLASH XV - animace tlačítka
- FLASH XVI - jednoduché menu
- FLASH XVII - akce Tell Target poprvé
- FLASH XVIII - akce Tell Target podruhé
- FLASH XIX - akce Tell Target potřetí
- FLASH XX - konverze MP3 na WAV
- FLASH XXI - vlnění, kruhy na vodě
- FLASH XXI - dokončení
- FLASH 4 - Text Field Properties
- FLASH 4 - Zvláštní výběr křivek a čar
- FLASH 4 - Optimalizace křivek
- Flash 4 a QuickTime video
- FLASH 4 - preloader
- FLASH 4 - Duplikování filmového klipu
- FLASH 4 - pohybování textem pomocí kurzoru
- FLASH 4 - Speciální textové vlastnosti
- Macromedia FLASH 4 - postupné vypisování textu
- FLASH 4 - Spirála
- FLASH 4 - natažení externího .swf
- Macromedia FLASH 5 - načítaní HTML souboru
- FLASH - komunikace mezi dvěma SWF soubory
- FLASH - hrátky s křivkou
- FLASH - menu s posuvníkem
- FLASH - menu s posuvníkem (dokončení)
- FLASH 5 - pseudo 3D menu (dokončení)
- FLASH 5 - menu
- FLASH - Color Effect
- Macromedia FLASH 5 - analogové hodiny
- FLASH 5 - "smart" clip
- Vánoční přání v Macromedia FLASH 5
- FLASH 5 - ohňostroj
- Macromedia FLASH 5 - preloader
- FLASH 4 - animované menu
- Macromedia FLASH 5 - změna kurzoru
- Flash - Efekt založený na nedokonalosti bitmap
- Flash 4 - on-line výpočet ceny - 1. díl
- Flash 4 - on-line výpočet ceny - 2. díl
- Odeslání dat z formuláře ve Flashi 4 - II.
- Macromedia FLASH 5 - odesílání formuláře
- FLASH 4 - postupné odkrývání textu - tzv. maskovací efekt
- FLASH 5 - jednoduchý kaleidoskop nebo projekce?
- Flash 4 - menu pomocí ovládání Movie Clipu
- FLASH 5 - Vypisování textu
- Flash 4 - efektní ukončení *.exe prezentace + práce s více scénami
- Macromedia FLASH 5 - ovládání hlasitosti
- FLAX 1.12 - program na textové efekty v SWF
- FLASH 5 - matematické objekty (1. část)
- Flash4 - animace obličeje
- Flash 4 - Hra na způsob šipek
- Flash 4 + Swift 3D - dokonalá souhra!
- Macromedia FLASH 5 - změna barvy pozadí a textu
- Flash 5 - aktuální datum a čas
- Flash - 2D animace - 3D efekt
- FLASH 5 - prohlížečka obrázků s maskováním
- FLASH A JAVASCRIPT
- FLASH 5 - reversní pohyb
- Jpeg2Swf v1.0 beta - převod jpeg do swf aneb flashwebkamera
- SWISH v2 - Flash bez Flashe
- Jak docílit plynulé animace ve formátu Flash
- Flash - jdoucí Elvis.
- Flash - running man.
- Macromedia Flash - posun pozadí
- Flash - mořská hladina.
- Flash - animace hořící sirky
- Flash - mávání na rozloučenou
- Flash - vzhůru v let
- Flash - animace řeči
- FLASH 5 - Kalkulačka v 1.0
- Flash - BOXující Elvis
- Flash + Flashamp - animace řeči
- Flash - ženský běh
- FLASH 5 - Kalkulačka v 2.0
- FLASH - Programy na analýzu a úpravu SWF souborů
- FLASH 6 - Jaký bude a kdy bude?
- FLASH - Programy na analýzu a úpravu SWF souborů 2
- FLASH MX - novinky pod lupou
- Flash desatero
-
14. května 2014
Jak vkládat snímky do galerií a soutěží? Stručný obrazový průvodce
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
12. června 2012
-
9. dubna 2014
-
5. ledna 2017
-
6. září 2004
OKI snižuje ceny barevných laserových tiskáren C3100 a C5200n
-
13. května 2004
-
19. ledna 2004
QuarkXPress Passport 6: předvedení nové verze na konferenci Apple Forum 27.1.2004
-
6. února 2001
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
14. října 2024
-
10. prosince 2024