Создание панели вкладок с кнопкой закрытия в Delphi XE3 FireMonkey 2
Приветствую! В данной статье мы рассмотрим, как создать панель вкладок в стиле браузера для FireMonkey FM2, которая будет включать кнопку закрытия для каждой вкладки. Это будет полезно для разработчиков, которые работают с Delphi и предпочитают создавать свои собственные компоненты, избегая использования сторонних библиотек.
Контекст вопроса:
Разработчик столкнулся с проблемой создания панели вкладок с кнопкой закрытия в FireMonkey FM2. Поскольку в FM2 нет компонентов TTabsheet и TPageControl, как в VCL, использовать ответы из старых вопросов не представляется возможным. Предложенный код из VCL несовместим с FM2, и разработчик не хочет использовать сторонние компоненты, опасаясь их несовместимости с будущими версиями Delphi.
Решение проблемы:
Для создания панели вкладок с кнопкой закрытия в FireMonkey FM2, можно использовать компонент TTabControl, который доступен в "Common Controls". Важно заменить TPageControl и TTabsheet на TTabControl и TTabItem соответственно, а также заменить TRect на TRectF, так как в FMX используются типы с плавающей точкой.
Подтвержденный ответ:
Ниже приведен пример кода на Object Pascal (Delphi), который реализует функционал панели вкладок с кнопками закрытия для каждой вкладки. Код предназначен для работы в среде FireMonkey FM2 и не использует сторонние компоненты.
unit Unit1;
interface
uses
System.SysUtils,
FMX.Controls,
FMX.Forms,
FMX.Layouts;
// Остальная часть интерфейса...
type
TFormMain = class(TForm)
// Компоненты формы...
procedure FormCreate(Sender: TObject);
procedure TabControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Float);
// Другие процедуры...
private
FCloseButtonsRectF: array of TRectF;
FCloseButtonMouseDownIndex: Integer;
// Другие приватные поля...
public
end;
var
FormMain: TFormMain;
// Реализация...
procedure TFormMain.FormCreate(Sender: TObject);
var
I: Integer;
begin
// Инициализация компонента TTabControl...
SetLength(FCloseButtonsRectF, TabControl.Items.Count);
FCloseButtonMouseDownIndex := -1;
// Инициализация массива для хранения координат кнопок закрытия...
end;
procedure TFormMain.TabControlDrawItem(Sender: TObject; const Item: TTabItem; var DefaultDraw: Boolean);
var
CloseBtnSize: Single;
TabCaption: TPointF;
CloseBtnRectF: TRectF;
CloseBtnDrawDetails: TThemedElementDetails;
begin
// Отрисовка вкладки с кнопкой закрытия...
// Здесь должен быть код для отрисовки кнопки закрытия, аналогичный VCL, но с использованием TRectF и других FMX-типов.
end;
procedure TFormMain.TabControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Float);
var
I: Integer;
begin
// Обработка нажатия на кнопку закрытия...
// Здесь должен быть код для определения нажатия на кнопку закрытия и соответствующего действия.
end;
// Остальная часть реализации...
Альтернативный ответ:
Если разработчик не хочет вдаваться в детали реализации с нуля, он может воспользоваться открытым компонентом, расширяющим базовый FMX TTabControl, доступным на GitHub по ссылке: neTabControl. Этот компонент предоставляет исходный код, который можно изучить и адаптировать под свои нужды.
Заключение:
В данной статье мы рассмотрели, как создать панель вкладок с кнопкой закрытия для каждой вкладки в Delphi XE3 FireMonkey 2, не прибегая к использованию сторонних компонентов. Представленный код является лишь примером и требует дальнейшей доработки и адаптации под конкретные требования проекта.
Разработчик в Delphi XE3 хочет создать панель вкладок с функцией закрытия вкладок в FireMonkey 2, используя стандартные компоненты без сторонних библиотек.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS