mikekaganski
|
Не сразу нашел окошко с разделителями в параметрах.
На всякий случай:
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
mike, в приведенном мной примере почему-то файл открывается с установленном режимом разработки. Кнопка с макросом не работает. Я написал: "Кстати, в прилагаемом примере почему-то при загрузке включается режим разработки (и кнопка не работает), а в других случаях сохраняется ранее выбранный режим. Что я делаю не так? Как зафиксировать режим выполнения (а не разработки) при старте программы? См. Сервис - Формы - Режим разработки".
Другие файлы открываются, и режим разработки выключен. Как этим управлять?
Конечно же я эту проблему "поборол" вызовом метода SwitchControlDesignMode при загрузке файла (см. ниже), однако это требуется не всегда: при загрузке других файлов режим разработки отключен. Что бы это значило? Не могу уловить различия.
' Used by: Событие "Активизация документа". Sub Main Call SwitchControlDesignMode(False) End Sub
' Purpose: Переключает или устанавливает режим разработки (Сервис/Формы/Режим разработки). ' Used by: Main Sub SwitchControlDesignMode(Optional vState) Dim document as object Dim dispatcher as object
document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "SwitchControlDesignMode" args1(0).Value = IIf(IsMissing(vState), Not args1(0).Value, CBool(vState))
dispatcher.executeDispatch(document, ".uno:SwitchControlDesignMode", "", 0, args1()) End Sub
|
|
|
Записан
|
|
|
|
mikekaganski
|
Вообще режим просто записывается в файл. Поэтому если Вы активировали режим разработки и сохранили файл, он откроется в этом режиме.
Если оно так не работает, значит, надо искать последовательность действий, которая приводит к другому поведению, и писать баг.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
Так именно с файлом моего примера и есть такая проблема: не могу отключить режим разработки. Как он открывается у Вас? Другие файлы такой проблемы не создают.
|
|
|
Записан
|
|
|
|
mikekaganski
|
Он открывается в режиме разработки, да. Это записано в content.xml (см. <office:forms form:automatic-focus="false" form:apply-design-mode="true">).
Если отключить "Tools">"Forms">"Open in Design Mode" и сохранить, оно естественно начинает открываться в другом режиме.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
К сожалению, у меня на Linux Ubuntu 18.04 Calc 6.4 не получается достичь желаемого эффекта. И только с этим файлом. Файл всегда открывается в режиме разработки, поэтому я и поставил заплатку с переключением режима программно при активации документа. Можно ли добраться до этого свойства иначе (это похоже на баг) или вышлите мне мой собственный файл примера с отключенным режимом разработки.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
Всё, спасибо. Разобрался. Помимо флага "Режим разработки", который я сбрасывал, есть ещё один: "Открыть в режиме проектирования". Его сбросил, и всё заработало, как надо.
|
|
|
Записан
|
|
|
|
rami
|
Нет, окошки будут заполнены. А настройка будет пустой - по крайней мере у меня в русской Win 10 и версии 6.4.3.1
Поставил новую версию 6.4.3.2 и до открытия сбросил профиль, окошки заполнены, а макрос возвращает пустую строку. По видимому, если пользователь не изменил настройки, провайдер выдаёт пустую строку, а используются разделители по умолчанию. Тогда в макросе, проверяем, если получили пустую строку — значит пользователь не менял настройки, — назначаем по умолчанию.
|
|
|
Записан
|
|
|
|
mikekaganski
|
По видимому, если пользователь не изменил настройки, провайдер выдаёт пустую строку, а используются разделители по умолчанию.
Именно так. Тогда в макросе, проверяем, если получили пустую строку — значит пользователь не менял настройки, — назначаем по умолчанию. Но вот тут как раз то самое головоломное поведение начинается, когда "умолчания" разные для разных локалей. А локали могут быть настроены пользователем или браться из системы. И для правильного воспроизведения поведения калька мало знать текущую локаль, так ещё надо и иметь доступ к данным разделителей локалей, зашитым в ЛО.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
И каким будет окончательное и универсальное (кроссплатформенное) решение, кроме использования константы, как у меня в примере?
|
|
|
Записан
|
|
|
|
mikekaganski
|
Например, такой костыль. В листе создать служебный столбец (скажем, A; можно скрытый), в нём в A1 записать формулу "=SUM(1;1)", а в A2 - "=LEFT(RIGHT(FORMULA(A1);3);1)". И в коде брать значение из A2.
Вообще по-моему эта чехарда с разделителями здесь - это баг.
|
|
|
Записан
|
|
|
|
rami
|
Кстати, если изменить другую настройку, например, "Использовать английские имена функций", то провайдер выдаёт разделители, а не пустую строку и они записываются в файл registrymodifications.xcu (и вместе с ними ещё почти 140 КБ настроек).
Я не заметил, чтобы разделители изначально зависели от локали, скорей всего они зашиты в LibreOffice.
|
|
|
Записан
|
|
|
|
mikekaganski
|
@rami: см. ответ #18 - там я привёл ссылку на исходный код, который даёт дефолт для этой настройки.
|
|
|
Записан
|
|
|
|
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
 
Offline
Пол: 
Сообщений: 379
|
Ну, в моем конкретном примере можно прогнать строку дважды со вставкой пробела после разделителя: сначала точки с запятой, а потом просто запятой. Что-то одно да сработает.
Но если среди сторонников Calc’а есть перфекционисты, то их такое положение дел вряд ли устроит, и тогда, возможно, надо писать, куда следует…
|
|
|
Записан
|
|
|
|
economist
|
сначала точки с запятой, а потом просто запятой. - так и делаем. Настоящих перфекционистов в Calc нет.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
|