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ší

Tak bude vypadat letošní nejlevnější iPhone, zepředu připomíná desítku

Render chystaného LCD iPhonu s 6,1palcovým panelem ve společnosti menšího...

Uvedení nových iPhonů se blíží, jejich oficiální odhalení proběhne už za dva měsíce. Víme, že budou tři a alespoň z...

Blesková krádež. Zloději za 30 sekund vybílili obchod Applu

Blesková krádež v kalifornském Apple Storu

Skupina mužů za méně než minutu vykradla před očima zákazníků i personálu obchod Apple Store v kalifornském Fresnu....



Tomuto mobilu energie jen tak nedojde. Utrhne vám ovšem kapsu

Ulefone Power 5

Do redakce nám zavítal neobvykle vybavený smartphone značky Ulefone. Velké a těžké monstrum s názvem Power 5 má baterii...

Xiaomi pokračuje v dumpingových akcích. Redmi S2 bude za 300 korun

Nová prodejna mobilů v Olomouci přilákala stovky lidí

Agresivní marketing čínské značky v Česku pokračuje. Xiaomi otevírá třetí obchod a tradičně první den nabízí produkty s...

Recenze: Nokia 8 Sirocco je skutečně luxusní a má skvěle odladěný Android

Nokia 8 Sirocco

Firma HMD Global postupně rozšiřuje svou nabídku smartphonů Nokia i do vyšších pater. Prozatím tou nejlepší nokií,...

Další z rubriky

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

Google loni zlikvidoval 700 tisíc aplikací

Mobilní aplikace

Z aplikačního obchodu Google Play bylo loni odstraněno 700 tisíc aplikací, většina zmizela prakticky ihned po umístění...

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

Najdete na iDNES.cz