Недоступная закладка в компоненте TabbedNotebook

Материал из DRKB

Недоступная закладка в компоненте TabbedNotebook[править | править код]

Есть ли возможность в компоненте Tabbednotebook сделать какую-либо страницу недоступной? То есть не позволять пользователю щелкать на ней и видеть ее содержимое?

Да, такая возможность существует. Самый простой путь - удалить страницу, например так:


with TabbedNotebook do
  Pages.Delete(PageIndex);


и снова включить ее (при необходимости), перегрузив форму.

Блокировка (а не удаление) немного мудренее, поскольку необходима организация цикла в процедуре создания формы, присваивающая имена закладкам компонента TabbedNotebook. Например так:


J := 0;
with TabbedNotebook do
  for I := 0 to ComponentCount - 1 do
    if Components[I].ClassName = 'TTabButton' then
    begin
      Components[I].Name := ValidIdentifier(TTabbedNotebook(
        Components[I].Owner).Pages[J]) + 'Tab';
      Inc(J);
    end;


где ValidIdentifier ValidIdentifier - функция, которая возвращает правильный Pascal-идентификатор, производный от строки 'Tab':


function ValidIdentifier(theString: str63): str63;
{--------------------------------------------------------}
{ Конвертирует строку в правильный Pascal-идентификатор, }
{ удаляя все неправильные символы и добавляя символ '_', }
{ если первый символ - цифра                             }
{--------------------------------------------------------}
var
  I, Len: Integer;
begin
  Len := Length(theString);
  for I := Len downto 1 do
    if not (theString[I] in LettersUnderscoreAndDigits) then
      Delete(theString, I, 1);
  if not (theString[1] in LettersAndUnderscore) then
    theString := '_' + theString;
  ValidIdentifier := theString;
end;


Затем мы можем сделать закладку компонента TabbedNotebook недоступной:


with TabbedNotebook do
begin
  TabIdent := ValidIdentifier(Pages[PageIndex]) + 'Tab';
  TControl(FindComponent(TabIdent)).Enabled := False;
  { Переключаемся на первую доступную страницу: }
  for I := 0 to Pages.Count - 1 do
  begin
    TabIdent := ValidIdentifier(Pages[I]) + 'Tab';
    if TControl(FindComponent(TabIdent)).Enabled then
    begin
      PageIndex := I;
      Exit;
    end;
  end;
end;


следующий код восстанавливает доступность страницы:


with TabbedNotebook do
  for I := 0 to Pages.Count - 1 do
  begin
    TabIdent := ValidIdentifier(Pages[I]) + 'Tab';
    if not TControl(FindComponent(TabIdent)).Enabled then
      TControl(FindComponent(TabIdent)).Enabled := True;
  end;


Source: Взято с http://delphiworld.narod.ru
ID: 01162