Советы по Delphi

         

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


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

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

with TabbedNotebook doPages.Delete(PageIndex);

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

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



J := 0;with TabbedNotebook dofor I := 0 to ComponentCount - 1 doif Components[I].ClassName = 'TTabButton' thenbeginComponents[I].Name := ValidIdentifier(TTabbedNotebook(Components[I].Owner).Pages[J]) + 'Tab';Inc(J);end;

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

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

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

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

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

with TabbedNotebook dofor I := 0 to Pages.Count - 1 dobeginTabIdent := ValidIdentifier(Pages[I]) + 'Tab';if not TControl(FindComponent(TabIdent)).Enabled thenTControl(FindComponent(TabIdent)).Enabled := True;end; {for}
[000052]



Содержание раздела