Идёт загрузка страницы...

htp://aptem.net.ru





Delphi 1

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]