Добавление и удаление страниц Notebook
Материал из DRKB
Добавление и удаление страниц Notebook[править | править код]
Как во время выполнения программы динамически добавлять и удалять страницы динамически созданного NoteBook?
{ Добавляем новую страницу к NoteBook и новую закладку к tabset
(параметр pagename задает имя страницы), размещаем на странице
компонент Memo и выводим новую страницу на передний план.
Подразумевается, что TabSet (набор закладок) имеет ровно по
одной закладке на каждую страницу NoteBook с точным сохранением порядка. }
procedure AddPage(nbk: TNotebook; Tabset: TTabSet; const PageName: string);
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]); { получаем объект страницы }
{ создаем TMemo (и страницей в качестве родителя) }
Memo := TMemo.Create(Page);
try
{ устанавливаем страницу в качестве Parent }
Memo.Parent := Page;
{ устанавливаем выравнивание для заполнения области клиента }
Memo.Align := alClient;
except
Memo.Free; { освобождаем TMemo, если что-то идет неправильно }
end;
Page.Visible := True; { показываем страницу }
end;
end;
end;
{ Удаляем страницу, чей PageIndex = index из nbk и tabset. Подразумевается,
что TabSet имеет ровно по одной закладке на каждую страницу NoteBook с
точным сохранением порядка. }
procedure DeletePage(nbk: TNotebook; Tabset: TTabSet; Index: integer);
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;
ID: 01188
procedure TForm1.Button1Click(Sender: TObject);
var
NewPage: TWinControl;
begin
TabbedNotebook1.Pages.Add(Edit1.Text);
NewPage := TabbedNotebook1.Pages.Objects[TabbedNotebook1.Pages.Count - 1]
as TWinControl;
with TLabel.Create(Self) do
begin
Left := 20;
Top := 20;
Caption := '&Телефон: ';
Parent := NewPage;
end;
with TEdit.Create(Self) do
begin
Left := 100;
Top := 20;
Text := '1-800-555-1212';
Parent := NewPage;
end;
end;
Source: http://delphiworld.narod.ru/
ID: 01189