Здравствуйте!
Делаю проект с активным использованием шаблонных окон и наткнулся на пару странностей и расхождений с документацией. Хочу поделиться наблюдениями.
1. Мерцание элементов в OnShow и ограничение OnInitХотел настроить динамическое скрытие полей в шаблонном окне (в зависимости от заголовка Title). Изначально пошел в OnInit, но выяснил, что для этой задачи он не подходит: в момент OnInit проверка (Sender is TM_Window) не проходит, да и свойства самого экземпляра еще толком не подтянулись. Пришлось перенести логику в OnShow. Всё заработало, но вылезла эстетическая проблема: окно сначала появляется на клиенте в обычном виде из редактора, и только потом срабатывает скрипт. Из-за этого скрываемые элементы успевают «мигнуть» на 1-2 кадра при открытии. Вот к какому коду в OnShow в итоге пришлось прийти:
var
idx : Integer;
SaveButton : TM_Button;
begin
if (Sender is TM_Window) then
begin
with (Sender as TM_Window) do
begin
if (Title <> 'Настройки ВКТ')then
for idx := 0 to 2 do
(GetTemplateObject('Flow' + IntToStr(idx)) as TM_Control).Visible := True
end;
end;
end.
Было бы здорово иметь какое-то событие перед самой отрисовкой экземпляра на клиенте (что-то вроде OnBeforeShow или OnTemplateInit), либо дать возможность полноценно работать с контекстом конкретного клиента еще на этапе OnInit, чтобы избежать мерцания UI.
2. Небольшой пропуск в справке по TM_TemplateWindowИскал в документации класс для работы с шаблонными окнами, но в разделе
Свойства объектов про TM_TemplateWindow ничего нет. Через (Sender is TM_Window) подсмотрел, что во время исполнения просто создаётся обычный TM_Window. Если добавить эту мелкую деталь в справку (что шаблоны приводятся к TM_Window), это сэкономит кучу времени тем, кто пытается приводить типы через as TM_TemplateWindow.
3. Опечатка в документации: TM_ComboBox.ItemIndexНа странице справки по
TM_ComboBox.ItemIndex написано, что свойство работает только на чтение. Решил поэкспериментировать и обнаружил, что запись туда отлично работает - выбранный пункт без проблем переключается из скрипта. Надеюсь, что это просто неточность в описании, а не «фича», которую закроют в следующих обновлениях.
4. Баг отображения значений на Тренде в Веб-клиенте (пропадают нули при 10, 100 и т.д.)Наткнулся на баг, который воспроизводится строго на Web-клиенте (на десктопе всё отображается корректно, скриншоты приложил ниже). Если переменная на тренде принимает значение ровно 10 или 100, то в таблице значений под графиком на Веб-клиенте отображается цифра 1 - как будто просто отбрасываются нули. При этом сама линия тренда отрисовывается на правильном уровне. Как только значение немного меняется (например, опускается до 99.9 или 9.9), подпись под графиком сразу приходит в норму. Похоже на ошибку форматирования числа или маски вывода именно в веб-модуле при работе с круглыми десятками и сотнями.