Проект chess

Автор Massaraksh7, 4 июня 2024, 00:09

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

Massaraksh7

Цитата: mikekaganski от  7 июня 2024, 12:30что Вы просто проигнорировали мой ответ #10.
Значит, я не понял его. Поясните.

Massaraksh7

ЦитироватьВ Вашем случае единственный аргумент - это объект "ячейка" / "диапазон" / "набор диапазонов". И всегда передаётся конечное выделение - то есть нет события "вот с этого диапазона снято выделение".
Это правда.
ЦитироватьПоэтому да, здесь нужно, чтобы вызов был однократный.
Без сомнения.
ЦитироватьНо без бага нет проблемы.
А с багом есть. И?

mikekaganski

Цитата: mikekaganski от  7 июня 2024, 08:57В Вашем случае единственный аргумент - это объект "ячейка" / "диапазон" / "набор диапазонов". И всегда передаётся конечное выделение - то есть нет события "вот с этого диапазона снято выделение". Поэтому да, здесь нужно, чтобы вызов был однократный.

Поясняю: В функцию передаётся единственный аргумент - объект XCellRange либо XEnumerationAccess, содержащий несколько XCellRange. Это просто диапазоны ячеек. Больше ничего в обработчик не передаётся. Раз ничего другого в обработчик не передаётся, то никакой другой информации в обработчике нет.
С уважением,
Михаил Каганский

mikekaganski

Цитата: Massaraksh7 от  7 июня 2024, 12:50А с багом есть. И?

Если Вы знаете номер бага, то Вы можете отследить его состояние / исправление.
С уважением,
Михаил Каганский

Massaraksh7

Цитата: mikekaganski от  7 июня 2024, 12:56Если Вы знаете номер бага, то Вы можете отследить его состояние / исправление.
Хорошо, напишу попозже баг.

sokol92

Цитата: Massaraksh7 от  7 июня 2024, 12:28Я имею в виду не костыли, типа глобальных переменных (каких, например, кстати?),
Global LastSelected As String

Sub OnSelected(oSel)
  Dim s As String
  s=oSel.AbsoluteName
  If s<>LastSelected Then
    LastSelected=s
    'Msgbox LastSelected
  End If 
End Sub
Владимир.

Massaraksh7

Цитата: sokol92 от  7 июня 2024, 14:12...
Спасибо! А то по запросу "starbasic глобальная переменная" выходит всё, что угодно, кроме этого.

mikekaganski

Цитата: Massaraksh7 от  7 июня 2024, 15:06то по запросу "starbasic глобальная переменная" выходит всё, что угодно, кроме этого

Зато запрос "starbasic global variables" даёт очень хорошие результаты. Русский язык в поиске для программиста - чаще всего убийца эффективности.
С уважением,
Михаил Каганский

sokol92

Объяснение, почему в данном случае нужно писать именно Global, а не Dim, как бы мы написали в VBA, дано здесь.
ЦитироватьA public domain variable is only available so long as the associated macro is executing and then the variable is reset.
Вообще, "LibreOffice BASIC Programming Guide" и другие главы документации являются отличным дополнением к книгам Питояньяка при изучении LO.
Владимир.


Massaraksh7

Короче говоря, лучше пользоваться обычными событиями мыши press и release. По крайней мере, фокусов, подобных вышеописанным, там не заметил.
Global iii as integer
Global oDocView As Object
Global oMouseClickHandler As Object

Sub RegisterMouseClickHandler
 oDocView = ThisComponent.currentController
 oMouseClickHandler = createUnoListener("Chess_", "com.sun.star.awt.XMouseClickHandler")
 oDocView.addMouseClickHandler(oMouseClickHandler)
End Sub

Sub UnregisterMouseClickHandler
 on error resume next
 oDocView.removeMouseClickHandler(oMouseClickHandler)
 on error goto 0
End Sub

Function Chess_mousePressed(oEvt) As Boolean
 Chess_mousePressed = False
End Function

Function Chess_mouseReleased(oEvt) As Boolean
myController = ThisComponent.getCurrentController()
rng = myController.getSelection()
row = rng.RangeAddress.StartRow
col = rng.RangeAddress.StartColumn

sheets = ThisComponent.getSheets()
sheet = sheets.getByIndex(0)
sheet.getCellByPosition(0,iii).setString(Trim(CStr(row))+"/"+Trim(CStr(col)))
iii = iii + 1
Chess_mouseReleased = False
End Function


sokol92

#26
Для контроллеров электронных таблиц реализован также интерфейс XEnhancedMouseClickBroadcaster. Слушателю передается в качестве параметра событие EnhancedMouseEvent, которое содержит дополнительный атрибут Target - по какому объекту мы щелкнули мышью (ячейка, графический объект).

P.S. Думаю, мы облегчим поиск для будущих читателей этого замечательного форума, если вопросы / ответы будут хотя бы отдаленно относиться к заявленной теме.  :)
Владимир.

Massaraksh7

Цитата: sokol92 от 10 июня 2024, 14:14которое содержит дополнительный атрибут Target - по какому объекту мы щелкнули мышью (ячейка, графический объект).
Да, это удобно, спасибо. Хотя, и в случае XMouseClickHandler можно, наверное, проанализировать событие, и найти тип объекта с помощью supportsService.