1

Тема: LangMF 8.0 & OOo Writer: обмен данными через DDE

Без гарантий. Используете на свой страх и риск.
------------------------------------
LangMF-скрипт является сервером DDE и предназначен для записи данных в документ Open Office Writer, который выступает в качестве DDE-клиента. После запуска LangMF-DDE-сервера, OOo Writer-DDE-клиент запускается автоматически, этим же скриптом, который, в том числе, проставляет параметры DDE-обмена клиентского документа. После запуска сервера и клиента измените текст в окне формы LangMF-сервера, этот текст будет передан в документ-клиент.
------------------------------------
Потребуется установленный LangMF 8.0
http://atombyte.com/prog.htm?oper=katal … 3&vi=1

Open Office 2.x
OC WinMe/XP

' Без гарантий. Используете на свой страх и риск.
'----------------------------------------------------------------------------------
' LangMF-скрипт является сервером DDE и предназначен для записи данных в 
' документ Open Office Writer, который выступает в качестве DDE-клиента.
'
' После запуска LangMF-сервера, OOo Writer-клиент запускается автоматически, 
' этим же скриптом, который, в том числе, проставляет параметры DDE-обмена 
' клиентского документа. После запуска сервера и клиента измените текст в 
' окне формы LangMF-сервера, этот текст будет передан в документ-клиент.
'----------------------------------------------------------------------------------
' Потребуется установленный LangMF 8.0
'    http://atombyte.com/prog.htm?oper=katalog&id=3&vi=1 
'    http://www.script-coding.com/LangMF.html 
'
' OC WinMe/XP
'----------------------------------------------------------------------------------

<#Module=ooDDEServer>

Public objDDE

'[Инициализация формы. Запуск DDE-сервера]
'----------------------------------------------------------------------------------
Sub Load(cmdstr)

 '---------------------------------------------------------------------------------
 With Form

    .Caption = "Open Office Writer DDE Server"
    .Width = 400 * vbPx
    .Height    = 300 * vbPy
    .BackColor = &Hc0c0c0
    .Style.ToolWindow = True
    '-----------------------------------------------
    .Add "TextBox",1,"Left=5","Top=30","Width=380","Height=200","Locked=False"

    .Add "Label",1,"Left=5","Top=5","Width=380","Height=20", _
            "Alignment=2","Caption=Введите текст:"
    
    .Add "Command",1,"Left=5","Top=235","Width=100","Height=20","Caption=Закрыть"

    .Visible = True    
    DoEvents

 End With

 '/Запуск DDE-сервера/
 '---------------------------------------------------------------------------------
 Sys.cSleep(100)
 Set objDDE = Sys.DDE.ControlDDE(0)
 Sys.DDE.ServerName = "oowriterdde" 

 '/Установка формы поверх всех окон/
 '---------------------------------------------------------------------------------
 Sys.cSleep(100)
 Sys.API.SetWindowPosA         Form.hWnd, _
                -1, _
                10, _
                10, _
                Form.Width/vbPx, _
                Form.Height/vbPy, _
                0
 DoEvents

 '/Открытие клиентского документа OOo Writer и простановка параметров DDE/
 '---------------------------------------------------------------------------------
 Sys.cSleep(100)
 RunOOWriterClient()
 DoEvents
 MsgBox "Готово. Введите текст в поле ввода формы LangMF.", vbSystemModal Or vbInformation,"DDE"

End Sub

'[Открытие клиентского документа OOo Writer и простановка параметров DDE]
'----------------------------------------------------------------------------------
Sub RunOOWriterClient()
    
    '/Создание основных объектов/
    '--------------------------------------------------------------------------
    Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
    DoEvents
    Set Stardesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
    DoEvents
    Set objDispatcher = objServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper")
    DoEvents

    '/Открытие пустого документа/
    '--------------------------------------------------------------------------        
    Sys.cSleep(100)
    Set objDocument = Stardesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
    DoEvents
    Sys.cSleep(100)

    '/Добавление секции, раздела, который будет выступать в роли получателя данных DDE/
    '--------------------------------------------------------------------------        
    Set PropertyValue = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

    Dim args(1)

    PropertyValue.Name = "RegionHidden"
    PropertyValue.Value = False
    Set args(0) = PropertyValue

    PropertyValue.Name = "RegionProtect"
    PropertyValue.Value = False
    Set args(1) = PropertyValue

    objDispatcher.executeDispatch objDocument.CurrentController.Frame, ".uno:InsertSection", "", 0, args
      DoEvents

    '/Простановка параметров DDE добавленной секции/
    '--------------------------------------------------------------------------            
    Sys.cSleep(100)
    Set objDDESection = objDocument.getTextSections().getByIndex(0)
    objDDESection.setName "section1"

    '/Сервер, приложение DDE(аналог - приложение Soffice)/
    objDDESection.DDECommandFile="LangMF"

    '/Имя объекта DDE(аналог - документ)/
    objDDESection.DDECommandType="oowriterdde"

    '/Контрол источник данных DDE(аналог - секция, ячейка)/
    objDDESection.DDECommandElement="lblDDE(0)"
      DoEvents
    Sys.cSleep(100)
End Sub

<#Module>

'==================================================================================
<#Form=Form>

    '/Изменение данных объекта DDE/
    '--------------------------------------------------------------------------
    Sub TextBox1_Change()
        objDDE.Caption = Form.TextBox(1).Text
    End Sub
    '--------------------------------------------------------------------------
    Sub Command1_Click()
        Form.UnloadForm()
    End Sub    
    '--------------------------------------------------------------------------
    Sub Form_Unload()
        Set objDDE = Nothing
        EndMF
        DoEvents
    End Sub

<#Form>
'==================================================================================
'pltrgst