Главная » C++, C++ Builder » Блокирование  закладки C++ Builder

0

Теперь, когда все приготовления закончены, пришло время отменить страницу. Как я уже говорил раньше, невозможно запретить этот управляющий элемент обычным способом, поэтому нам придется действовать исподтишка.

Когда выбирается страница в страничном диалоге, она сначала выдает форме, на которой расположен элемент PageControl событие OnTabChanging для поверки того, можно ли уйти с этой страницы. Однако это нам нисколько не помогает, поскольку нас интересует вовсе не активная страница. А интересует нас та страница, на которой пользователь щелкнул мышью, то есть та, на которую он хочет перейти. К сожалению, событие OnTabChanging не сможет поделиться с нами никакой информацией об этой странице (у него ее просто нет). Однако после того, как произошла смена текущей страницы, элемент PageControl посылает форме другое событие. Это событие называется OnTabChange (по изменении страницы). Добавьте новый обработчик для события OnTabChange и озаглавьте его HandlePageChange (обработка смены страницы). Следующий код добавьте в обработчик HandlePageChange:

void –fastcall TPagesDlg::HandlePageChange(TObject *Sender)

{

// Если третья страница становится активной,

// проверяем, разрешена ли она

if ( PageControl1->ActivePage->PageIndex == 2 )

{

if ( FbAllowPageThree == false )

{

switch ( FnCurTab )

{

case 0: // Первая страница

PageControl1->ActivePage = TabCheet1; break;

case 1: // Вторая страница

PageControl1->ActivePage = TabCheet2; break;

}

}

}

// Изменяем заголовок формы, чтобы отобразить

// номер текущей страницы

Caption = "Работаем с: " +

PageControl1->ActivePage->Caption;

}

Когда пользователь выбирает  новую  страницу,  вызывается  обработчик  события HandlePageChange. Свойство ActivePage управляющего элемента  PageControl  будет переустановлено так, что станет указывать на выбранную страницу (предположим, что была выбрана третья страница, — будет указывать на третью). Мы проверяем, действительно ли была выбрана третья страница, при помощи свойства PageIndex, принадлежащего объекту ActivePage. Конечно, мы бы могли просто сравнить, является ли объект ActivePage эквивалентным объекту TabSheet3, но мне просто хотелось показать вам еще один способ определения номера страницы. В конце концов удостоверившись каким угодно способом, что выбрана именно третья страница, мы проверяем, можно ли туда перейти.

Если пользователь до этого нажимал кнопку Страница 3 запрещена, мы должны предотвратить переход на третью страницу. При этом переменная AllowPageThree установлена в false. В этом случае мы выясняем, какая же у нас была страница до этого (мы устанавливали номер последней страницы ранее, в методе OnPageChanging) и делаем эту страницу активной. Обратите внимание на то, что здесь нельзя применить свойство PageIndex для изменения свойства ActivePage. Изменяя

свойство PageIndex, вы просто изменяете порядок следования страниц в массиве страниц внутри объекта PageControl. Вы просто переместите третью страницу на вторую позицию (и, следовательно, вторую страницу на третью позицию). Вместо этого мы просто приравниваем свойство ActivePage к объекту — странице, который мы хотим сделать текущим (TabSheet1 или TabSheet2).

И в завершение мы устанавливаем заголовок формы в строку «Работаем с: », объединенную с заголовком текущей страницы. Это даст пользователю наглядное представление о том, на которой странице он в данный момент работает, даже если вся остальная часть формы не видна. Даже если пользователю пришлось минимизировать форму, заголовок все равно будет Работаем с: страница 2 (если на данный момент текущей является вторая страница), и он все равно будет знать, где находится. Как ни странно, но мне несколько раз приходилось работать над проектами, в которых было необходимо предоставить пользователю подобные  возможности. Что ж, век живи —  век учись.

На этом мы завершаем рассмотрение страничного диалога. Страничный диалог — очень мощный способ собрать воедино однотипную информацию в виде  записной книжки с закладками. Поскольку страничные диалоги находят все более широкое применение и постепенно становятся частью системы Windows 95, очень важно понять принципы работы и возможности, предоставляемые этим компонентом, чтобы использовать его в своих приложениях.  CBuilder делает работу с этим управляющим элементом настолько простой, что было бы непростительно не использовать этот компонент, тем более, что он бывает полезен достаточно часто.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии