Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2025, 10:19   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Удаление рамки вокруг компонента TMSFMXBarButton

Добрый день!
В общем, есть одна проблема с компонентом TMSFMXBarButton при разработке мобильного приложения для Android в Delphi 10.4
Дело в том, что если поместить эту кнопку на форму и запустить приложение, то вокруг кнопки отображается черная рамка (см.вложение 1.png).
Я обыскался в исходном коде модуля FMX.TMSBarButton.pas и не нашел, как убрать эту рамку.
Сам файл FMX.TMSBarButton.pas добавляю вложением к теме.
Причем, если установить для кнопки TMSFMXBarButton свойство, например, Kind=bkBack, то я нашел в FMX.TMSBarButton.pas как убрать черную рамку вокруг кнопки при таком свойстве и вот код, который отключает ее:
Код:
procedure TTMSFMXBarButtonShape.Paint;
var
  pth: TPathData;
begin
  case Layout of
    slRectangle: inherited;
    slPointer:
    begin
      pth := TPathData.Create;
      case Direction of
        sdLeft:
        begin
          pth.MoveTo(PointF(0, Height / 2));
          pth.LineTo(PointF(10, 0));
          pth.LineTo(PointF(Width - XRadius, 0));
          pth.AddArc(PointF(Width - XRadius, YRadius), PointF(XRadius, YRadius),-90, 90);
          pth.LineTo(PointF(Width, Height - YRadius));
          pth.AddArc(PointF(Width - XRadius, Height - YRadius), PointF(XRadius, YRadius),0, 90);
          pth.LineTo(PointF(10, Height));
        end;
        sdRight:
        begin
          pth.MoveTo(PointF(Width, Height / 2));
          pth.LineTo(PointF(Width - 10, Height));
          pth.LineTo(PointF(XRadius, Height));
          pth.AddArc(PointF(XRadius, Height - YRadius), PointF(XRadius, YRadius),90, 90);
          pth.LineTo(PointF(0, YRadius));
          pth.AddArc(PointF(XRadius, YRadius), PointF(XRadius, YRadius),180, 90);
          pth.LineTo(PointF(Width - 10, 0));
        end;
      end;
      pth.ClosePath;
      pth.Flatten;
      Canvas.FillPath(pth, AbsoluteOpacity, Fill);

      {Отключение рамки вокруг кнопок с типом Kind=bkBack}
//      Canvas.DrawPath(pth, AbsoluteOpacity, Stroke);

      pth.Free;
    end;
  end;
end;
После отключения черной рамки для кнопки TMSFMXBarButton свойство, например, Kind=bkBack, то кнопка выглядит так как мне надо (см.вложение 2.png).

Мне нужно то самое сделать для остальных свойств кнопки TMSFMXBarButton при других значениях свойства Kind.

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

Может быть кто-нибудь сталкивался с этим и решил это.
Изображения
Тип файла: png 1.png (41.6 Кб, 25 просмотров)
Тип файла: png 2.png (7.5 Кб, 25 просмотров)
Вложения
Тип файла: zip FMX.TMSBarButton.zip (4.1 Кб, 2 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 04.02.2025, 12:11   #2
cllc
 
Регистрация: 17.01.2020
Сообщений: 7
По умолчанию

Попробуйте сами отрисовать, вместо inherited, аналогично slPointer:
Код:
    slRectangle: 
    begin
      pth := TPathData.Create;
      pth.MoveTo(PointF(XRadius, 0));
      pth.LineTo(PointF(Width - XRadius, 0));
      pth.AddArc(PointF(Width - XRadius, YRadius), PointF(XRadius, YRadius),-90, 90);
      pth.LineTo(PointF(Width, Height - YRadius));
      pth.AddArc(PointF(Width - XRadius, Height - YRadius), PointF(XRadius, YRadius),0, 90);
      pth.LineTo(PointF(XRadius, Height));
      pth.AddArc(PointF(XRadius, Height - YRadius), PointF(XRadius, YRadius),90, 90);
      pth.LineTo(PointF(0, YRadius));
      pth.AddArc(PointF(XRadius, YRadius), PointF(XRadius, YRadius),180, 90);
      pth.ClosePath;
      pth.Flatten;
      Canvas.FillPath(pth, AbsoluteOpacity, Fill);
      
      pth.free;
    end;
cllc вне форума Ответить с цитированием
Старый 04.02.2025, 12:48   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от cllc Посмотреть сообщение
Попробуйте сами отрисовать, вместо inherited, аналогично slPointer:
Код:
    slRectangle: 
    begin
      pth := TPathData.Create;
      pth.MoveTo(PointF(XRadius, 0));
      pth.LineTo(PointF(Width - XRadius, 0));
      pth.AddArc(PointF(Width - XRadius, YRadius), PointF(XRadius, YRadius),-90, 90);
      pth.LineTo(PointF(Width, Height - YRadius));
      pth.AddArc(PointF(Width - XRadius, Height - YRadius), PointF(XRadius, YRadius),0, 90);
      pth.LineTo(PointF(XRadius, Height));
      pth.AddArc(PointF(XRadius, Height - YRadius), PointF(XRadius, YRadius),90, 90);
      pth.LineTo(PointF(0, YRadius));
      pth.AddArc(PointF(XRadius, YRadius), PointF(XRadius, YRadius),180, 90);
      pth.ClosePath;
      pth.Flatten;
      Canvas.FillPath(pth, AbsoluteOpacity, Fill);
      
      pth.free;
    end;
Превосходно!
Это работает!
Спасибо тебе большое, ты прямо все верно подсказал и это решило мою проблему!
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.02.2025, 10:31   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от cllc Посмотреть сообщение
Попробуйте сами отрисовать, вместо inherited, аналогично slPointer:
Код:
    slRectangle: 
    begin
      pth := TPathData.Create;
      pth.MoveTo(PointF(XRadius, 0));
      pth.LineTo(PointF(Width - XRadius, 0));
      pth.AddArc(PointF(Width - XRadius, YRadius), PointF(XRadius, YRadius),-90, 90);
      pth.LineTo(PointF(Width, Height - YRadius));
      pth.AddArc(PointF(Width - XRadius, Height - YRadius), PointF(XRadius, YRadius),0, 90);
      pth.LineTo(PointF(XRadius, Height));
      pth.AddArc(PointF(XRadius, Height - YRadius), PointF(XRadius, YRadius),90, 90);
      pth.LineTo(PointF(0, YRadius));
      pth.AddArc(PointF(XRadius, YRadius), PointF(XRadius, YRadius),180, 90);
      pth.ClosePath;
      pth.Flatten;
      Canvas.FillPath(pth, AbsoluteOpacity, Fill);
      
      pth.free;
    end;
Приветствую!
Забыл спросить в предыдущем сообщении.
А в этом же модуле задается радиус закругления углов кнопок?
Хотел чуть больше их закруглить.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.02.2025, 13:59   #5
cllc
 
Регистрация: 17.01.2020
Сообщений: 7
По умолчанию

Свойства XRadius/YRadius за скругление углов отвечают. Задаются в инспекторе объектов, либо в вашем коде, если кнопки динамически создаете.
cllc вне форума Ответить с цитированием
Старый 13.02.2025, 20:46   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Сообщение от cllc Посмотреть сообщение
Свойства XRadius/YRadius за скругление углов отвечают. Задаются в инспекторе объектов, либо в вашем коде, если кнопки динамически создаете.
Я что-то не вижу в инспекторе объектов таких свойств...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решить олимпиадную задачу в паскале: есть багетные рамки и есть картины, определить, для каких картин рамки подходят света9 Паскаль, Turbo Pascal, PascalABC.NET 0 13.10.2014 21:32
Поворот изображения вокруг своей оси во время движения по кругу вокруг центра AsaDorius Помощь студентам 1 15.12.2010 21:57
Помигать прямоугольником вокруг компонента при ошибке. Almaas Помощь студентам 1 15.12.2010 09:38
удаление компонента по его handle dmitriegorovih Общие вопросы Delphi 15 19.07.2010 08:17