Добрый день. Появилась нужда по двойному щелчку мыши менять цвет заливки.
Нашел в интернете чудный код. Но он для отпускания клавиши MouseOnClick_mouseReleased
а как узнать, что это был двойной щелчок? Подскажите...
REM Глобальные переменные
Public oMouseClickHandler
REM Начать слушать события от мышки
Sub RegisterMouseClickHandler
oMouseClickHandler = createUnoListener("MouseOnClick_", "com.sun.star.awt.XMouseClickHandler")
ThisComponent.getCurrentController().addMouseClickHandler(oMouseClickHandler)
End Sub
REM Остановить слушание
Sub UnregisterMouseClickHandler
On Error Resume Next
ThisComponent.getCurrentController().removeMouseClickHandler(oMouseClickHandler)
On Error GOTO 0
End Sub
REM Хоть эта процедура ничего не делает, но реализацию метода предоставить обязаны
Sub MouseOnClick_disposing(oEvt)
End Sub
REM Кнопка нажата
Function MouseOnClick_mousePressed(oEvt) As Boolean
REM Можно обрабатывать событие в этот момент
REM Но лучше (так считается) в момент отпускания кнопки
MouseOnClick_mousePressed = False
End Function
REM Кнопка отпущена
Function MouseOnClick_mouseReleased(oEvt as object) As Boolean
MouseOnClick_mouseReleased = False ' Разрешить офису другие обработки этого события
oComp = StarDesktop.getCurrentComponent().CurrentSelection(0)
On Local Error GoTo NODOCUMENTTYPE
If oComp.FillColor = RGB(255, 0, 0) Then
oComp.FillColor = RGB(0, 255, 0)
else
oComp.FillColor = RGB(255, 0, 0)
endif
NODOCUMENTTYPE:
End Function
Всем спасибо. Решил. Как бы еще убрать стандартное редактирование текста внутри фигуры при двойном щелчке.
Function MouseOnClick_mouseReleased(oEvt as object) As Boolean
MouseOnClick_mouseReleased = False
if (oEvt.ClickCount > 1) then
oComp = StarDesktop.getCurrentComponent().CurrentSelection(0)
On Local Error GoTo NODOCUMENTTYPE
If oComp.FillColor = RGB(255, 0, 0) Then
oComp.FillColor = RGB(0, 255, 0)
else
oComp.FillColor = RGB(255, 0, 0)
endif
endif
NODOCUMENTTYPE:
End Function
Если нужно строго двойной щелчок (скажем, не реагировать на третий), то нужно заменить if (oEvt.ClickCount > 1) на if (oEvt.ClickCount = 2).
Цитата: vitalukalo от 5 мая 2021, 13:43
Как бы еще убрать стандартное редактирование текста внутри фигуры при двойном щелчке.
Запретите офису другие обработки этого события (см. комментарий в строке присвоения возвращаемого значения функции MouseOnClick_mouseReleased). Нужно делать это только если замена цвета была успешной. Правда, при этом появится другой побочный эффект - если двинуть мышь сразу после двойного щелчка, фигура потянется следом.
Спасибо
ЦитироватьПравда, при этом появится другой побочный эффект - если двинуть мышь сразу после двойного щелчка, фигура потянется следом.
Я ж об этом.
Цитата: vitalukalo от 5 мая 2021, 15:45Я ж об этом.
Хе, это довольно трудно - догадаться, что
Цитата: vitalukalo от 5 мая 2021, 13:43
Как бы еще убрать стандартное редактирование текста внутри фигуры при двойном щелчке.
на самом деле значит "Я на самом деле знаю как убрать стандартное редактирование текста, и мой вопрос вовсе не о том, как убрать стандартное редактирование текста, а о том, что есть такой побочный эффект у моего метода (который я не описал), и я хотел бы узнать, как бы его победить" ;)
"Убрать стандартное редактирование текста внутри фигуры" и перемещение мышью можно, если снять выделение с фигуры после нажатия. Для этого нужно снять выделение с выбранного объекта:
Цитировать
REM Кнопка отпущена
Function MouseOnClick_mouseReleased(oEvt as object) As Boolean
MouseOnClick_mouseReleased = False ' Разрешить офису другие обработки этого события
'oComp = StarDesktop.getCurrentComponent().CurrentSelection(0) 'это убрать совсем
oDoc = ThisComponent
oComp = oDoc.CurrentSelection(0) 'выбранный объект
oDoc.CurrentController.Select(oDoc.CreateInstance("com.sun.star.drawing.Background")) 'снять выделение с выбранного объекта
On Local Error GoTo NODOCUMENTTYPE
If oComp.FillColor = RGB(255, 0, 0) Then
oComp.FillColor = RGB(0, 255, 0)
else
oComp.FillColor = RGB(255, 0, 0)
endif
NODOCUMENTTYPE:
End Function
Коллеги, спасибо за интересные сообщения!
Цитата: sokol92 от 5 мая 2021, 18:08Убрать стандартное редактирование текста внутри фигуры" и перемещение мышью можно, если снять выделение с фигуры после нажатия. Для этого нужно снять выделение с выбранного объекта:
Спасибо. Это работает если внутри нет текста. Если внутри текст то он все равно выделяется.
Цитата из #8 не моя. :)
Давайте вместе проверим (см. вложение). Естественно, двойной щелчок не должен производится в область непосредственно текста.
Да. Спасибо. Работает.