Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu


Úvod do jazyka OPL (13)

aktualizováno 
Pokračujeme v pokročilejším programování v OPL.

Víceřádková editace

dEDITMULTI adresa&, vyzva$, sirka%, vyska%, max_delka_textu%

Nejsložitějším příkazem definujícím část dialogu je bezesporu dEDITMULTI. Tento příkaz vloží do dialogu oblast pro editaci víceřádkového textu. Prvním parametrem příkazu je adresa pole, do kterého budou uložena data; po něm následuje text výzvy a šířka a výška okna ve znacích. Posledním parametrem je nejvyšší povolená délka textu.

Text je ukládán přímo do oblasti v paměti; první 4 byte této oblasti obsahují délku textu jako 32bitové číslo a po nich začíná vlastní text, jehož délka je menší nebo rovna poslední proměnné na řádku.

Oblast v paměti je možné rezervovat příkazem ALLOC, nebo použít - pro jednoduchost - pole 32bitových čísel jako v následujícím příkladu. Funkce ADDR(pole&(1)) vrátí adresu prvního prvku pole pro použití na místě prvního parametru. Pole musí být dostatečně veliké, aby do něj bylo možné bezpečně uložit nejvyšší povolenou délku textu. Protože klávesa Enter se používá k přechodu na nový řádek, nesmíme zapomenout uvést v dialogu tlačítka (příkaz dBUTTONS), aby jej bylo možné ukončit i jinak než klávesou Esc.

PROC multi:
  LOCAL text&(500)
  text&(1)=0 : REM -- žádný text --
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "Text", 30, 6, (500-1)*4
  dBUTTONS "Konec", %e, "Ulož", %s
  DIALOG
ENDP

Do tohoto víceřádkového pole můžeme text nejen zapisovat, ale i používat klávesové zkratky pro kopírování a vkládání textu. Text není možné nijak formátovat, nicméně můžeme používat obecné znaky jako tabulátor (ASCII $09), konec odstavce ($06), konec řádky ($07), nedělitelnou mezeru ($0F) a další - podívejte se do manuálu na příslušné heslo.

Text do pole můžeme vložit například použitím příkazu POKEB, který uloží na adresu, jež je jeho prvním parametrem, byte, který je jeho druhým parametrem. Nesmíme zapomenout uložit do prvních 4 byte pole aktuální délku textu.

PROC multi2:
  LOCAL text&(65), t$(255), i%, addr&
  t$="Toto je vzorový text..."  
  text&(1)=LEN(t$)
  i%=1
  addr&=ADDR(text&(2))
  WHILE i%<=text&(1)
    POKEB addr&, ASC(MID$(t$, i%, 1))
    i%=i%+1
    addr&=addr&+1
  ENDWH
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "", 30, 6, 255
  dBUTTONS "Konec", %e, "Ulož", %s
  DIALOG
ENDP

Po skončení dialogu je pak v prvních 4 byte uložena aktuální délka textu v rámečku a poté následuje vlastní text. Text můžeme číst po znacích funkcí PEEKB, které předáváme adresu v paměti a která vrací byte, který je na ní uložen.

PROC multi3:
  LOCAL text&(65), i%, addr&
  text&(1)=0
  dINIT "Jednoduchý editor"
  dEDITMULTI ADDR(text&(1)), "Text", 30, 6, 255
  dBUTTONS "Konec", %e, "Ulož", %s
  IF DIALOG
    PRINT "Text je: ";  
    addr&=ADDR(text&(2))
    WHILE i%<text&(1)
      IF PEEKB(addr&+i%)>=32
        PRINT CHR$(PEEKB(addr&+i%));
      ELSE
        STYLE 4 : PRINT "<";PEEKB(addr&+i%);">"; : STYLE 0
      ENDIF
      i%=i%+1
    ENDWH
    GET
  ENDIF
ENDP

Při použití příkazu dEDITMULTI je potřeba ohlídat si, aby nebyl text delší než pole, do kterého jej ukládáme. Pokud se pokusíme uložit do pole více znaků, než je jeho skutečná velikost v byte, dojde ke kritické situaci a zhroucení operačního systému.




Nejčtenější

Vytrolil T-Mobile, koupil doménu z reklamy a přesměroval ji na konkurenci

T-Mobile Hotel Růženka

Nová reklamní kampaň T-Mobilu se odehrává ve smyšleném horském hotelu Růženka. Ovšem když zkusíte doménu...

Nepoužívejte smartphony Huawei a ZTE, varují Američany FBI, CIA i NSA

Huawei Mate 10 Pro bude v USA k dostání u BestBuy

Huawei chtěl letos vzít útokem Spojené státy, a to s pomocí tamních klíčových operátorů. Z možné dohody však nakonec...



Vodafone kouzlí s neomezeným tarifem. Nestojí ani 500 korun

Vodafone nabízí ve svém e-shopu speciální neomezený tarif.

Pokud jste si chtěli pořídit neomezený tarif od Vodafonu, museli jste dosud počítat s měsíčním poplatkem ve výši...

Vše, co od smartphonu očekáváte, jen za 6 000. Test Honor 9 Lite

Honor 9 Lite

Honor 9 Lite je žhavou novinkou na českém trhu a také je potenciálním prodejním hitem. Smartphone s moderními funkcemi...

Huawei nehraje fér. Neprodávaná novinka má přes sto falešných recenzí

Huawei Mate 10 Pro

Huawei se snaží protlačit na obrovský americký trh. Ovšem proti jsou operátoři. Ve volném prodeji pak čínský gigant...

Další z rubriky

Šetří místo i data. Dietní Messenger od Facebooku je i v Česku

Aplikace Facebook Messenger Lite je dostupná i v Česku

Facebook Messenger je jedním z nejpoužívanějších kecálků, ale ne všechny telefony si s ním poradí. Loni se tak zrodila...

S těmito aplikacemi se o dovolené neztratíte. Najdou let i levný hotel

Ilustrační snímek

Místo slovníku, mapy a průvodce už řada lidí vyráží na dovolenou na neznámé místo jen se svým telefonem. V mnoha...

Aplikace ukazovala otravující čísla. Data kradl antivir přímo z mobilů

Škodlivý kód Cooligan napadá zařízení s Androidem 4 a 5

Zajímavý model vymyslelo studio DU. Jedna jejich android aplikace ukazovala, kdo volá, včetně obtěžujících čísel...

Domácí chipsy pro děti
Domácí chipsy pro děti

Upečte si domácí chipsy, ale pozor, jsou velice návykové.



Najdete na iDNES.cz