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

Notebook - добавление и удаление страниц

Delphi , Компоненты и Классы , Вкладки и Страницы

Notebook - добавление и удаление страниц

Автор: Mark Johnson

Как во время выполнения программы динамически добавлять и удалять страницы динамически созданного NoteBook?


procedure AddPage(nbk: TNotebook; tabset: TTabSet; const pagename: string);
{ Добавляем новую страницу к NoteBook и новую закладку к tabset
(параметр pagename задает имя страницы), размещаем на странице
компонент Memo и выводим новую страницу на передний план.
Подразумевается, что TabSet (набор закладок) имеет ровно по
одной закладке на каждую страницу NoteBook с точным сохранением порядка. }

var
  memo: TMemo;
  page: TPage;
begin
  if nbk <> nil then
  begin
    nbk.Pages.Add(pagename); {добавляем страницу в TNotebook}
    nbk.PageIndex := nbk.Pages.Count - 1; {делаем новую страницу текущей}
    if tabset <> nil then
    begin
      tabset.Tabs.Add(pagename); {добавляем соответствующую закладку}
      tabset.TabIndex := nbk.PageIndex; {делаем новую закладку текущей}
    end;
    if nbk.PageIndex > -1 then
    begin {убедимся что страница существует}
      page := TPage(nbk.Pages.Objects[nbk.PageIndex]); {получаем объект страницы}
      }
        memo := TMemo.Create(page);
          {создаем TMemo (и страницей в качестве родителя)}
      try
        memo.Parent := page; {устанавливаем страницу в качестве Parent}
        memo.Align := alClient;
          {устанавливаем выравнивание для заполнения области клиента}
      except
        memo.Free; {освобождаем TMemo, если что-то идет неправильно}
      end;
      page.Visible := true; {показываем страницу}
    end;
  end;
end;

procedure DeletePage(nbk: TNotebook; tabset: TTabSet; index: integer);
{ Удаляем страницу, чей PageIndex = index из nbk и tabset. Подразумевается,
что TabSet имеет ровно по одной закладке на каждую страницу NoteBook с
точным сохранением порядка. }

var
  switchto: integer;
begin
  if nbk <> nil then
  begin
    if (index >= 0) and (index < nbk.Pages.Count) then
    begin
      if index = nbk.PageIndex then
      begin
        if index < nbk.Pages.Count - 1 then
        begin {если страница не последняя в списке}
          switchto := nbk.PageIndex;
            {выводим страницу за текущей, ставшей ею после удаления}
          if (index = 0) and (nbk.Pages.Count > 1) then {если первая страница}
            nbk.PageIndex := 1; {теперь показываем вторую страницу}
        end
        else
          switchto := nbk.PageIndex - 1;
            {в противном случае показываем страницу, расположенную перед текущей}
      end;
      nbk.Pages.Delete(index);
        {освобождаем страницу и все принадлежавшие ей элементы управления}
      if tabset <> nil then
      begin
        if index < tabset.Tabs.Count then
          tabset.Tabs.Delete(index); {удаляем соответствующую закладку}
      end;
      nbk.PageIndex := switchto;
    end;
  end;
end;

Программа на Delphi, которая позволяет динамически добавлять и удалять страницы из компонента заметки (TNotebook). Процедура AddPage создает новую страницу с текстовым полем (memo control) на ней, добавляет ее в заметку и делает видимой. Процедура DeletePage удаляет страницу по указанному индексу из заметки и панели вкладок.

Разбивка функций каждой процедуры:

AddPage

  1. Проверяет, не равно ли заметка nil.
  2. Добавляет новую страницу в заметку с предоставленным именем страницы как ее заголовком.
  3. Устанавливает индекс текущей страницы на последнюю добавленную страницу (делает ее видимой).
  4. Если панель вкладок не nil, добавляет соответствующую вкладку в панель и устанавливает ее индекс на индекс новой страницы.
  5. Создает текстовое поле на новой странице и установливает его родителем на страницу.
  6. Устанавливает выравнивание текстового поля в alClient (что означает, что оно будет заполнять всю клиентскую зону страницы).
  7. Делает страницу видимой.

DeletePage

  1. Проверяет, не равно ли заметка nil.
  2. Если указанный индекс находится в диапазоне валидных индексов страниц, продолжает процесс удаления.
  3. Если текущий индекс страницы совпадает с индексом страницы для удаления, обновляет текущий индекс страницы на предыдущую или следующую страницу (в зависимости от наличия более страниц в списке).
  4. Удаляет страницу по указанному индексе из заметки и панели вкладок.
  5. Устанавливает текущий индекс страницы на обновленный значение.

Некоторые предложения для улучшения кода:

  1. Рассмотрите добавление обработки ошибок для случаев, когда заметка или панель вкладок равны nil, но не пусты.
  2. Вам может понравиться добавить проверку на дубликат имен страниц при вызове AddPage.
  3. Если вы ожидаете, что заметка и панель вкладок будут использоваться интенсивно, рассмотрите реализацию кэширования для улучшения производительности.

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

Добавление и удаление страниц динамически созданного NoteBook: методы AddPage и DeletePage, позволяющие динамически добавлять и удалять страницы с соответствующими закладками.


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

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




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


:: Главная :: Вкладки и Страницы ::


реклама


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

Время компиляции файла: 2024-11-30 11:42:55
2024-12-21 14:48:36/0.0038900375366211/0