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

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

14 Июль 2020, 13:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: помогите с решением плз  (Прочитано 520 раз)
0 Пользователей и 1 Гость смотрят эту тему.
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Стартовое сообщение: 14 Июнь 2020, 06:10 »

Доброго времени суток.
есть задача делать скриншот экрана в vba (openoffice)и сохранять его в определенную папку на hdd.
Нашел код который сохраняет в буфер.

REM  *****  BASIC  *****
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 
Private Const VK_SNAPSHOT = &H2C
 
Sub PrintScreen()
    keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub


как сохранить в файл из буфера , разницы нет bmp ,jpeg.

за ранее спасибо...
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #1: 14 Июнь 2020, 13:31 »

А зачем для этого OpenOffice?
Но если очень хочется, то как то так:
Код:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 
Private Const VK_SNAPSHOT = &H2C
 
Sub PrintScreen()
Dim Param1(0) as new com.sun.star.beans.PropertyValue
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Param1(0).Name =  "FilterName"
Param1(0).Value = "draw_jpg_Export"


    keybd_event VK_SNAPSHOT, 1, 0, 0
    wait(100)
   
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_blank", 0, Array())

dispatcher.executeDispatch(NewDoc.CurrentController.Frame, ".uno:Paste", "", 0, Array())
aURL = "file:///c:/test/Scr_" & replace(date,".","-") & replace(time,":","") &".jpg"
NewDoc.storetourl(aUrl,Param1())
NewDoc.close true
End Sub
правда, экспорт с разрешением 96 dpi. Но дальше копайте сами Улыбка


Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #2: 14 Июнь 2020, 16:30 »

ООО ваще нормально , огромное спасибо
Записан
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #3: 14 Июнь 2020, 16:47 »

Вообще все хорошо работает , меня только одно смущает когда он сохраняет картинку , на секунду выскакивает белое окно ,с названием Без названия....  от этого можно как-то избавиться? чтобы пользователь не видел что происходит какие-то действие.

а так все работает замечательно..
и еще вопрос как можно запустить данное действие из макроса? про горячие кнопки в настройках я знаю...а по средством самого макроса... к примеру назначить ctrl+p..
просто проблема если в настройках ставишь горячие кнопки например ctrl+p .... то в этом документе все работает хорош,но когда открываешь другой документ ,то в нем вылазит ошибка сценария.. а должен вылазить просто принтер печать..
макрос прикреплен к конкретному документу
« Последнее редактирование: 14 Июнь 2020, 16:55 от foxyra » Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #4: 14 Июнь 2020, 18:56 »

Можно создать скрытый документ Draw, но вставка буфера в него при экспериментах отработала криво.  Если есть желание экспериментируйте:
Код:
Sub PrintScreen()
Dim Param1(0) as new com.sun.star.beans.PropertyValue

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Param1(0).Name = "Hidden"
Param1(0).Value = true
    keybd_event VK_SNAPSHOT, 1, 0, 0
    wait(100)
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_blank", 0, Param1())
dispatcher.executeDispatch(NewDoc.CurrentController.Frame, ".uno:Paste", "", 0, Array())
aURL = "file:///~/test/Scr_" & replace(date,".","-") & replace(time,":","") &".jpg"
Param1(0).Name =  "FilterName"
Param1(0).Value = "draw_jpg_Export"
NewDoc.storetourl(aUrl,Param1())
NewDoc.close true
End Sub

По второму вопросу назначьте сочетание не использующее в системе.
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #5: 14 Июнь 2020, 19:49 »

Огромное Вам спасибо добрый человек .... низкий Вам поклон ,за то что откликнулись на мое сообщение ... честно сказать вы единственный кто дал мне правильный макрос ..он работает так как надо... а с кнопками я разберусь сам ) еще раз спасибо
Записан
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #6: 15 Июнь 2020, 07:12 »

Код:
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_hidden", 0, Array())
в книге указано

В качестве второго параметра, loadComponentFromURL ожидает имя для фреймового
объекта окна, которое LibreOffice создает внутри для его управления. Здесь обычно
определяется предопределенное имя _blank, и оно гарантирует, что LibreOffice создаст новое
окно. Альтернативно, может также быть определено _hidden, и оно гарантирует, что
соответствующий документ будет загружен, но останется невидимым.

но он все равно видимый

а если вместо Array вписать переменную с параметрами ,то он работает с буфером криво,и сохраняет картинку криво.

Код:
Param1(0).Name =  "FilterName"
Param1(0).Value = "draw_jpg_Export"


NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_hidden", 0, Param1())

но если сделать так , то картинка в буфер скидывается нормальная... но файл в папке экпортируется не определенный
Код:
Sub PrintScreen()
Dim Param1(0) as new com.sun.star.beans.PropertyValue

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Param1(0).Name =  "Hidden"
Param1(0).Value = true


    keybd_event VK_SNAPSHOT, 1, 0, 0
      
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_blank", 0, Param1())

dispatcher.executeDispatch(NewDoc.CurrentController.Frame, ".uno:Paste", "", 0, Array())
aURL = "file:///c:/test/Scr_" & replace(date,".","-") & replace(time,":","") &".jpg"

NewDoc.storetourl(aUrl,Param1())
NewDoc.close true
End Sub
так как нет
Код:
Param1(0).Name =  "FilterName"
Param1(0).Value = "draw_jpg_Export"
« Последнее редактирование: 15 Июнь 2020, 07:23 от foxyra » Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #7: 15 Июнь 2020, 09:39 »

но если сделать так , то картинка в буфер скидывается нормальная... но файл в папке экпортируется не определенный
Код:
...
Dim Param1(0) as new com.sun.star.beans.PropertyValue
...
Param1(0).Name =  "Hidden"
Param1(0).Value = true
   ...
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_blank", 0, Param1())
...
NewDoc.storetourl(aUrl,Param1())
...
так как нет
Код:
Param1(0).Name =  "FilterName"
Param1(0).Value = "draw_jpg_Export"

А почему Вы используете одни и те же параметры и для создания документа, и для его экспорта? При создании Вы передаёте параметр операции "Hidden=true", который в этом случае имеет смысл; но этот параметр бессмыслен при экспорте. Перед экспортом переопределите значение Param1(0) на новую пару "FilterName"-"draw_jpg_Export".
Записан

С уважением,
Михаил Каганский
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 922


« Ответ #8: 15 Июнь 2020, 10:34 »

Код:
NewDoc=StarDesktop.loadComponentFromURL("private:factory/sdraw" ,"_hidden", 0, Array())
в книге указано

В качестве второго параметра, loadComponentFromURL ожидает имя для фреймового
объекта окна, которое LibreOffice создает внутри для его управления. Здесь обычно
определяется предопределенное имя _blank, и оно гарантирует, что LibreOffice создаст новое
окно. Альтернативно, может также быть определено _hidden, и оно гарантирует, что
соответствующий документ будет загружен, но останется невидимым.

но он все равно видимый

Возможно, в книге указано желаемое, а не действительное.

Вот страница документации, которая перечисляет возможные специальные значение для целевого фрейма: XComponentLoader. Там нет никакого _hidden.

Дополнительно некоторые из специальных значений упоминаются на страницах:


... и там тоже нет такого значения.

Ну и наконец вот исходный код, где определены все специальные значения.
Записан

С уважением,
Михаил Каганский
Bigor
Мастер
*****
Offline Offline

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


« Ответ #9: 15 Июнь 2020, 10:45 »

Используя, параметры:
Param1(0).Name =  "Hidden"
Param1(0).Value = true
получаем, что при "скрытом" создании файла картинка из буфера вставляется не в видимую область, а со смещением. (Приложение Scr_*.odg). Ее можно конечно подвинуть, но вот интересно почему такое отличие от вставки в "видимый" файл?

* Scr_15-06-2020103324.ODG (105.07 Кб - загружено 5 раз.)
« Последнее редактирование: 15 Июнь 2020, 10:47 от Bigor » Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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