Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

7 Март 2021, 05:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Вывод на печать формы диалога  (Прочитано 9250 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Стартовое сообщение: 4 Сентябрь 2014, 11:48 »

День добрый!

Ломаю голову над такой (вроде бы простой) задачей.
У меня есть диалог, пусть будет Dialog1, этот диалог содержит форму заполненную, ее необходимо вывести на печать (в смысле перевести на бумагу Смеющийся). Как печатать табличные документы или отдельные его листы я знаю, но этот метод не подходит. Этот диалог по сути своей статичный и просто будет получать информацию, то есть его модель меняться не будет, а будет меняться только представление. Возможно даже вызываться этот диалог не будет.

Как можно получить фрейм диалога, для того, чтобы его можно было распечатать по аналогии с табличным документом?

Код:
oFrame = ThisComponent.CurrentController.Frame
oDispath = createUnoService("com.sun.star.frame.DispatchHelper")
oDispath.executeDispatch(oFrame, ".uno:Print", "", 0, Array())

Есть у кого-нибудь идеи?
Или я чего-то не понимаю? Толкните хотя бы тогда в нужную сторону, чтобы самому разобраться на предмет "что я делаю не так".

P.S. На VBA я такое делал, там в принципе без PrintPreview можно было отправить на печать, а тут что-то я не понимаю как.

UPDATE
Cейчас еще понял, что посредством PrintPreview не вывести форму!
Я еще забыл напомнить, что я использую ОС семейства Linux.
« Последнее редактирование: 4 Сентябрь 2014, 12:20 от Steelwolf » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #1: 4 Сентябрь 2014, 12:48 »

Диалог стандартный или это форма Base?
Для стандартного диалога это сделать скорей всего нельзя.
Записан
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #2: 4 Сентябрь 2014, 13:01 »

В смысле стандартный?
Я его сам создаю, и добавляю в него компоненты.
Да, наверно, стандартный.

Для Base маловата задача, там по сути-то будут несколько мелких таблиц, данные из которых нужно причесать с помощью диалога.
В Excel'е решалась задача просто написание инструкции UserForm.PrintForm().
Я уже начинаю понимать, что сам диалог как объект не имеет никаких прямых методов, ибо это модель. Тогда встает вопрос, а как обратиться к представлению этой модели, вернее как обратиться к контроллеру этой модели.
Я не понимаю! >_<

Обещаю запостить решение моего вопроса! Правда сначала его нужно разрешить! Улыбка

UPDATE
Кстати, у меня появился еще один вопрос: а для чего тогда компоненты диалога имеют свойство "Для печати"?
« Последнее редактирование: 4 Сентябрь 2014, 13:11 от Steelwolf » Записан
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #3: 4 Сентябрь 2014, 15:42 »

Я понял, что ничего не понял!

Пойду тогда по другому пути, можно элементы создать непосредственно на листе. Отсюда вопрос, как получить к ним доступ?
Понятно, что сначала создается форма, потом в форме создаются элементы управления.
То есть как считать значение метки или, наоборот, записать значение?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 4 Сентябрь 2014, 16:13 »

Я понял, что ничего не понял!
А я не понял, что вы поняли Смеющийся
Нарисуйте элементы управления в эл. таблице как вам надо и выложите на форум.
Записан

Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #5: 4 Сентябрь 2014, 17:25 »

Я понял, что Вы не поняли! Смеющийся

Суть в том, что есть диалог Dialog1, в нем есть куча меток, в эти метки записывается определенная информация. В итоге получается некая отформатированная форма. Так вот необходимо эту форму, вернее этот диалог Dialog1 распечатать. Средствами VBA это можно было сделать, например, UserForm.PrintForm и все печаталось. Здесь же я не понимаю как сделать.
Поэтому я пришел к выводу, что объект, например, oDlg, созданный из модели диалога Dialog1, не имеет прямых методов (как в VBA, например, метод PrintForm).
Поэтому я решил пойти по другому пути (но и не отказался от поиска решения вывести на печать форму диалога). Я уже на каком-нибудь листе табличного документа создаю форму и в этой форме создаю те же метки, которые есть в диалоге и уже вывожу на печать лист целиком.
Неудобно! Ибо к элементам управления в форме обращение из макроса громоздкое нежели к элементам управления в диалоге! Кроме того, макрос и модель диалога можно защитить целиком, а форму в табличном документе уже защитить не получится.

Да, да, я понимаю, что возникает вопрос "а почему бы не воспользоваться Base", на что я уже ответил в предыдущем посте, что задача мелковата, и громоздить целую базу для нее будет долго и нецелесообразно.

Я, конечно, могу многого не знать и многого не понимать, по этой причине я и обратился на форум! Улыбка
Да и кроме того всемогущий google не помог (не, не забанили Смеющийся), не нашел решения!

Только я до сих пор понять не могу, для чего же все-таки элементы управления в диалоге имеют свойство "Для печати". В форме как раз понятно, ибо ее с листом целиком можно вывести на печать, а вот в диалоге зачем? Моя не понимай! Непонимающий
« Последнее редактирование: 4 Сентябрь 2014, 17:28 от Steelwolf » Записан
МР
Форумчанин
***
Offline Offline

Сообщений: 86


« Ответ #6: 4 Сентябрь 2014, 20:46 »

Если найдете решение-отлично, но можно вспомнить что "нормальные герои всегда идут в обход". Нельзя ли продублировать форму на листе, при нажатии в диалоге кнопки "Печать" заполнять её из диалога, а потом программно печатать уже ее.
Записан
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #7: 5 Сентябрь 2014, 08:04 »

Ну да, так оно, и в обход можно!.. Но мы не ищем легких путей! Веселый
Если я сделаю форму на листе, тогда необходимость в диалоге отпадет, ибо не имеет смысла информацию гонять туда-сюда. Вообще мне больше нравится вариант с диалогом. Ибо это удобно и, как бы правильно сказать, едино что ли!
Записан
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #8: 5 Сентябрь 2014, 12:57 »

Ну в общем все верно, объект, который создается методом createUNOdialog, не поддерживает интерфейс XPrintable.
А как еще можно создать диалог и вызвать его исполнение?
Как вообще связаться с разработчиками? Я подозреваю, что все мои потуги бесполезны.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #9: 5 Сентябрь 2014, 13:54 »

А в "ОС семейства Linux" сочетание клавиш Alt+PrtScr ни к чему хорошему не приводит?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #10: 5 Сентябрь 2014, 14:20 »

Пардон, не понял! Непонимающий
Я же говорю, что объект не поддерживает интерфейс типа XPrintable, то есть методы вызова типа PrintPreview не работают. Вернее они работают, но если ссылаться через переменную ThisComponent, то происходит возврат к предыдущему активному окну, так как переменная работает только с теми документами, из которых она вызвана.
Или я не так понимаю?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #11: 5 Сентябрь 2014, 15:04 »

Я имел в виду использование средств операционной системы, а не офиса
"В некоторых GUI ОС Linux при нажатии на клавишу  PrtScr  открывается диалог сохранения скриншота с различными параметрами."
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #12: 6 Сентябрь 2014, 12:34 »

Не, не подходит.
Трудоемко. Если таких форм будет сотни или тысячи... Порнография!
Блин, что не говори, а VBA намного более обширный функционал и возможности дает! Странно, но факт!

Сейчас еще заметил, что у FrameControl нельзя настроить рамку, а при печати метка рамки сдвигается до края, что выглядит некрасиво, да и рамку саму не видно.
Видимо, придется Base задействовать! Ой не охото!..
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #13: 6 Сентябрь 2014, 14:09 »

Вообще-то, формы делаются не для того, чтобы их печатать, а для того, чтобы вводить вручную данные.
Для печати делают отчеты.
Правильный путь - на основе данных формы сделать отчет и распечатать его, причем его можно отформатировать красиво (именно для печати), а не тупо печатать форму, которая для этого и не предназначена.
Записан
Steelwolf
Участник
**
Offline Offline

Сообщений: 10


« Ответ #14: 6 Сентябрь 2014, 17:31 »

Ну да, согласен, все так, только момент, я не использую Base.
Я использую calc. В calc разве можно сделать отчеты?
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!