Советы по Delphi

         

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


Как во время выполнения программы динамически добавлять и удалять страницы динамически созданного 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;

--Mark Johnson [000800]



Содержание раздела