![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нормальный 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 если нужно. Вот только "серости" не получится :(