![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не понимаю, почему Tabs у PageControl неправильно отрисовываются! [D7, WinXP]
Aleksandr. © (2004-12-20 16:56:00)Ставлю на форму PageControl, создаю у него несколько страниц,
ставлю ему свойство OwnerDraw:=true, назначаю ему на OnDrawTab обработчик:
procedure TPropForm.PageControlDrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
x, y : integer;
Col : TColor;
begin
PageControl.Canvas.FillRect(Rect);
if NOT PageControl.Pages[TabIndex].Enabled then
PageControl.Canvas.Font.Color:=clSilver
else if Active then begin
PageControl.Canvas.Brush.Color:=clWhite;
PageControl.Canvas.Font.Color:=clBlue
end;
x:=Rect.Left+((Rect.Right-Rect.Left-PageControl.Canvas.TextWidth(PageControl.Pages[TabIndex].Caption)) div 2);
y:=Rect.Top+((Rect.Bottom-Rect.Top-PageControl.Canvas.TextHeight('A')) div 2);
Col:=PageControl.Canvas.Pen.Color;
PageControl.Canvas.Pen.Color:=Canvas.Brush.Color;
PageControl.Canvas.RoundRect(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1,3,3);
PageControl.Canvas.Pen.Color:=Col;
PageControl.Canvas.TextOut(x,y,PageControl.Pages[TabIndex].Caption)
Все более/менее в норме, не считая того, что ширины у табов не соответствуют ширине их Caption. Ладно, в FormCreate добавляю калькуляцию TabWidth:
for i:=0 to PageControl.PageCount-1 do
if (PageControl.TabWidth<PageControl.Canvas.TextWidth(PageControl.Pages[i].Caption)+6) then
PageControl.TabWidth:=PageControl.Canvas.TextWidth(PageControl.Pages[i].Caption)+6;
Теперь ширины хоть и одинаковые, но зато все влезает.
А теперь в форме, создающей эту форму, я делаю так:
Application.CreateForm(TPropForm, PropForm);
with PropForm do try
PageControl.Pages[0].TabVisible:=false;
PageControl.Pages[0].Enabled:=false;
PageControl.ActivePageIndex:=1;
if ShowModal=mrOK then begin
И выглядит все полной ерундой - Закладки видны все, в том числе и закладка страницы 0, но отсутствует последняя, ни одна закладка не выделена, при клике на закладку с нулевым индексом (она рисуется серым текстом, как и указывалось) показывается содержимое первой страницы и т.д.
Что это за муть зеленая? Проверил PageIndex'ы у всех страниц - все в порядке, запрещаемая имеет PageIndex=0.
Babay (2004-12-21 06:28:00) [1]Дело в том что в PageControlDrawTab передается параметр TabIndexа это не совсем то что PageIndexв итоге у Вас происходит просто неверная отрисовка.
ИМХО надо сделать так:
procedure TForm1.PageControlDrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
x, y : integer;
Col : TColor;
PageIndx:Integer;
begin
PageIndx:=0;
// находим номер страницы соответствующую данному TabIndex
while PageControl.Pages[PageIndx].TabIndex<>TabIndex do inc(PageIndx);
PageControl.Canvas.FillRect(Rect);
if NOT PageControl.Pages[ PageIndx].Enabled then
PageControl.Canvas.Font.Color:=clSilver
else if Active then begin
PageControl.Canvas.Brush.Color:=clWhite;
PageControl.Canvas.Font.Color:=clBlue
end;
x:=Rect.Left+((Rect.Right-Rect.Left-PageControl.Canvas.TextWidth(PageControl.Pages[ PageIndx].Caption)) div 2);
y:=Rect.Top+((Rect.Bottom-Rect.Top-PageControl.Canvas.TextHeight('A')) div 2);
Col:=PageControl.Canvas.Pen.Color;
PageControl.Canvas.Pen.Color:=Canvas.Brush.Color;
PageControl.Canvas.RoundRect(Rect.Left+1,Rect.Top+1,Rect.Right-1,Rect.Bottom-1,3,3);
PageControl.Canvas.Pen.Color:=Col;
PageControl.Canvas.TextOut(x,y,PageControl.Pages[ PageIndx].Caption)
end;