Форум: "Начинающим";
Текущий архив: 2011.10.02;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c