CorelDRAW a skripty (2) - Trocha teorie - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

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:



Go verze

CorelDRAW a skripty (2) - Trocha teorie

corel

16. srpna 2002, 00.00 | CorelSCRIPT není nic jiného než obyčejný skriptovací jazyk, kterým lze ovládat produkty Corelu. Dnes si probereme několik základních vlastností.

Pokud už jste se někdy dostali do křížku s jakýmkoliv programovacím jazykem, CorelSCRIPT vás příliš nepřekvapí. Primárně je určen k ovládání aplikací Corelu, ale lze v něm naprogramovat věci, které s Corelem naprosto nesouvisí. Když se podíváte do adresáře s ukázkovými skripty, objevíte spoustu zajímavých zbytečností. Přehrávač CD, primitivní prohlížeč obrázků, plánovač úloh a několik dalších. Nezbývá než se lehce pousmát, nicméně jako ukázka jak udělat to, či ono poslouží dobře.

Základy
Jako každý programovací jazyk, tak i CorelSCRIPT je složen z jednotlivých příkazů, které se píší odshora dolů. Příkaz je vždy na jednom řádku. Pokud vám jeden řádek nestačí, je možné použít dvě zpětná lomítka (\\) na jeho konci, v tom případě pokračuje příkaz na řádku následujícím. Komentáře se označují buď příkazem REM, nebo jednoduchou uvozovkou ' (nikoli o apostrofem). Pak se vše až do konce řádku ignoruje. Jiný zápis komentářů není možný. Za zmínku stojí první 2 řádky, do kterých je vhodné formou komentáře zapsat jednoduchý popis, ten se pak objeví v dialogovém okně otevření nebo spuštění skriptu. V rámci čitelnosti napsaného kódu je vhodné odsazovat vnořené příkazy a vkládat prázdné řádky.

REM Toto je ukázka, jak lze formátovat
REM kód pro jeho lepší čitelnost.

teplota = 28

if teplota > 25 then
    ' a tady je to, abych věděl
    message  "Sakra to je vedro, asi by" \\
           & " to chtělo jít na pivo." \\
           & " A proč vlastně ne?"
    withobject "CorelDRAW.Automation.9"
        .FileClose true
        .FileExit
    end withobject
endif

Proměnné
V názvech proměnných se nerozlišuje velikost písmen, mohou se skládat z malých či velkých písmen a-z, číslic 0-9 a znaku podtržítko (_). Prvním znakem v názvu nesmí být číslice. Dále pochopitelně není možné pojmenovat proměnnou již použitým názvem funkcí. Kompletní seznam rezervovaných slov lze nalézt v nápovědě.

REM Ukázka názvů proměnných

'Následující proměnné jsou naprosto shodné
VYSKA = 25
vyska = 25

'Správné jména proměnných
A = 8
x = 5
ctverec4 = 21
Ctverec_4 = 12
_8_pomerancu_a_2_jablka = "deset"

'Chybné jména proměnných
ctverec 7 = 58 
8vyska = 5 
123stromy = 59
text = "chyba"
'slovo text patří mezi rezervovaná, nelze jej použít

Typy proměnných, definice a přetypování
CorelSCRIPT nabízí celou řadu typů proměnných, v praxi jich ovšem využijeme jen pár. STRING pro textové hodnoty, LONG pro celá a DOUBLE pro desetinná čísla. V následující tabulce je přehled základních typů.

typ      znak  popis
----------------------------------------------------------------
STRING   $     řetězec znaků (text)
BOOLEAN        pouze hodnoty TRUE (-1) nebo FALSE (0)
INTEGER  %     celá čísla od -32 765 do 32 765
LONG     &     celá čísla od -2 147 483 647 do 2 147 483 647
SINGLE   !     desetinná čísla od -3,4E38 do 3,4E38 (přibližně)
DOUBLE   #     desetinná čísla od -1,8E308 do 1,8E308 (přibližně)

Ve výčtu ještě scházejí DATE a CURRENCY, které příliš často nepoužijeme. Posledním typem je VARIANT, který je automaticky přiřazen, pokud není deklarován jiný typ. Vzhledem k nutnosti přetypování proměnných pro různé použití je daleko vhodnější proměnné předem deklarovat. Typ lze nastavit buď přidáním odpovídajícího znaku na konec názvu proměnné, nebo deklarováním předem pomocí DIM.

REM Ukázka deklarace typů proměnných

'nastavení proměnných včetně typu
zprava$    = "Dobrý den"
cele&      = 293589
desetinne# = 3.14

'deklarace typů proměnných předem
DIM zprava AS STRING
DIM cele AS LONG
DIM desetinne AS DOUBLE

zprava    = "Dobrý den"
cele      = 293589
desetinne = 3.14

Ke změně typu proměnné slouží funkce CSTR(), CBOL(), CINT(), CLNG(), CSNG() a CDBL(). Nejčastěji používanou je CSTR(), která převede jakýkoliv výraz na typ STRING. Za zmínku ještě stojí CBOL(), která přede výraz 0 na FALSE a vše ostatní na TRUE.

