loginov_d Posted May 14, 2018 Share 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 Link to comment Share on other sites More sharing options...
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.