Вывод на печать формы диалога

Автор Steelwolf, 4 сентября 2014, 12:48

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

Steelwolf

День добрый!

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

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

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.

Yakov

Диалог стандартный или это форма Base?
Для стандартного диалога это сделать скорей всего нельзя.

Steelwolf

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

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

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

UPDATE
Кстати, у меня появился еще один вопрос: а для чего тогда компоненты диалога имеют свойство "Для печати"?

Steelwolf

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

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

rami

Цитата: Steelwolf от  4 сентября 2014, 15:42Я понял, что ничего не понял!
А я не понял, что вы поняли ;D
Нарисуйте элементы управления в эл. таблице как вам надо и выложите на форум.

Steelwolf

#5
Я понял, что Вы не поняли! ;D

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

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

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

Только я до сих пор понять не могу, для чего же все-таки элементы управления в диалоге имеют свойство "Для печати". В форме как раз понятно, ибо ее с листом целиком можно вывести на печать, а вот в диалоге зачем? Моя не понимай! ???

МР

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

Steelwolf

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

Steelwolf

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

JohnSUN

А в "ОС семейства Linux" сочетание клавиш Alt+PrtScr ни к чему хорошему не приводит?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Steelwolf

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

JohnSUN

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

Steelwolf

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

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

Hasim

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

Steelwolf

Ну да, согласен, все так, только момент, я не использую Base.
Я использую calc. В calc разве можно сделать отчеты?