REM Ukázka přetypování proměnné funkcí CSTR()

WITHOBJECT "CorelDraw.Automation.9"
    'zjistí rozměry stránky
    .GetPageSize sirka&, vyska&
    'převede zjištěné údaje na milimetry
    sirka_mm# = sirka&/10000
    vyska_mm# = vyska&/10000
    'zapíše do stránky řetězcový text s jejími rozměry
    .CreateArtisticText "Rozměr stránky je " + \\
                        cstr(sirka_mm#) + " × " + \\
                        cstr(vyska_mm#) + "mm.", -1000000, 0
END WITHOBJECT

Pole
Pole jsou speciální proměnné, které mohou obsahovat více hodnot. Index pole se píše za proměnnou, uzavřený v závorce. První index má hodnotu 1. Lze vytvářet i vícerozměrná pole.

REM Ukázka definice pole

'definice pole o 4 hodnotách
DIM barva$(4)
'přiřazení hodnot
barva$(1) = "azurová"
barva$(2) = "purpurová"
barva$(3) = "žlutá"
barva$(4) = "černá"

'změna velikosti již vytvořeného pole
REDIM PRESERVE barva$(7)
'přiřazení dalších hodnot
barva$(5) = "červená"
barva$(6) = "zelená"
barva$(7) = "modrá"


'definice vícerozměrného pole
DIM barvy$(4,2)
'přiřazení hodnot
barvy$(1,1) = "azurová"
barvy$(1,2) = "cyan"
barvy$(2,1) = "purpurová"
barvy$(2,2) = "magenta"
barvy$(3,1) = "žlutá"
barvy$(3,2) = "yellow"
barvy$(4,1) = "černá"
barvy$(4,2) = "black"

'postupně zobrazí zprávu se jménem barvy (česky i anglicky)
FOR i% = 1 TO 4
    message barvy$(i%,1) + " = " + barvy$(i%,2)
NEXT

Příkazy pro větvení
Příkazy pro větvení programu také nevybočují z běžně zažitých konvencí. K dispozici máme obvyklou konstrukci IF podmínka THEN příkaz, případně IF podmínka THEN příkaz ELSE jiný příkaz EDNIF. Dále ještě konstrukci SELECT CASE, vhodnou pro rozsáhlejší větvení.

REM Ukázka větvení kódu 

barva$ = "černá"

' příkaz if na jeden řádek
if barva$ = "černá" then message "je to černý"

' příkaz if ... then ... else
if barva$ = "černá" then
    message "je to černý"
else
    message "není to černý"
endif

'Do celé konstrukce lze vkládat i další podmínky elseif
if barva$ = "černá" then
    message "je to černý"
elseif barva$ = "modrá" then
    message "je to modrý"
elseif barva$ = "zelená" then
    message "je to zelený"
'pokud nebyla splněna ani jedna podmínka,
'provede se tento příkaz
else
    message "tuhle barvu neznám"
endif

'konstrukce select case, tento příkaz je funkčně shodný
's předchozí konstrukcí if ... elseif ..., ale je daleko
'přehlednější
select case barva$
    case "černá"
        message "je to černý"
    case "modrá"
        message "je to modrý"
    case "zelená"
        message "je to zelený"
    'pokud nebyla splněna ani jedna podmínka,
    'provede se tento příkaz
    case else
        message "tuhle barvu neznám"
end select
'podmínku lze kdykoliv přerušit příkazem EXIT

Příkazy cyklu
Cykly lze rozdělit na dva druhy. Ty, které proběhnou v zadaném počtu průběhů a ty, které probíhají do až do splnění určité podmínky. Mezi první patří cyklus FOR ... NEXT, mezi druhé DO ... LOOP a WHILE ... WEND. Všechny tyto příkazy lze kdykoliv přerušit příkazem EXIT.

REM Ukázka příkazů cyklu

' Cyklus for ... next.
' Při každém průchodu se hodnota deklarované proměnné (i%)
' zvýší o hodnotu 1, pokud není jinak definováno pomocí STEP.
' Probíhá dokud proměnná deklarovaná za FOR je menší, nebo
' rovna hodnotě uvedené za TO. V případě, že je krok (STEP)
' záporná hodnota, cyklus probíhá dokud je deklarovaná
' proměnna menší, nebo rovna hodnotě za TO.
for i% = 0 to 20 step 5
    message "proměnná i% má hodnotu " + cstr(i%)
next

' Cyklus do ... loop.
' Probíhá dokud je splněna podmínka (i% menší než 0).
' Podmínka je testována před proběhnutím cyklu.
' Pokud není splněna, cyklus neproběhne ani jednou.
i% = 5
DO WHILE i% > 0
    i% = i% - 1
LOOP

' Stejná ukázka, jen podmínka je testována po proběhnutí
' cyklu. Pokud není splněna, cyklus proběhne jen jednou.
i% = 5
DO
    i% = i% - 1
LOOP WHILE i% > 0

' Probíhá dokud je není splněna podmínka (i% je rovno 0).
' Podmínka je testována před proběhnutím cyklu.
' Pokud není splněna, cyklus neproběhne ani jednou.
i% = 5
DO UNTIL i% = 0
    i% = i% - 1
LOOP

' Stejná ukázka, jen podmínka je testována po proběhnutí
' cyklu. Pokud není splněna, cyklus proběhne jen jednou.
i% = 5
DO
    i% = i% - 1
LOOP UNTIL i% = 0


' Cyklus while ... wend probíhá dokud je splněna
' podmínka uvedená za WHILE.
i% = 5
WHILE i% > 0
    i% = i% - 1
WEND

Definice uživatelských funkcí
Při rozsáhlejších skriptech je vhodné často používané procedury definovat jako vlastní funkce. V následující ukázce si nadefinujeme svojí funkci pro přepočet vnitřních hodnot rozměrů CorelSCRIPTu na milimetry.

REM Ukázka použití vlastní funkce

' deklarace vlastní funkce s jedním parametrem
function mm# (dmic&)
    ' ze zadaného parametru vypočítá výsledek a přiřadí
    ' jej názvu funkce, tudíž celá funkce vrátí tento výsledek
    mm# = dmic& / 10000
end function

' Zobrazí zprávu s velikostí stránky v mm,
' k přepočtu použije vlastní definovanou funkci mm#()
WITHOBJECT "CorelDraw.Automation.9"
    .GetPageSize sirka&, vyska&
    message "Rozměr stránky je " + cstr(mm#(sirka&)) \\
             + " × " + cstr(mm#(vyska&)) + " mm."
END WITHOBJECT

Operátory
CorelSCRIPT nabízí řadu standardních operátorů, takže ani v této oblasti nás nečeká nic zvláštního. V následující tabulce je výčet těch nejběžněji používaných.

operátor     popis
---------------------------------------------------------
porovnávací
  =            je rovno, nebo přiřazení hodnoty proměnné
  <>           není rovno
  >            je větší než
  <            je menší než
  >= nebo =>   je větší nebo rovno než
  <= nebo =<   je menší nebo rovno než

logické
  NOT          negace (NOT TRUE vrací FALSE)
  AND          logický součin (TRUE AND FALSE vrací FALSE)
  OR           logický součet (TRUE OR FALSE vrací TRUE)

pro slučování řetězců
  & nebo +     sloučení textových řetězců (string)

Objekty
Aby CorelSCRIPT mohl být použitelný pro různé aplikace, pracuje s objekty. My si ovšem vystačíme s jediným, a to CorelDRAW.Automation.9. Dalšími mohou být například CorelPhotoPaint.Automation.9, nebo CorelScript.Automation.9. Lze pracovat i s jinými (non-Corel) aplikacemi na bázi OLE.

Jednotky
CorelSCRIPT vnitřně počítá s jednotkami v desetinách mikronu (0,0001mm) a to pouze v celých číslech (typ LONG). Jako výchozí bod (0) je brán střed stránky. Kladné hodnoty udávají pozici směrem nahoru a doprava, záporné dolů a doleva.

Pro přepočet jednotek máme k dispozici funkci LENGTHCONVERT(), která dokáže přepočítat různé jednotky mezi sebou (desetiny mikronů, body, palce, centimetry atd.). Bohužel v seznamu scházejí milimetry, které lze v našich zeměpisných šířkách považovat v Corelu za výchozí. Jako přijatelné řešení se nabízí definice vlastní funkce pro přepočet mezi desetinami mikronů a milimetry.

REM Ukázka vlastních funkcí pro konverzi jednotek

' funkce pro konverzi milimetrů na desetiny mikronů
function dmic& (mm#)
    dmic& = mm# * 10000
end function

' funkce pro konverzi desetin mikronů na milimetry
function mm# (dmic&)
    mm# = dmic& / 10000
end function

' Ukázka použití funkce pro konverzi jednotek k vytvoření
' obdélníku uprostřed stránky pomocí uživatelem zadaných
' hodnot v mm.
sirka# = inputbox ("zadejte šířku v milimetrech")
vyska# = inputbox ("zadejte výšku v milimetrech")

if (sirka#<=0 or sirka>1000) or (vyska#<=0 or vyska>1000) then
    message "Zadaná šířka nebo výška je špatná."
    stop
endif

WITHOBJECT "CorelDRAW.Automation.9"
    x1& = dmic&(0-sirka#/2)
    y1& = dmic&(vyska#/2)
    x2& = dmic&(sirka#/2)
    y2& = dmic&(0-vyska#/2)
    .CreateRectangle y1&, x1&, y2&, x2&
END WITHOBJECT

Závěrem
V tomto článku nejsou zdaleka popsány všechny vlastnosti jazyka CorelSCRIPT. Pro vytváření jednoduchých skriptů ulehčujících v Corel DRAW uživateli každodenní práci ovšem postačí.
V příštím díle tohoto seriálu si ukážeme, jak pohodlně manipulovat s vodícími linkami.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Vektory  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: