loginov_d Posted May 14, 2018 Posted May 14, 2018 Как оказалось, UniGui передает высоту рабочей области скроллбокса только один раз. Используется свойство ScrollHeight, которое было определено автоматически в дизайн-тайме (в инспекторе объектов его не видно). Мне же потребовалось расположить на скроллбоксе несколько TUnimPanel со свойством Height=auto. Получилось, что реальная суммарная высота панелек отличается от размера, который был в свойстве ScrollHeight, в результате компоненты в скроллбоксе обрезались то снизу, то сверху. Я потратил почти весь день на то, чтобы решить эту проблему. Решить её только на стороне браузера не получилось, поскольку UniGui прячет некоторые детали скроллбокса. Если я вызываю UnimScrollBox1.ScrollHeight := 1000, то видно, что UniGui обращается к какому-то дополнительному объекту и именно для него вызывает setHeight(1000). Как достучаться до этого объекта из кода JS - я не разобрался. Пришлось прибегнуть в Ajax-запросу. Для UnimScrollBox1 написал клиентский обработчик: function resize(sender, info, eOpts) { var h = MainmForm.UnimPanel1.el.dom.offsetHeight + MainmForm.UnimPanel2.el.dom.offsetHeight + MainmForm.UnimPanel3.el.dom.offsetHeight + MainmForm.UnimPanel4.el.dom.offsetHeight; ajaxRequest(MainmForm.UnimScrollBox1, 'SetScrollHeight', { "sh1": h }); } Обработка Ajax-запроса: procedure TMainmForm.UnimScrollBox1AjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = 'SetScrollHeight' then UnimScrollBox1.ScrollHeight := StrToInt(Params.Values['sh1']); end; Есть ли идеи как решить задачу более красиво? Неплохо было бы, если бы данную задачу мог решить UniGui без написания дополнительного кода. 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.