Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
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 World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay