Как убрать режим копирования

Автор DrGarin, 28 ноября 2024, 10:48

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

DrGarin

Добрый день! После копирования и вставки строки через dispatcher.executeDispatch (frame,"uno:Copy"...)/dispatcher.executeDispatch (frame,"uno:Paste"...)  остается выделение на копированных ранее объектах. Как убрать такое в Star Basic?
Заранее большое спасибо!

Sirius34

Здравствуйте!
Можно просто курсор куда-нибудь переместить
ArgsDispatch1(0).Name = "ToPoint"
ArgsDispatch1(0).Value = "А1"
dispatcher.executeDispatch(CCF, ".uno:GoToCell", "", 0, ArgsDispatch1())

DrGarin

Спасибо, уважаемый Сириус. Не работает, увы. Пробовал вот что:
dispatcher.executeDispatch(document, ".uno:Deselect", "", 0, array())
dispatcher.executeDispatch(document, ".uno:TerminateInplaceActivation", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Cancel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

sokol92

Можно попробовать эмуляцию нажатия клавиши Esc, но я бы не советывал использование таких "тяжелых" методов без крайней необходимости.

' Эмуляция нажатия Escape
Sub SendEscape()
  Dim oKeyEvent As New  com.sun.star.awt.KeyEvent
  Dim oDoc As Object
  oDoc=ThisComponent
  oKeyEvent.Modifiers=0
  oKeyEvent.KeyCode=com.sun.star.awt.Key.ESCAPE
  Simulate_KeyPress oDoc, oKeyEvent
End  Sub

' Имитация нажатия клавиш клавиатуры.
' https://ask.libreoffice.org/t/create-a-macro-that-press-enter-automatic-once/27172/3?u=sokol92.
' - oDoc      документ LibreOffice.
' - oKeyEvent структура KeyEvent.
Sub Simulate_KeyPress(Byval oDoc As Object, Byval oKeyEvent as Object)
  Dim oWindow as object, oToolkit as Object
  If (Not (oKeyEvent Is Nothing)) And (Not (oDoc Is Nothing)) Then
    oWindow=oDoc.CurrentController.Frame.ContainerWindow
    oKeyEvent.Source=oWindow
    oToolkit=oWindow.Toolkit
    With oToolkit
      .keyPress(oKeyEvent)
      .keyRelease(oKeyEvent)
    End With
  End If 
End Sub
Владимир.

mikekaganski

С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 28 ноября 2024, 15:52ThisComponent.CurrentController.select(Nothing)
У меня "бегающая" рамка остается.

Version: 24.8.3.2 (X86_64) / LibreOffice Community
Build ID: 48a6bac9e7e268aeb4c3483fcf825c94556d9f92
CPU threads: 6; OS: Windows 10 X86_64 (10.0 build 19045); UI render: default; VCL: win
Locale: ru-RU (ru_RU); UI: ru-RU
Calc: threaded
Владимир.

mikekaganski

А... так речь о ячейках. Я думал, что "объекты" - это какие-то графические примитивы.
С уважением,
Михаил Каганский

mikekaganski

provider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
 arg = new com.sun.star.beans.PropertyValue
 arg.Name = "nodepath"
 arg.Value = "org.openoffice.Office.Calc/Input"
 node = provider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", array(arg))
 node.EnterPasteMode = false
 node.commitChanges()
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 28 ноября 2024, 17:19node.EnterPasteMode = false
Так мы на постоянной основе отключаем режим отображения "бегающей" рамки после копирования диапазона ячеек.

Похоже, первое упоминание EnterPasteMode...  :D

В макросах можно отключить отображение бегающей рамки, а в конце макроса включить (чтобы не пугать пользователей непривычным поведением).
Владимир.

DrGarin

Спасибо, @sokol92 , @mikekaganski !!
Помогло!!