Главная » C++, C++ Builder » Проверка разрешения на перемещение C++ Builder

0

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

Замечание

На самом деле возможно сделать так, чтобы страница вела себя как недоступная. Это непросто, поэтому мы и не рассматриваем этого подробно. В общем, то, что вам надо сделать, это создать новый «подкласс» (компонент, наследующий от) объекта PageControl и отслеживать сообщение о нажатии кнопки мыши (WM_LBUTTONDOWN) на закладке страниц. Когда вы перехватите это сообщение, определите, на закладке какой именно страницы был произведен щелчок. Если страница не должна быть доступна, не давайте управляющему элементу страничного диалога получить сообщение о нажатии кнопки мыши.

Для обработки случая перехода на страницу, а не с нее, мы обработаем другое событие PageControl. В этом случае мы добавим обработчик для сообщения OnPageChange. Давайте рассмотрим очередной пример, в котором это осуществляется для запрещения перехода на страницу.

Перейдите на вторую страницу диалога, либо изменив свойство ActivePage объекта PageControl в Object Inspector, или же просто щелкнув на закладке второй страницы на форме в окне редактора форм. На отображенную чистую страницу положите две кнопки. Первую озаглавьте «Страница 3 разрешена», а вторую — «Страница 3 запрещена». Если пользователь нажмет на первую кнопку, ему будет разрешено перейти на третью страницу. Нажатие на вторую кнопку запретит пользователю переход на третью страницу. Все просто и ясно. На рис. 4.13 показана обновленная вторая страница нашего PageControl.

Рис. 4.13. Вторая страница страничного диалога

Добавьте обработчик для первой кнопки (Страница 3 разрешена), а в него добавьте следующий код:

void __fastcall TPageDlg::Button1Click(TObject *Sender)

{

FbAllowPageThree = true;

}

Так же добавьте обработчик и для второй кнопки со следующим кодом:

void __fastcall TPageDlg::Button2Click(TObject *Sender)

{

FbAllowPageThree = false;

}

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

__fastcall TPagesDlg::TPagesDlg(TComponent*  AOwner)

:TForm(AOwner)

{

FnCurTab = 0; FbAllowPageThree = true;

}

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

По теме:

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