Как убрать "выделенность" картинки

Автор YudinAlex, 12 сентября 2013, 10:34

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

YudinAlex

Создаю в Writer'е новый документ. Вставляю картинку.
Картинка становится выделенной. И я не могу после нее вставить таблицу. Как убрать выделенность?
Если я сам мышкой клацаю внизу - все хорошо и таблица вставляется.
Но в макрос это действие не пишется.

Hasim

Весь ваш используемый код можете показать?
Возможно есть альтернативные методы Basic'a для вставки и картинки и таблицы.

YudinAlex

Картинка вставляется через ".uno:Paste".
Таблица через ".uno:InsertTable".
В обоих случаях вставленный объект становится активным.
Вопрос только в том как его сделать неактивным, т.е. не выделенным.
Для Ворда это делается легко.
А тут только с помощью фиктивного поиска (".uno:ExecuteSearch") удается это сделать.
Это как-то горбато получается.

YudinAlex

Мне предложили
ЦитироватьoText = oDocument.getText() 
  ... 
oTextRange = oText.getEnd()  && oText.getStart() 
на VFP Форуме, но это не помогло.
Может это близко к решению, но не решение

JohnSUN

Добро пожаловать на форум!
Насчет "горбато" - полностью согласен!
.uno: для "нормальных" скриптов лучше вообще не использовать. Есть всего несколько задач, с которыми диспетчер справляется лучше, чем какие-то другие приёмы. Обычно это задачи связанные с отображаемыми эффектами - разные масштабирования, скроллинги и т.п.
А для работы с контентом документа (рисунки и таблицы - это ведь контент?) лучше пользоваться заготовками кода, которые собрал и подробно описал Эндрю Питоньяк. Например, в главе 5.9. Loading/Inserting an image into your document он рассказывает, что картинка в текстовый документ вставляется в два приема: сначала файл с изображением внедряется в документ и у него появляется свой собственный URL, а потом этот урл вставляется во все нужные места документа... При этом можно не бояться, что что-то останется выделенным - команда select нигде не выполняется
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Попробуй добавить эту команду сброса диспетчеру:
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())

Весь макрос:
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())
end sub


Прикладываю файл со списком всех команд диспетчеру
(нашел совершенно случайно, так чтобы не искать потом)




[вложение удалено Администратором]

Hasim

Но лучше диспетчером не пользоваться, как правильно заметил JohnSUN. АРI-функции лучше.
И вот хорошо бы конкретные примеры их использования для вставки картинок, таблиц, текста, а то и всего этого вместе.



JohnSUN

Со вставкой текста обломался - тривиально же ж... А картинки и таблицы - как-то так

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

YudinAlex

Огромное спасибо!
".uno:Escape" решает проблему!
Собственно я получил 2 варианта решения.
Один прямой, второй обходной. Я об этом и не мечтал!

YudinAlex

Поспешил я.
Да, выделенность уходит.
Но таблица не вставляется.
Т.е. само состояние Writer'а какое-то связанное с объектом.
Если вначале вставить таблицу, дать Uno:Escape, то картинка вставляется в первую ячейку.
Изображение генерируется в Фоксе. Поэтому удобно через Clipboard вставлять, т.е. прямым копипастом.

JohnSUN

Ну, а если после .uno:Escape дважды делать еще и .uno:GoToEndOfDoc?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

YudinAlex

ЦитироватьНу, а если после .uno:Escape дважды делать еще и .uno:GoToEndOfDoc
Тогда все в порядке. Да, именно 2 раза!
Никогда бы не додумался! Спасибо, наконец то!!!

JohnSUN

Там прикол в чем - когда вставляем таблицу, курсор становится в её первую ячейку. Первый uno:GoToEndOfDoc перекидывает его в последнюю ячейку, а следующий - уже по-настоящему перебрасывает его в конец документа (за пределы таблицы). Для картинки хватило бы и одного uno:GoToEndOfDoc...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

YudinAlex

Спасибо за объяснение. Я его процитировал на Фокс клубе.