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

Создание динамических вкладок в Delphi: расширяем возможности интерфейса

Delphi , Синтаксис , Типы и Переменные

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

Создание наследника класса TTabSheet

Для начала рассмотрим пример создания наследника класса TTabSheet. Это позволит добавлять одинаковые компоненты на каждую вкладку, не заботясь о их копировании вручную.

TCustomTabSheet = class(TTabSheet)
public
  constructor Create(AOwner: TComponent); override;
public
  FTestButton: TButton;
end;

constructor TCustomTabSheet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTestButton := TButton.Create(Self);
  FTestButton.Parent := Self;
  FTestButton.Left := 1;
  FTestButton.Top := 1;
  FTestButton.Width := 20;
  FTestButton.Height := 10;
  FTestButton.Caption := 'Крутая кнопка!';
  FTestButton.Name := 'TestButton';
end;

В этом примере создается кнопка FTestButton внутри конструктора TCustomTabSheet, которая будет доступна на всех вкладках, созданных с помощью этого класса.

Использование фрейма с компонентами

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

Добавление вкладки в TPageControl

Необходимо помнить, что созданный наследник TCustomTabSheet нужно добавить в TPageControl, что не очевидно из примера с созданием класса. Обычно это делается в дизайнере, но для динамического создания вкладок потребуется выполнить это программно.

function TMyForm.AddTSMemo(ntbk: TPageControl; Caption: string): TTabSheet;
var
  mmo: TMemo;
begin
  Result := TTabSheet.Create(Self);
  Result.PageControl := ntbk;
  Result.Caption := Caption;
  mmo := TMemo.Create(Self);
  mmo.Parent := Result;
  mmo.Font.Name := 'Courier New';
  mmo.Font.Size := 10;
  mmo.Align := alClient;
  mmo.ScrollBars := ssBoth;
  mmo.WordWrap := True;
  // Сохраняем указатель на memo в свойство Tag вкладки
  Result.Tag := Integer(mmo);
end;

Вызов функции для добавления вкладки:

var
  ts: TTabSheet;
begin
  ts := AddTSMemo(myPageControl, ExtractFileName(text_file_nm));
end;

Для доступа к компоненту TMemo, созданному на вкладке, можно использовать свойство Tag:

TMemo(ts.Tag).Lines.LoadFromFile(text_file_nm);

Таким образом, создается новая вкладка с TMemo и загружается содержимое файла. Нет необходимости в создании наследника класса, можно добавлять любые компоненты после присвоения названия вкладке.

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

Эти подходы позволяют создавать динамические вкладки с одинаковыми компонентами, что может быть полезно в различных сценариях разработки пользовательского интерфейса в Delphi.

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

Создание и управление вкладками в интерфейсе пользователя в среде разработки Delphi для добавления одинаковых компонентов на каждую вкладку.


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

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




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


:: Главная :: Типы и Переменные ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:35:34/0.0032510757446289/0