Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нормальный Enable TPageControl


Kolan ©   (2007-02-22 14:14:00) 

Елси у страницы сделать Enable := False; , то её попрежнему можно открыть, но нельзя на ней ничего делать.

Как сделать так(другое свойство?) чтобы пир Enable = False "корешек" страницы становился бы серым и открыть страницу было бы нельзя. Так собственно и поступают другие контролы, например TButton


RASkov   (2007-02-24 02:33:00) [1]

Вот как вариант, не очень аккуратно, но...
В этом примере у PageControlа - табов должно быть более 4х.
 private
   DisablePages: set of Byte;
......
procedure TForm1.FormCreate(Sender: TObject);
begin
 PageControl1.OwnerDraw:=True;
 DisablePages:=[0,3];
end;

procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
begin
 AllowChange:=not(PageControl1.Tag in DisablePages);
end;

procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 PageControl1.Tag:=PageControl1.IndexOfTabAt(X, Y);
end;

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin
 if TabIndex in DisablePages then PageControl1.Canvas.Font.Color:=clGrayText else PageControl1.Canvas.Font.Color:=clBlack;
 PageControl1.Canvas.TextOut(Rect.Left+4,Rect.Top+4, PageControl1.Pages[TabIndex].Caption);
end;

Есть недочет: с клавиатуры можно выбрать "задисабленные" табы.


Германн   (2007-02-24 00:52:00) [2]


> Instead, use the OnChanging event to prevent the user from
> selecting a tab.

Но в то же время пишут:
Use an OnChanging event handler to prevent the user from leaving a tab setting until certain conditions have been met.Т.е. при OnChanging известна закладка из которой уходим, а закладка в которую уходимнеизвестна!
А вот в TTabbedNotebook событие OnChange такое:
type TPageChangeEvent = procedure(Sender: TObject; NewTab: Integer; var AllowChange: Boolean) of object;

Т.е. в этом событии мы знаем и "откуда"-ActivePage и "куда"-NewTab и можем при этом запретить переход.


Kolan   (2007-02-23 23:45:00) [3]

«[5] guav ©   (23.02.07 16:13)
серость нарисовать можно, а некликабельность сложнее, наверное
только обработокй всех способов переключения.»

Да вот в справке да же пишут:
Note:
When using one of the page controls, if you want to restrict a user from switching to a tab, you cannot set TTabSheet.Enabled to false to accomplish that restriction. Instead, use the OnChanging event to prevent the user from selecting a tab.


guav   (2007-02-23 16:13:00) [4]

серость нарисовать можно, а некликабельность сложнее, наверное только обработокй всех способов переключения.


Германн   (2007-02-22 16:37:00) [5]

Меня подвел склероз. В старом добром TTabbedNotebook такое можно было сделать.


Kolan   (2007-02-22 16:17:00) [6]


> Обрабатывай OnChanging и ставь AllowChange:=False если нужно.
>  Вот только "серости" не получится :(

Ну ясно видимо лучьше просто скрывать, так как при Enable = False бывает по закладке шаришься не можешь понять в чем дело, а потом доходит что она отключена.. Так это я, а что бедный пользовать бкдкт делать:(


Германн   (2007-02-22 14:55:00) [7]


> Германн ©   (22.02.07 14:28) [1]

Пардон, обманул. Так не получится :(


Германн   (2007-02-22 14:28:00) [8]

Обрабатывай OnChanging и ставь AllowChange:=False если нужно. Вот только "серости" не получится :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо