wlad
Участник

Offline
Сообщений: 20
|
Здравствуйте!
У меня один вопрос по макросу в Writer. Может кто знает как реализовать в макросе вывод документа на печать без определенной картинки(логотипа) в шапке страницы. Именно реализация в макрос, это чтобы потом макрос можно было к кнопке привязать. Клик на кнопку будет выдавать печать без лого, Клик просто на печать будет выдавать с логотипом. Заранее Спасибо
P. S. Отключения шапки страницы не предлагать. Отключение все картинок при печати не предлагать.
С уважением, wlad
|
|
« Последнее редактирование: 7 Март 2016, 19:31 от wlad »
|
Записан
|
|
|
|
JohnSUN
|
А нарисовать белый квадратик поверх логотипа - тоже не предлагать?
Имя-то у логотипа есть? Или оно каждый раз разное?
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Спасибо за быстрый ответ JohnSUN
Имя картинки конечно есть, стандартное или можно задать в свойствах картинки. Белый квадратик конечно очень оригинально, но проще будет тогда в свойствах картинки убрать галочку печать. Я пришел к решению, создать макрос, который убирает в свойствах картинки "печать" и прикрепить к кнопке. Но опыта написания на языке Basic к сожалению нет.
|
|
|
Записан
|
|
|
|
JohnSUN
|
Написать макрос гораздо проще, чем выдумать файл для его тестирования. Предлагаю разделить работу: мы сделаем что попроще (напишем макрос и расскажем куда и как его прикрутить), а ты взвалишь на себя большую часть работы (подготовишь документ, похожий на твой, и прикрепишь его к следующему сообщению)
|
|
|
Записан
|
|
|
|
rami
|
Я пришел к решению, создать макрос, который убирает в свойствах картинки "печать" и прикрепить к кнопке. Убрать печать из свойств: Sub main ThisComponent.GraphicObjects.getByName("Изображение1").Print=false End Sub
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Убрать печать из свойств: Код: Sub main ThisComponent.GraphicObjects.getByName("Изображение1").Print=false End Sub Большое спасибо rami! Как раз то что искал! Хорошего дня!
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Написать макрос гораздо проще, чем выдумать файл для его тестирования. Предлагаю разделить работу: мы сделаем что попроще (напишем макрос и расскажем куда и как его прикрутить), а ты взвалишь на себя большую часть работы (подготовишь документ, похожий на твой, и прикрепишь его к следующему сообщению)
Выкладываю файл Template.odt, созданный для тестирования, в нем макросы прикрепленные к кнопкам. withLogo печать с логотипом и withoutLogo соответственно печать без логотипа, кнопки находятся на панели инструментов. При нажатии кнопок отключается или включается свойство логотипа "Печать", в зависимости от выбранной кнопки, и включается диалог печати для выбора принтера. Может кому-нибудь пригодится. Если у кого-нибудь есть более изящнее решение, буду рад услышать предложение!  С уважением wlad
|
|
|
Записан
|
|
|
|
rami
|
Если у кого-нибудь есть более изящнее решение, буду рад услышать предложение! Хорошо сделано, вряд ли можно улучшить.
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Привет всем! У меня возник еще один вопрос на аналогичную тему, только по другому обьекту. Хочу тоже самое осуществить только теперь с полосой в документе, то есть shape. Не могу подобраться к ней, к сожалению нехватает знаний по OOO Basic. Вот что смог найти, но непойму как применить в макросе. https://www.openoffice.org/api/docs/common/ref/com/sun/star/drawing/GraphicObjectShape.htmlПример тестого документа прикрепляю к сообщению. Заранее спасибо! С уважением! wlad
|
|
|
Записан
|
|
|
|
JohnSUN
|
Как насчет ThisComponent.getDrawPage().getByIndex(<какой-то там номер>)? В файле-образце три таких Shape - как их отличать друг от друга, если у них нет имён, отдельный вопрос. Может быть, брать .getPosition() и смотреть какие там X и Y?
(Зачем в Drucken грузить всю библиотеку Tools? В том DispatchSlot всего-то пять строк кода - с тем же успехом можно просто вызвать .uno:Print)
|
|
|
Записан
|
|
|
|
rami
|
В файле-образце три таких Shape - как их отличать друг от друга, если у них нет имён, отдельный вопрос. Первый объект — линия, второй по имени "Shape" — тот что нужен, а третий — врезка. Нужно перебрать сравнивая по имени.
|
|
|
Записан
|
|
|
|
rami
|
Отключить печать для графического объекта по имени "Shape" Sub EnumShape Dim vEnum, oShape vEnum = thisComponent.getDrawPage().createEnumeration() Do While vEnum.hasMoreElements() oShape = vEnum.nextElement() If oShape.Name="Shape" Then oShape.Printable=false Loop End Sub
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Спасибо за быстрые ответы JohnSUN и rami! rami взял ваш код, работает идеально! В итоге получилось так с учетом замечаний от JohnSUN: печать c logo i shape: Sub withLogos
Dim vEnum, oShape vEnum = thisComponent.getDrawPage().createEnumeration() Do While vEnum.hasMoreElements() oShape = vEnum.nextElement() If oShape.Name="Shape" Then oShape.Printable=true Loop ThisComponent.GraphicObjects.getByName("Grafik").Print=true createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) End Sub печать без logo i shape: Sub withoutLogos
Dim vEnum, oShape vEnum = thisComponent.getDrawPage().createEnumeration() Do While vEnum.hasMoreElements() oShape = vEnum.nextElement() If oShape.Name="Shape" Then oShape.Printable=false Loop ThisComponent.GraphicObjects.getByName("Grafik").Print=false createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) End Sub Файл примера прикрепляю к сообщению
|
|
|
Записан
|
|
|
|
wlad
Участник

Offline
Сообщений: 20
|
Походу на этом форуме я на постоянно  . У меня короткий вопрос. Как можно сделать чтобы после выполнения кода: Sub withoutLogos
Dim vEnum, oShape vEnum = thisComponent.getDrawPage().createEnumeration() Do While vEnum.hasMoreElements() oShape = vEnum.nextElement() If oShape.Name="Shape" Then oShape.Printable=false Loop ThisComponent.GraphicObjects.getByName("Grafik").Print=false createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) End Sub Printable i Print возвращались на значение true. Тогда можно было бы обойтись одной кнопкой и одним макросом!
|
|
|
Записан
|
|
|
|
rami
|
Как можно сделать чтобы после выполнения кода: Код: Sub withoutLogos
Dim vEnum, oShape vEnum = thisComponent.getDrawPage().createEnumeration() Do While vEnum.hasMoreElements() oShape = vEnum.nextElement() If oShape.Name="Shape" Then oShape.Printable=false Loop ThisComponent.GraphicObjects.getByName("Grafik").Print=false createUnoService("com.sun.star.frame.DispatchHelper").executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Print", "", 0, Array()) End Sub
Printable i Print возвращались на значение true. Тогда можно было бы обойтись одной кнопкой и одним макросом! В таком случае не после кода, а после печати, но до завершения макроса — перед окончанием макроса записать: ............ 'после печати oShape.Printable=true ThisComponent.GraphicObjects.getByName("Grafik").Print=true End Sub
|
|
|
Записан
|
|
|
|
|