Jump to content

Как мне удалось управлять рабочей областью скроллбокса TUnimScrollBox


loginov_d

Recommended Posts

Как оказалось, 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
Link to comment
Share on other sites

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...