Для создания вкладок в стиле IDE Delphi в FireMonkey без использования TTabControl, можно воспользоваться кастомизированным стилем. Это позволит добавить заполненный круг (filled circle) к стилю, что облегчит задачу.
Шаг 1: Создание пользовательского стиля для вкладки
Сначала необходимо создать новый стиль для TTabItem, который будет содержать визуальные элементы для закрытия вкладки и индикатора изменений. В этом стиле можно определить кнопку, которая отображает заполненный круг или крестик в зависимости от активности вкладки.
Шаг 2: Обработка событий изменения содержимого вкладки
Добавьте логику обработки события изменения содержимого вкладки. Это событие должно устанавливать состояние индикатора изменений (заполненный круг) для активной или неактивной вкладки.
Шаг 3: Обработчик закрытия вкладки
Создайте процедуру CloseTab, которая будет обрабатывать нажатие кнопки закрытия вкладки. В этой процедуре необходимо удалить ссылку на форму, связанную с вкладкой, и обновить индекс активной вкладки.
Пример кода для добавления нового таба:
procedure TMain.btnParametresClick(Sender: TObject);
var F : TFormParam;
ATabItem : TTabItem;
begin
// Если вкладка уже существует, активируем её.
if Liste.ContainsKey('Parametres')
then begin
TabControl1.ActiveTab:=IndexTab('Paramètres');
end
else begin
// Создаём новую форму и добавляем вкладку в таб-контрол.
F:=TFormParam.Create(Self);
ATabItem:=TabControl1.Add();
Liste.Add('Parametres',F);
ATabItem.Text:='Paramètres';
ATabItem.StyleLookup:='CloseTabItem'; // Указываем стиль для новой вкладки
TButton(ATabItem.FindStyleResource('btnCloseTab')).OnClick:=CloseTab; // Обработчик закрытия
TButton(ATabItem.FindStyleResource('btnCloseTab')).TagObject:=ATabItem;
TButton(ATabItem.FindStyleResource('btnCloseTab')).TagString:='Parametres';
ATabItem.AddObject(F.MainLayout);
TabControl1.TabIndex:=TabControl1.TabCount-1; // Делаем новую вкладку активной
end;
// Прячем главный вью, если это необходимо для вашего интерфейса.
Multiview1.HideMaster;
end;
Пример кода обработчика закрытия вкладки:
procedure TMain.CloseTab(Sender: TObject);
var F : TForm;
begin
// Проверяем, можно ли закрыть форму и переходим на предыдущую вкладку.
if not Datas.PeutFermer then Exit;
if TabControl1.TabIndex = TabControl1.TabCount - 1 then
TabControl1.Previous else TabControl1.Next;
// Находим связанную с вкладкой форму и закрываем её.
if Liste.TryGetValue(TButton(Sender).TagString, F) then
F.Close;
TTask.Run(
procedure
begin
TThread.Synchronize(nil,
procedure
begin
TButton(Sender).TagObject.DisposeOf;
if TabControl1.TabIndex > TabControl1.TabCount - 1
then TabControl1.TabIndex := TabControl1.TabCount - 1; // Корректируем индекс активной вкладки, если он вышел за пределы
end);
end);
// Удаляем ссылку на закрытую вкладку из списка.
Liste.Remove(TButton(Sender).TagString);
end;
Шаг 4: Обработка отображения индикатора изменений
Чтобы показать "заполненный круг" при изменении содержимого таба, можно использовать простой визуальный элемент (например, TFMXImage), который будет переключаться в зависимости от логического флага изменения. Этот флаг должен обновляться каждый раз, когда происходит изменение данных вкладки.
Заключение
Создание кастомизированных табов с возможностью отображения состояния активности и изменений содержимого требует внимательного подхода к стилизации и обработке событий. Используя приведённые примеры, можно создать функциональные вкладки в стиле IDE Delphi для приложений FireMonkey.
Этот ответ предлагает начать разработку с создания пользовательского стиля, который позволит добавить необходимые индикаторы состояния на вкладках и обработать логику их взаимодействия. Это решение не является использованием стандартного TTabControl, но требует более глубокого понимания работы с кастомизированными стилями в FireMonkey.
Обратите внимание, что приведённый код является лишь примером и может потребовать дополнительной адаптации под конкретные нужды вашего приложения.
В данном описании рассматривается процесс создания кастомизированных вкладок в стиле IDE Delphi для приложений FireMonkey с использованием пользовательского стиля и обработки событий, включая отображение индикатора изменений в виде заполненного
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.