Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизНе понимаю, почему Tabs у PageControl неправильно отрисовываются! Найти похожие ветки
← →
Aleksandr. (2004-12-20 16:56) [0]Ставлю на форму 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) [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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c