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

Вниз

TPageControl не получается сделать OwnerDraw   Найти похожие ветки 

 
@!!ex ©   (2011-06-16 17:41) [0]

Когда контрол рисует все сам - получается все корректно:
http://develop.sol-online.org/deutch_1.png

Стоит мне включить свойство OwnerDraw и назначит обработчик OnDrawTab вида:
var
 r:TRect;
 s:string;
begin
 r:=Rect;
 s:=TPageControl(Control).Pages[TabIndex].Caption;
 Control.Canvas.TextRect(r,s,[tfCenter,tfVerticalCenter]);
end;


И в середину вклинивается текст не относящийся к этому PageControl"у:
http://develop.sol-online.org/deutch_2.png

Что я делаю не так????


 
KilkennyCat ©   (2011-06-16 17:56) [1]

TPageControl(Control).Pages[TabIndex].Caption; куда-нить в мемо выведи и погляди, какие они есть.


 
@!!ex ©   (2011-06-16 18:10) [2]

> [1] KilkennyCat ©   (16.06.11 17:56)
> TPageControl(Control).Pages[TabIndex].Caption; куда-нить
> в мемо выведи и погляди, какие они есть.

Ага. Как раз этим занимался. В консольку вывел.

Вобщем это невидимый TabSheet.
Судя по всему индексы хранятся в соответствии со всеми табами.
А при рендере TabIndex - это индекс только видимого таба.
Как TabIndex перевести из индекса видимых табов в индекс всех табов?


 
KilkennyCat ©   (2011-06-16 18:41) [3]

наверно, просто проверять, видимый пэйдж или нет...


 
@!!ex ©   (2011-06-16 19:08) [4]

да не!
Приходит сообщение на отрисовку с неверным индексом!
Например:
Таб0 Таб1 Таб2 Таб4

Таб3 - не видим.
Когда нужно отрисовывать Таб4, приходит индекс Таб3, при этом rect содержит зону для рисования именно в Таб4.


 
@!!ex ©   (2011-06-16 19:26) [5]

Сделал вот так:
 if TPageControl(Control).Pages[TabIndex].TabVisible then begin
   r:=Rect;
   s:=TPageControl(Control).Pages[TabIndex].Caption;
   Control.Canvas.TextRect(r,s,[tfCenter,tfVerticalCenter]);

   writeln(Control.Name," ",TabIndex," ",s);
 end;

И получил контрол без текста. :(


 
KilkennyCat ©   (2011-06-16 22:40) [6]


> Когда нужно отрисовывать Таб4, приходит индекс Таб3, при
> этом rect содержит зону для рисования именно в Таб4.

странно. все проверил? как в генофонде реализовано глядел? Я б глянул, да ща в командировке, нет делфей.


 
icWasya ©   (2011-06-17 09:40) [7]

Windows - PageControl неумеет делать невидимые табы.
А в генофонде для этого сделан трюк - когда делаете tabvisible:=false, то соответствующий tabsheet исключается из Windows-PageControl.
Может быть из за этого и происходят упомянутые глюки.


 
@!!ex ©   (2011-06-17 10:37) [8]

В генофонде есть вот такая функция:
function TPageControl.PageIndexFromTabIndex(TabIndex: Integer): Integer;
var
 I: Integer;
begin
 // Tabs doesn"t contain hidden TabSheets so the index
 // needs to be adjusted to account for any hidden pages.
 Result := TabIndex;
 for I := 0 to TabIndex do
   if not Pages[I].TabVisible then
     Inc(Result);
end;

Она protected, сделал такую же в своем коде и соответственно получил то что нужно.



Страницы: 1 вся ветка

Текущий архив: 2011.10.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1307392194
Юрий
2011-06-07 00:29
2011.10.02
С днем рождения ! 7 июня 2011 вторник


2-1307642941
Gu
2011-06-09 22:09
2011.10.02
Передача имени процедуры в Dll и вызов ее там


2-1308121329
mefodiy
2011-06-15 11:02
2011.10.02
Разница между TIdAttachment и TIdAttachmentFile


2-1306446288
Германн
2011-05-27 01:44
2011.10.02
Самописный частичный аналог TButtonGroup


15-1307548488
Rouse_
2011-06-08 19:54
2011.10.02
Может и боян, но все-же хочется поделиться ссылочкой :)