Július Pastierik / 13. 07. 2011, 00:00
V šiestom pokračovaní typografických makier si ukážeme funkcie pre vlastné nastavovanie kerningu a šírky znakov.
Po uvedení úvodných funkcií si v dnešnom pokračovaní seriálu o typografických úpravách textu ukážeme ostatné funkcie modulu Kerning_znakov, teda funkcie pre vlastné nastavenie kerningu a šírky znakov vrátane funkcií, pomocou ktorých budeme otvárať dialógové okno, v ktorom tieto hodnoty nastavíme.
Aby sa nám s príslušnými funkciami pracovalo ľahšie, umožníme, aby dialógové okno mohlo byť otvorené počas práca s textom. Vlastné nastavovanie následne umožníme pre všetky znaky vybraného (označeného) textu, všetky, zalomiteľné alebo nezalomiteľné medzery a pre zadaný text. Posledná možnosť je určená hlavne pre tie prípady, keď najprv manuálne metódou „pokus-omyl“ nastavíme správny kerning medzi určitými znakmi a potom ho na jedno kliknutie dokážeme nastaviť v celom dokumente.
REM Procedúra pre nastavenie kerningu počas definície hodnôt
sub Kerning_Initiated
dim medzera as long ' Pre získanie číselnej hodnoty z dialógovej premennej "Hodnota"
dim kurzor as object
Odpamataj_vyber ' Odpamätanie pôvodného výberu
medzera=val(oDlgK.model.Rozostup.text) ' Hodnota rozostupov
Oznac_hladany_text(oDlgK.model.Vyber_all.State,oDlgK.model.Vyber_SP_NBSP.State,oDlgK.model.Vyber_SP.State,_
oDlgK.model.Vyber_NBSP.State, oDlgK.model.Vyber_text.State,oDlgK.model.Hlad_text.text) ' Označenie textu podľa nastavených parametrov
kurzor= ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
kurzor.CharKerning=medzera ' Zmena rozostupu označených znakov
Nastav_vyber ' Nastavenie pôvodného výberu
end sub
REM Procedúra pre nastavenie šírky počas definície hodnôt
sub Sirka_Initiated
dim kurzor as object
dim retazec as string
dim koeficient as single
dim sirka as integer
Odpamataj_vyber ' Odpamätanie pôvodného výberu
sirka=val(oDlgK.model.Sirka.text)
koeficient=sirka/100.00
on error resume next
Oznac_hladany_text(oDlgK.model.Vyber_all.State,oDlgK.model.Vyber_SP_NBSP.State,oDlgK.model.Vyber_SP.State,_
oDlgK.model.Vyber_NBSP.State, oDlgK.model.Vyber_text.State,oDlgK.model.Hlad_text.text) ' Označenie textu podľa nastavených parametrov
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
if oDlgK.model.nastav_sirku.State=1 then
' Nastavujeme šírku priamo v celom označenom texte
kurzor.CharScaleWidth=sirka
else
' Nastavujeme koeficient šírky
if isEmpty(kurzor.CharScaleWidth) then
' Je tam rôznosť šírky, musíme nastaviť po znakoch – môžeme iba vtedy, ak je označený celý text
if oDlgK.model.Vyber_all.State=1 then
retazec=kurzor.getString() ' Označený text
kurzor.collapseToStart() ' ak je niečo označené, tak zrušíme výber a skočíme na začiatok
for i=1 to len(retazec)
kurzor.goRight(1, true) ' zvýraznenie znaku
kurzor.CharScaleWidth=kurzor.CharScaleWidth*koeficient
kurzor.collapseToEnd() ' Zrušíme označený vymenený text
next i
endif
else
' Je tam rovnaká šírka, nastavíme všade
kurzor.CharScaleWidth=kurzor.CharScaleWidth*koeficient
endif
endif
Nastav_vyber ' Nastavenie pôvodného výberu
end sub
REM Makro, ktoré zneviditeľní dialóg – t.j. nastaví, že sa má ukončiť čakací cyklus (volané stlačením klávesy "Koniec" v dialógu)
sub Koniec_Kerning_Initiated
oDlgK.setVisible(false )' Zneviditeľnenie dialógu
end sub
Rem Volanie dialógu a makra pre nastavenie rozostupov a šírky znakov
sub Kerning_znakov
dim kurzor as object
dim medzera, koeficient as long
DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
Odpamataj_vyber ' Odpamätanie pôvodného výberu
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
kurzor.collapseToStart() ' ak je niečo označené, tak zrušíme výber a skočíme na začiatok
medzera=kurzor.CharKerning ' Kerning prvého znaku výberu
koeficient=kurzor.CharScaleWidth ' Šírka prvého znaku
Nastav_vyber ' Nastavenie pôvodného výberu
if not isnull(oDlgK) then exit sub ' Ak je okno otvorené, neotvárame druhé
oDlgK=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Kerning_znakov) ' Sprístupnenie dialógu
nazov=inicializacny_subor("JP_Kerning_znakov_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(oDlgK, nazov, "Dialog_Kerning_znakov") ' Nastavenie jazyka dialógu
oDlgK.model.Vyber_all.State=1 ' V prepínačoch si prednastavíme, že budeme meniť rozostupy všetkých znakov
oDlgK.model.Vyber_SP_NBSP.State=0
oDlgK.model.Vyber_SP.State=0
oDlgK.model.Vyber_NBSP.State=0
oDlgK.model.Vyber_text.State=0
oDlgK.model.Hlad_text.text=""
oDlgK.model.Rozostup.text=str(medzera) ' Init aktuálneho kerningu
oDlgK.model.nastav_koeficient.State=1 ' V prepínačoch si prednastavíme, že budeme meniť koeficient šírky
oDlgK.model.nastav_sirku.State=0
oDlgK.model.Sirka.text=str(koeficient) ' Init aktuálnej šírky
oDlgK.setVisible(true) ' zviditeľnenie dialógu – namiesto oDlgK.Execute(), aby sa dalo paralelne pracovať s textom
while oDlgK.isVisible() ' Cyklus, ktorý čaká na stlačenie klávesy "Koniec" v dialógu (kým je dialóg viditeľný)
wait 500 ' Časová medzera 500 milisekúnd (0,5 sec) na to, aby sa dalo paralelne pracovať s dokumentom
wend
oDlgK.dispose() ' Zatvorenie dialógu
end sub
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk