Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
1-1103487729
redlord
2004-12-19 23:22
2005.01.09
tstringgrid смена ячейки для ввода


1-1103564105
Roo
2004-12-20 20:35
2005.01.09
Косяк с высотой Edit-ов


14-1103618002
Чеширский_Кот
2004-12-21 11:33
2005.01.09
Опрос: За что я уважаю Borland?


8-1096738826
miek
2004-10-02 21:40
2005.01.09
GLScene: изменение материалов


1-1103650760
denik
2004-12-21 20:39
2005.01.09
Окаймление для Edit.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский