[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    procedure AddPage(nbk : TNotebook; tabset : TTabSet; const pagename : string);
    { Adds a new page to nbk and a new tab to tabset with pagename for the text,   }
    { places a memo on the page, and brings the new page to the top.               }
    { Assumes the tabset has exactly one tab for each notebook page in same order. }
    var
      memo : TMemo;
      page : TPage;
    begin
      if nbk <> nil then begin
        nbk.Pages.Add(pagename);                       {add a page to the TNotebook}
        nbk.PageIndex := nbk.Pages.Count - 1;       {make new page the current page}
        if tabset <> nil then begin
          tabset.Tabs.Add(pagename);                            {add a matching tab}
          tabset.TabIndex := nbk.PageIndex;           {make new tab the current tab}
        end;
        if nbk.PageIndex > -1 then begin                   {make sure a page exists}
          page := TPage(nbk.Pages.Objects[nbk.PageIndex]);         {get page object}
          memo := TMemo.Create(page);                  {create memo (owned by page)}
          try
            memo.Parent := page;                                {set page as Parent}
            memo.Align  := alClient;             {set alignment to fill client area}
          except
            memo.Free;                           {free memo if something goes wrong}
          end;
          page.Visible := true;                  {make sure the page gets displayed}
        end;
      end;
    end;

    procedure DeletePage(nbk : TNotebook; tabset : TTabSet; index : integer);
    { Deletes the page whose PageIndex = index from nbk and tabset. }
    { Assumes the tabset has exactly one tab for each notebook page in same order. }
    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  {if page is not last in list}
              switchto := nbk.PageIndex;     {show page behind current after delete}
              if (index = 0) and (nbk.Pages.Count > 1) then          {if first page}
                nbk.PageIndex := 1;                           {show second page now}
            end else
              switchto := nbk.PageIndex - 1;        {else, show page before current}
          end;
          nbk.Pages.Delete(index);          {free's the page & all controls it owns}
          if tabset <> nil then begin
            if index < tabset.Tabs.Count then
              tabset.Tabs.Delete(index);                  {delete corresponding tab}
          end;
          nbk.PageIndex := switchto;
        end;
      end;
    end;

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]