Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Не понимаю, почему 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
9-1085626647
Kair
2004-05-27 06:57
2005.01.09
GLScene


9-1094180692
MonoLife
2004-09-03 07:04
2005.01.09
Игруху выставил


3-1102522870
Grant
2004-12-08 19:21
2005.01.09
SQL


6-1098117504
L.evil
2004-10-18 20:38
2005.01.09
Indy


1-1103777548
Lelik
2004-12-23 07:52
2005.01.09
Перенапрвление потоков