Как во время выполнения программы динамически добавлять и
удалять страницы динамически созданного NoteBook?
procedure AddPage(nbk: TNotebook; tabset: TTabSet; const pagename: string);
{ Добавляем новую страницу к NoteBook и новую закладку к tabset
(параметр pagename задает имя страницы), размещаем на странице
компонент Memo и выводим новую страницу на передний план.
Подразумевается, что TabSet (набор закладок) имеет ровно по
одной закладке на каждую страницу NoteBook с точным сохранением порядка. }var
memo: TMemo;
page: TPage;
beginif nbk <> nilthenbegin
nbk.Pages.Add(pagename); {добавляем страницу в TNotebook}
nbk.PageIndex := nbk.Pages.Count - 1; {делаем новую страницу текущей}if tabset <> nilthenbegin
tabset.Tabs.Add(pagename); {добавляем соответствующую закладку}
tabset.TabIndex := nbk.PageIndex; {делаем новую закладку текущей}end;
if nbk.PageIndex > -1 thenbegin{убедимся что страница существует}
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;
beginif nbk <> nilthenbeginif (index >= 0) and (index < nbk.Pages.Count) thenbeginif index = nbk.PageIndex thenbeginif index < nbk.Pages.Count - 1 thenbegin{если страница не последняя в списке}
switchto := nbk.PageIndex;
{выводим страницу за текущей, ставшей ею после удаления}if (index = 0) and (nbk.Pages.Count > 1) then{если первая страница}
nbk.PageIndex := 1; {теперь показываем вторую страницу}endelse
switchto := nbk.PageIndex - 1;
{в противном случае показываем страницу, расположенную перед текущей}end;
nbk.Pages.Delete(index);
{освобождаем страницу и все принадлежавшие ей элементы управления}if tabset <> nilthenbeginif index < tabset.Tabs.Count then
tabset.Tabs.Delete(index); {удаляем соответствующую закладку}end;
nbk.PageIndex := switchto;
end;
end;
end;
Программа на Delphi, которая позволяет динамически добавлять и удалять страницы из компонента заметки (TNotebook). Процедура AddPage создает новую страницу с текстовым полем (memo control) на ней, добавляет ее в заметку и делает видимой. Процедура DeletePage удаляет страницу по указанному индексу из заметки и панели вкладок.
Разбивка функций каждой процедуры:
AddPage
Проверяет, не равно ли заметка nil.
Добавляет новую страницу в заметку с предоставленным именем страницы как ее заголовком.
Устанавливает индекс текущей страницы на последнюю добавленную страницу (делает ее видимой).
Если панель вкладок не nil, добавляет соответствующую вкладку в панель и устанавливает ее индекс на индекс новой страницы.
Создает текстовое поле на новой странице и установливает его родителем на страницу.
Устанавливает выравнивание текстового поля в alClient (что означает, что оно будет заполнять всю клиентскую зону страницы).
Делает страницу видимой.
DeletePage
Проверяет, не равно ли заметка nil.
Если указанный индекс находится в диапазоне валидных индексов страниц, продолжает процесс удаления.
Если текущий индекс страницы совпадает с индексом страницы для удаления, обновляет текущий индекс страницы на предыдущую или следующую страницу (в зависимости от наличия более страниц в списке).
Удаляет страницу по указанному индексе из заметки и панели вкладок.
Устанавливает текущий индекс страницы на обновленный значение.
Некоторые предложения для улучшения кода:
Рассмотрите добавление обработки ошибок для случаев, когда заметка или панель вкладок равны nil, но не пусты.
Вам может понравиться добавить проверку на дубликат имен страниц при вызове AddPage.
Если вы ожидаете, что заметка и панель вкладок будут использоваться интенсивно, рассмотрите реализацию кэширования для улучшения производительности.
В целом, код работает как ожидалось, но всегда полезно регулярно обновлять и рефакторить свой код, чтобы обеспечить его эффективность, читаемость и поддержку.
Добавление и удаление страниц динамически созданного NoteBook: методы AddPage и DeletePage, позволяющие динамически добавлять и удалять страницы с соответствующими закладками.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.