Как программно свернуть (минимизировать) окно LO Или ОО

Автор МР, 17 марта 2015, 19:46

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

МР

А как не скрыть, а свернуть (минимизировать) окно LO Или ОО ?

rami

#1
Цитата: МР от 17 марта 2015, 17:46свернуть (минимизировать) окно LO Или ОО
Sub WindowMiniMaxi
oWind=StarDesktop.getCurrentFrame().getContainerWindow()
oWind.IsMinimized=true   'сворачивает
wait 500          'выдержка времени(если нужно)
oWind.IsMinimized=false   'разворачивает
End Sub

МР

Цитата: rami от 17 марта 2015, 20:05
Цитата: МР от 17 марта 2015, 17:46свернуть (минимизировать) окно LO Или ОО
Sub WindowMiniMaxi
oWind=StarDesktop.getCurrentFrame().getContainerWindow()
oWind.IsMinimized=true   'сворачивает
wait 500          'выдержка времени(если нужно)
oWind.IsMinimized=false   'разворачивает
End Sub

Спасибо, с некоторыми изменениями работает. Возможно, подскажете, как чуть изменить алгоритм. Уточню ситуацию - требуется загрузить данные из книги Excel в бух. программу, на компе стоит MSO Starter, поэтому решил загружать через LO. "Цепочечные" конструкции в языке этой программы не проходят, поэтотому выполняю "по шажкам":

Фв=Исх_файл
oServiceManager = СОЗДАТЬ_ОБЪЕКТ("com.sun.star.ServiceManager")
oCalcDoc = oServiceManager.createInstance("com.sun.star.frame.Desktop")
Имф="file:///"+ЗАМ(ЗАМ(Фв," ","%20"),"\","/")
Document = oCalcDoc.LoadComponentFromURL(Имф, "_default",0,Массив);
oContr=Document.getCurrentController()
oFrame=oContr.getFrame()
oWind=oFrame.getContainerWindow()
oWind.IsMinimized=ДА     



Хотелось бы свернуть окно ещё до открытия документа. К сожалению в объектной модели ОО-LO не силён, за что там зацепиться до открытия документа?

JohnSUN

И что за ,Массив идёт четвёртым параметром в LoadComponentFromURL?
Глянь в этой вот книге листинг 5.22 или главу  5.45. Load hidden then setVisible
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

МР

#4
Массив - структура, через которую приложение передает параметры в ОО-LO. Как по другому - не знаю. В своё время сделал подстрочник с  примера, взятого с какого-то 1с-овского форума. Работает и ладно. Там какая-то сложная структура, в нашей программе , да похоже и в 1с создающаяся не напрямую, а с помощью внешних средств:

  scr = СОЗДАТЬ_ОБЪЕКТ("MSScriptControl.ScriptControl");
  scr.language = "javascript";
  scr.eval("Массив=new Array()");
  Массив = scr.eval("Массив");
  scr.AddCode("function SetItem(ind,val){Массив[ind]=val}");


Речь-то сейчас не об Массиве. Хотелось просто свернуть (минимизировать, не скрыть) LO на время закачки данных, причём ещё до открытия книги. Подскажет кто - спасибо. Не получится-придётся клиенту секунду-другую на открытую книгу смотреть. Питоньяка ради этого читать - просто времени нет. Я когда-то честно его книги на Инфре купил , но так и не собрался. Мне это и нужно-то вот в таких случаях редких, когда у клиента MSO нет или Starter установлен.

JohnSUN

А, так ты еще на 7.7 сидишь? Я почему-то решил, что речь о "восьмёрке"...
Может, все-таки переименуем это обсуждение? Что-то вроде "Управление окнами (видимостью документов? Импорт из документов офиса?) из 1С v.7.7"? И слово [РЕШЕНО] пока уберём
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

МР

#6
Это вообще не 1С - бывает и такое ;D. Могу программу назвать, если это не считается здесь рекламой. А как обсуждение назывется - мне всё равно, приведи в соответствие с правилами форума, если это важно. У меня -то прав нет для этого, как я понимаю.Мне бы  кто сказал, как LO свернуть макросом до загрузки документа ;D

JohnSUN

Внешний вид кода сбил с толку.

Давай вернёмся к истокам: главная задача не управление окнами, сворачивание/разворачивание, скрытые/видимые, а считать данные их xls-файла не сильно мигая при этом экраном?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

МР

#8
Задача по убиранию окна - второстепенная  - дальше некуда. Перед пользователем форма из его программы. Нажал он кнопочку - открылось окно LO, заслонило его программу. Открылась книга, из которой  будет идти загрузка, потом свернулаcь (способом, который подсказали) . Миганий никаких особых нет. Дальше считали данные, закрыли Calc, обрабатываем данные. Всего-то навсего, по возможности, хочу свернуть окно пораньше, ещё до открытия книги. Мог бы вообще всё это хозяйство невидимым сделать, знаю как - но не хочу. Ещё на Excel-е наелся: сбой и висит тот Excel , только диспетчером задач и убивается. А буху оно надо?

rami

А если поставить сворачивание окна на событие "открытие документа"? Документ только появится на мгновение (десятые доли секунды) и сразу сворачивается.

JohnSUN

Цитата: rami от 18 марта 2015, 12:22
...появится на мгновение (десятые доли секунды) и сразу сворачивается.
Ну, мы-то знаем, что обычно это отлично срабатывает на наших машинах, на тех, где код разрабатывается и отлаживается. А на реальных рабочих машинах эти десятые доли могут растянуться на минуты. Потому что мы за своей техникой ухаживаем.
Цитата: МР от 18 марта 2015, 12:12
А буху оно надо?
Другая идея бродит где-то рядом... Как насчет открытия файла сразу средствами ОС? Ну, что-то вроде
ВыполнитьКомандуСистемы("START /MIN scalc "+DocPath)

А потом выждать полсекунды-секуду (ну, чтобы книга успела загрузиться) и отловить эту только что открывшуюся книгу чем-то вроде
oComponents = StarDesktop.Components
oEnum=oComponents.CreateEnumeration
While oEnum.HasmoreElements
oComponent = oComponents.NextElement
If hasUnoInterfaces(oComponent,"com.sun.star.frame.XModel") then
If ВРЕГ(oComponent.URL) = ВРЕГ(DocPath) then
Док = oComponent
End If
Wend
(Ясен день, код не отлаживал, так, набросал что-то по мотивам Питоньяка)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

МР

Хороша подсказка. Средствами системы я  любое приложение сразу в свёрнутом виде запустить могу. А вот как зацепить потом запущенный LО не представлял. Попробую - отпишусь. Сейчас просто более срочная работа есть. Попутно - а запущенный Portable LO так отловится? Или только зарегистрированный в системе? Нет у меня , к сожалению, четкого представления кто на ком стоял что с чем и как взаимодействует.