Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как притормозить переключение вкладок? 
:(
    Опции темы
=Женек=
Дата 1.9.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: 1
Всего: 1



Господа, есть у меня на форме вкалдки PageControl

Есть два события - OnChange и OnChanging. Я наивно думал, что разница между ними - первое событие генерируется после переключения, второе во время переключения, то есть сначала обработичик делает свое дело, затем переходит на новую вкладку.
У меня задача следующая - защитить одну из вкладок паролем.
Код

void __fastcall TForm1::MainPageControlChanging(TObject *Sender, int FromPage, int ToPage,
          bool &AllowChange)
{
if (MainPageControl->ActivePageIndex==0) {  //собственно, защищены паролем 1 и 2 вкладки, пароль проверяется тогда, когда с нулевой вкладки переключаемся на 1 или 2
}

PasswordEditForm->Show();
}




Как сделать, чтобы до проверки пароля программа не переключала вкладку?
PM MAIL   Вверх
Kasiro
Дата 1.9.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 11.7.2010

Репутация: нет
Всего: -1



Я в свое время делал вот так:

Код

void __fastcall TFullOrderForm::bsSkinPageControl1Change(TObject *Sender)
{
bsSkinPanel1->Visible=false;
if (bsSkinPageControl1->ActivePageIndex==3) {
if (ChangePage()==mrOk){
bsSkinPanel1->Visible=true;
return;
}
bsSkinPageControl1->ActivePageIndex=0;
bsSkinPanel1->Visible=false;
}
}


ChangePage() - функция вызывающая модальное окно с вводом пароля

то есть основная идея в том чтобы поместить весь контент этой вкладки на панель, и прятать панель при переходе, потом проверять правильно ли ввели пасс, если верно то показываем, если нет то перекидываем на другую вкладку
PM MAIL   Вверх
volvo877
Дата 4.9.2012, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 13
Всего: 116



Цитата(=Женек= @  1.9.2012,  12:47 Найти цитируемый пост)
Как сделать, чтобы до проверки пароля программа не переключала вкладку? 

Код

void __fastcall TForm1::PageControl1Changing(TObject *Sender, bool &AllowChange)
{
    if(static_cast<TPageControl*>(Sender)->ActivePageIndex == 0)
    {
        TForm2* passForm = new TForm2(this);
        AllowChange = (passForm->ShowModal() == mrOk);
        delete passForm;
    }
}

PM MAIL   Вверх
3315720
Дата 20.9.2012, 12:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Попробуй так:
Код

void __fastcall TForm1::PageControl1Changing(TObject *Sender,
      bool &AllowChange)
{
    if (((TPageControl *)Sender)->ActivePage == TabSheet1)
        AllowChange = (!Edit1->Text.IsEmpty());
    else
        AllowChange = true;
    if (AllowChange == false)
    {
        MessageBeep(0);
        Edit1->SetFocus();
    }
}

PM MAIL   Вверх
borisbn
Дата 20.9.2012, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



По-хорошему, то, что пароль уже был введён, нужно запоминать и не спрашивать каждый раз при переключении. Лично меня бы такое поведение программы (запрос пароля при каждом переключении) просто взбесило бы.

Это сообщение отредактировал(а) borisbn - 20.9.2012, 13:48


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1131 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.