Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение поведения полосы прокрутки в TListView из FireMonkey для постоянного отображения

Delphi , Компоненты и Классы , TScrollBox

При работе с компонентом TListView в FireMonkey, пользователи могут столкнуться с проблемой, когда полоса прокрутки отображается не всегда, а зависит от наличия сенсорного экрана на системе. В этой статье мы рассмотрим, как можно переопределить это поведение и показать полосу прокрутки всегда, когда места на списке не хватает для отображения всех элементов.

Оригинальная проблема Вопрос, заданный на форуме, заключается в том, как переопределить поведение видимости полосы прокрутки в TListView из FireMonkey, чтобы она отображалась всегда, когда места на списке не хватает для отображения всех элементов. Пользователь отметил, что в методе TListViewBase.Create видимость полосы прокрутки зависит от результата функции HasTouchTracking, которая, в свою очередь, зависит от значения TScrollingBehaviour.TouchTracking, полученного из SystemInformationService.GetScrollingBehaviour. Пользователь просит подсказок, как переопределить это поведение.

Альтернативный ответ Одним из предложенных решений было создание отдельного юнита для переопределения поведения полосы прокрутки на конкретных платформах. В качестве примера был представлен код для переопределения поведения на Windows. В этом коде создается новый сервис, который удаляет установленный сервис и сохраняет ссылку на него для частей, которые не переопределяются, а затем заменяет его своим собственным.

unit DW.ScrollingBehaviourPatch.Win;

interface

implementation

uses
  FMX.Platform;

type
  TPlatform = class(TInterfacedObject, IFMXSystemInformationService)
  private
    class var FPlatform: TPlatform;
    FSysInfoService: IFMXSystemInformationService;
  public
    { IFMXSystemInformationService }
    function GetScrollingBehaviour: TScrollingBehaviours;
    function GetMinScrollThumbSize: Single;
    function GetCaretWidth: Integer;
    function GetMenuShowDelay: Integer;
  public
    constructor Create;
    destructor Destroy; override;
  end;

{ TPlatform }

constructor TPlatform.Create;
begin
  inherited;
  if TPlatformServices.Current.SupportsPlatformService(IFMXSystemInformationService, FSysInfoService) then
    TPlatformServices.Current.RemovePlatformService(IFMXSystemInformationService);
  TPlatformServices.Current.AddPlatformService(IFMXSystemInformationService, Self);
  FPlatform := Self;
end;

destructor TPlatform.Destroy;
begin
  inherited;
end;

function TPlatform.GetCaretWidth: Integer;
begin
  Result := FSysInfoService.GetCaretWidth;
end;

function TPlatform.GetMenuShowDelay: Integer;
begin
  Result := FSysInfoService.GetMenuShowDelay;
end;

function TPlatform.GetMinScrollThumbSize: Single;
begin
  Result := FSysInfoService.GetMinScrollThumbSize;
end;

function TPlatform.GetScrollingBehaviour: TScrollingBehaviours;
begin
  Result := [TScrollingBehaviour.Animation, TScrollingBehaviour.TouchTracking];
end;

initialization
  TPlatform.Create;

end.

Подтвержденный ответ Для решения проблемы, предложенного в альтернативном ответе, пользователь может отключить отслеживание прикосновений, переопределив функцию GetScrollingBehaviour, как показано ниже:

function TPlatformListViewWorkaround.GetScrollingBehaviour: TScrollingBehaviours;
begin
  result := fSysInfoService.GetScrollingBehaviour - [TScrollingBehaviour.TouchTracking];
end;

Однако, следует учитывать, что с этим решением список на сенсорных системах больше не будет поддерживать прокрутку пальцем.

Из-за этих ограничений было предложено открыть заявку на изменение в Embarcadero Quality Central, чтобы расширить TListView новым свойством SuppressScrollBarOnTouchSystems. Это свойство позволило бы пользователям управлять поведением полосы прокрутки в соответствии с их потребностями, не жертвуя функциональностью на сенсорных системах.

В заключение, пользователи FireMonkey могут изменить поведение полосы прокрутки в TListView, чтобы она отображалась всегда, когда места на списке не хватает для отображения всех элементов. Это можно сделать, переопределив поведение полосы прокрутки или используя предложенное расширение свойства SuppressScrollBarOnTouchSystems.

Создано по материалам из источника по ссылке.

В статье описывается проблема с полосой прокрутки в компоненте TListView из FireMonkey, когда она не отображается всегда, а зависит от наличия сенсорного экрана на системе, и предлагаются способы переопределения этого поведения для отображения полосы прок


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TScrollBox ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 09:03:53/0.0034871101379395/0