Как разным цветом написать символы из макроса?

Автор tvitaly1, 13 марта 2012, 09:43

0 Пользователи и 1 гость просматривают эту тему.

tvitaly1

Как разным цветом написать символы из макроса?

У меня есть в шрифтах два символа: знак подчеркивания и надстрочный штрих.
В Ворде можно установить цвет для вновь вводимого текста, поэтому макрос перекодировщика может написать так:

В макросе Врайта не выходит, ибо надо щелкать мышкой по конкретному символу, можноли решить эту проблему?

tvitaly1

Цитата: tvitaly1 от 13 марта 2012, 09:27
Как разным цветом написать символы из макроса?
....

УРЯ!!!!! Процедура  cvetPr перекрашивает предыдущий символ(символ перед курсором)!

sub cvetPr(cvet1)
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
cvet cvet1
Selection.MoveRight Unit:=wdCharacter, Count:=1
end sub


sub cvet(cvet1)
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FontColor"
args1(0).Value = cvet1

dispatcher.executeDispatch(document, ".uno:FontColor", "", 0, args1())


end sub

sub MoveLeft( Optional Unit, Optional Count, Optional Extend )
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
if Extend = 1 then
args1(1).Value = True
else
args1(1).Value = False
end if
for i=1 to count
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())
next i

end sub

sub MoveRight( Optional Unit, Optional Count, Optional Extend)
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
if Extend = 1 then
args1(1).Value = True
else
args1(1).Value = False
end if

for i=1 to count
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
next i

end sub

neft

Жуть какая-то!
"Адская смесь" из VBA и DispatchHelper!

И это ещё может работать?

tvitaly1

#3
Цитата: neft от 13 марта 2012, 13:24
Жуть какая-то!
"Адская смесь" из VBA и DispatchHelper!

И это ещё может работать?
Все работает, причем MoveLeft MoveRight в модуле Selection
Этот модуль как раз и будет переводчиком, вот, я надеюсь, полный перевод процедур:

Public const vbTab = " ", wdExtend = 1, wdWord = 2, wdCharacter =1

sub MoveLeft( Optional Unit, Optional Count, Optional Extend )
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
if Extend = 1 then
args1(1).Value = True
else
args1(1).Value = False
end if

for i=1 to count
If Unit = 1 then
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())
elseIf Unit = 2 then
if  Extend = 1 then
dispatcher.executeDispatch(document, ".uno:WordLeftSel", "", 0, Array())
else
dispatcher.executeDispatch(document, ".uno:GoToPrevWord", "", 0, Array())
end if
end if
next i

end sub

sub MoveRight( Optional Unit, Optional Count, Optional Extend)
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------

dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Count"
args1(0).Value = 1
args1(1).Name = "Select"
if Extend = 1 then
args1(1).Value = True
else
args1(1).Value = False
end if

for i=1 to count
If Unit = 1 then
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
elseIf Unit = 2 then
if  Extend = 1 then
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
else
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
end if
end if
next i

end sub