Jump to content

Recommended Posts

Posted

Как оказалось, 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 без написания дополнительного кода.
  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...