Home
Журнал Ильи Любарева
иногда что-то пишу сюда
Recent Entries 

Advertisement

Customize
24th-Aug-2009 02:16 pm - PageControl Enabled False
Долго искал в интернете как сделать, что TabSheet в PageControl был серый и на него нельзя было нажать.

1. Как предотвратить нажатие на "Enabled" TavSheet.
Наиболее часто встречающейся вариант.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=29256:
В событие OnChanging запоминаем активную вкладку.
В событие OnChanging проверяем не Enabled ли вкладка и возвращаемся на активную. Однако в таком случае происходит мерцание.
Ищем другой вариант

Все оказалось достаточно просто on_page_control_mouse_activate : дает возможность узнать где курсор мыши.
А TPageControl позволяет узнать прямоугольничек каждого таба.
Осталось сравнить и запретить allowChange


===
Глобальная переменная bool tab_allow = true;
//---------------------------------------------------------------------------
void __fastcall Tig_prognose_panel::on_page_control_changing(TObject *Sender,
bool &AllowChange)
{
AllowChange = tab_allow;

}
//---------------------------------------------------------------------------
void __fastcall Tig_prognose_panel::on_page_control_mouse_activate(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y, int HitTest,
TMouseActivate &MouseActivate)
{
tab_allow = true;
for (int i = 0;i
[Error: Irreparable invalid markup ('<this->') in entry. Owner must fix manually. Raw contents below.]

Долго искал в интернете как сделать, что TabSheet в PageControl был серый и на него нельзя было нажать.

1. Как предотвратить нажатие на "Enabled" TavSheet.
Наиболее часто встречающейся вариант.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=29256:
В событие OnChanging запоминаем активную вкладку.
В событие OnChanging проверяем не Enabled ли вкладка и возвращаемся на активную. Однако в таком случае происходит мерцание.
Ищем другой вариант

Все оказалось достаточно просто on_page_control_mouse_activate : дает возможность узнать где курсор мыши.
А TPageControl позволяет узнать прямоугольничек каждого таба.
Осталось сравнить и запретить allowChange


===
Глобальная переменная bool tab_allow = true;
//---------------------------------------------------------------------------
void __fastcall Tig_prognose_panel::on_page_control_changing(TObject *Sender,
bool &AllowChange)
{
AllowChange = tab_allow;

}
//---------------------------------------------------------------------------
void __fastcall Tig_prognose_panel::on_page_control_mouse_activate(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y, int HitTest,
TMouseActivate &MouseActivate)
{
tab_allow = true;
for (int i = 0;i<this->f_page_control->PageCount;i++)
{
if (this->f_page_control->Pages[i]->Enabled == false)
{
TRect r = this->f_page_control->TabRect(i);
bool test = ((r.top<y)&&(r.bottom>Y)&&(r.Left<x)&&(r.right>X));
if (test == true) tab_allow = false;
}


}
}

//---------------------------------------------------------------------------

Advertisement

Customize
This page was loaded Nov 30th 2009, 11:03 pm GMT.