Форум » [x]Harbour » Где можно взять примеры работы с OLE Open Office » Ответить

Где можно взять примеры работы с OLE Open Office

Andrey: Всем привет. В связи с борьбой с пиратами нужно переползать на открытый ОФИС. А как работать с этим OLE в хХарборе - я не знаю. Может кто-нибудь поделиться примерами ? Заранее благодарю.

Ответов - 34, стр: 1 2 All

MIKHAIL: Andrey пишет: "file://" у меня так "file:///"

Pasha: Хозяйке на заметку (полезные рецепты): В OpenOffice Calc пожно заполнять значения сразу диапазону ячеек, состоящему из нескольких строк. Пример (несамодостаточный): ... nRow := 10 nCol := 1 oRange := oSheet:getCellRangeByPosition(nCol-1, nRow-1, nCol+1, nRow) oRange:setDataArray({{1,2,"Example"},{4,5,"fill"}}) Причем для OO не надо создавать двумерный массив, как это требует MS Excel, а достаточно передать одномерный массив Variant, каждый элемент которого является подмассовом, как это и делает harbour hbwin

Andrey: Всем привет. Как закрыть Эксель, знаю: oExcel:Application:Quit() А как закрыть OO Calc незнаю. Может кто подскажет ? И ещё один вопрос по Калку. Как окно с Калком вывести на передний план ? В Экселе это просто:[pre2] hWnd := oExcel:hWnd // хендл окна Excel ShowWindow( hWnd, 6 ) // MINIMIZE windows ShowWindow( hWnd, 3 ) // MAXIMIZE windows BringWindowToTop( hWnd ) // a window on the foreground[/pre2]


Pasha: Andrey пишет: А как закрыть OO Calc незнаю. Может кто подскажет ? гугль сразу же подсказал: oDoc:close(.t.)

Andrey: Pasha пишет: oDoc:close(.t.) СПАСИБО ! А как быть со вторым вопросом ?

Dima: Andrey пишет: А как быть со вторым вопросом ? Помнится ты с MS WORD тоже долго парился на эту тему , попробуй в нее заглянуть , мож поможет.

Andrey: Не, не то... Как получить хендл окна с Калком ? Для Экселя так: [pre2]hWnd := oExcel:hWnd // хендл окна Excel [/pre2]

Dima: Andrey Попробуй гугл спросить Вот тут обсуждали тему тут

Andrey: Спасибо Дима. Код перевести не смог. Сделал по старинке - перебором окон, как для Ворда. Только срабатывает код ОДИН раз, если есть открытое окно уже с Калком, то повторный перевод окна на передний план не срабатывает. По ссылке что ты дал, там об этом и говорилось. Кому интересно, вот код: [pre2].... If lActivate oDoc:getCurrentController:getFrame:getContainerWindow:setVisible( .t. ) SetCalcWindowToForeground(cFile) Else oDoc:close(.t.) // закрыть Calc EndIf RETURN Nil ////////////////////////////////////////////////////////////////////// // окно Calc на передний план STATIC FUNCTION SetCalcWindowToForeground(cFile) LOCAL hWnd, cTitle // поиск ХЕНДЛА открытого окна документа cTitle := hb_FNameNameExt(cFile) + " - OpenOffice Calc" hWnd := FindWindowEx(,,, cTitle ) IF hWnd == 0 MsgStop("Не нашёл окно: " + cTitle, "Error") ENDIF IF hWnd > 0 ShowWindow( hWnd, 6 ) // MINIMIZE windows ShowWindow( hWnd, 3 ) // MAXIMIZE windows BringWindowToTop( hWnd ) // A window on the foreground ENDIF RETURN NIL[/pre2]

Andrey: Andrey пишет: Как получить хендл окна с Калком ? Для Экселя так: hWnd := oExcel:hWnd // хендл окна Excel Возвращаюсь опять к этому вопросу ! Как получить хендл окна для OO Calc и для LibreOffice ? Пример MiniGUI\SAMPLES\Advanced\Tsb_Export\demo.exe работает и под LibreOffice Только там настроено переключение окна на OO Calc. Как сделать универсальной функцию: [pre2]// окно Calc на передний план // срабатывает только если нет окна ОО Calc на рабочем столе компа. STATIC FUNCTION SetCalcWindowToForeground(cFile) LOCAL hWnd, cTitle // поиск ХЕНДЛА открытого окна документа cTitle := hb_FNameNameExt(cFile) + " - OpenOffice Calc" hWnd := FindWindowEx(,,, cTitle ) IF hWnd == 0 MsgStop("Не нашёл окно: " + cTitle, "Error") ENDIF IF hWnd > 0 ShowWindow( hWnd, 6 ) // MINIMIZE windows ShowWindow( hWnd, 3 ) // MAXIMIZE windows BringWindowToTop( hWnd ) // A window on the foreground ENDIF RETURN NIL[/pre2]

SergKis: Andrey пишет Как получить хендл окна для OO Calc и для LibreOffice ? В hmg есть ф-я EnumWindows(), попробуй через нее определить[pre2] LOCAL ahWnd := EnumWindows() FOR nI := 1 TO Len(ahWnd) ? nI, , ahWnd[ nI ], GetClassName(ahWnd[ nI ]), GetWindowText(ahWnd[ nI ]) NEXT в списке найди ClassName и Text для нужных окон потом по ним получи нужные handle *-----------------------------------------------------------------------------* STATIC FUNCTION myGetWindowHandles( cText, cClass, lLogOut ) *-----------------------------------------------------------------------------* LOCAL i, h, t LOCAL aWnd := EnumWindows() LOCAL aTmp := {} LOCAL aRet := {} IF empty(cClass); aTmp := aWnd ELSE ; AEVal(aWnd, {|hw| iif( GetClassName(hw) == cClass, AAdd( aTmp, hw ), )}) ENDIF IF ! empty(cText) .and. HB_ISCHAR(cText) .and. Len(aTmp) > 0 FOR EACH h IN aTmp t := GetWindowText( h ) IF cText $ t ; AAdd( aRet, h ) ENDIF NEXT ELSE aRet := aTmp ENDIF IF ! Empty(lLogOut) FOR i := 1 TO Len(aTmp) t := GetWindowText(aTmp[ i ]) _FileLog( str(i, 5), aTmp[ i ], GetClassName(aTmp[ i ]), t ) NEXT ENDIF RETURN aRet [/pre2]

Andrey: SergKis пишет: в списке найди ClassName и Text для нужных окон А без класса нельзя ? Нет у меня LibreOffice . Не знаю какой класс для него используется.

SergKis: Andrey У тебя текст ф-ии перед глазами, разберись, запусти myGetWindowHandles( , , .T. ) поправь только (я из своей версии переносил) _FileLog( .T., str(i, 5), aTmp[ i ], GetClassName(aTmp[ i ]), t ) Получишь весь список handle окон с классами и title текстом Если запустишь где уст. LibreOffice узнаешь имя класса (у меня тоже его нет). Вопрос. Меняется ли имя класса от версии ? Если знаешь кусок текста в title окна для LibreOffice, задай его.

Andrey: SergKis пишет: запусти myGetWindowHandles( , , .T. ) Запустил. Переделываю его под себя. SergKis пишет: Если знаешь кусок текста в title окна для LibreOffice, задай его. Да делаю поиск по имени файла.



полная версия страницы