Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как рисовать картинки из PageControl.Images по событию OnDrawTab? [D5, Win2k]


Andrey007 ©   (2002-04-25 13:30:00) 

procedure TForm1.PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer;
const Rect: TRect; Active: Boolean);
var lpRect: TRect;
begin
lpRect:=Rect;
Control.Canvas.FillRect(Rect);
DrawText(Control.Canvas.Handle,PChar(TPageControl(Control).Pages[TabIndex].Caption),
-1,lpRect,DT_CENTER or DT_VCENTER or DT_SINGLELINE);
А как рисовать картинки?
end;


Andrey007   (2002-04-25 18:05:00) [1]

Я её просто пропустил при копировании lpRect:=Rect;


Song   (2002-04-25 16:44:00) [2]

Не вижу инициализацию/пересчёт параметра lpRect


Andrey007   (2002-04-25 16:40:00) [3]

Проблему наезда текста на картинку я решил так:

Control.Canvas.FillRect(Rect);
if TPageControl(Control).Pages[TabIndex].ImageIndex>-1 then
begin
BitMap:=TBitMap.Create;
try
BitMap.Canvas.Brush.Color:=Control.Canvas.Brush.Color;
TPageControl(Control).Images.GetBitMap(TPageControl(Control).Pages[TabIndex].ImageIndex,BitMap);
if TPageControl(Control).ActivePageIndex=TabIndex then
Control.Canvas.Draw(Rect.Left+8,Rect.Top+2,BitMap)
else Control.Canvas.Draw(Rect.Left+4,Rect.Top+2,BitMap)
finally
BitMap.Free
end;
if TPageControl(Control).ActivePageIndex=TabIndex then
Control.Canvas.TextOut(Rect.Left+30,Rect.Top+4,TPageControl(Control).Pages[TabIndex].Caption)
else Control.Canvas.TextOut(Rect.Left+26,Rect.Top+4,TPageControl(Control).Pages[TabIndex].Caption)
end
else DrawText(Control.Canvas.Handle,PChar(TPageControl(Control).Pages[TabIndex].Caption),
-1,lpRect,DT_CENTER or DT_VCENTER or DT_SINGLELINE);


Andrey007   (2002-04-25 14:39:00) [4]

Спасибо.


Song   (2002-04-25 14:18:00) [5]

Чтобы текст не наползал на картинку нужно:
если испоьзовать DrawText, нужно модифицировать lpRect (состовляющую lpRect.Left)
либо выводить текст через TextOut:
Control.Canvas.TextOut(Rect.Left+20,Rect.Top+2,TPageControl(Control).Pages[TabIndex].Caption);


Andrey007   (2002-04-25 14:13:00) [6]

Я приношу Вам свои извинения за то, что у меня так неуклюже получилось Вас отблагодарить.
Насчёт TabIndex"а это было просто замечание.
А PageControl вместо PageControl1 я написал просто потому что у меня в программе он так называется. Ещё раз извиняюсь.


Song   (2002-04-25 14:06:00) [7]

Какой Вы умный, только почему-то сами ничего сделать не можете.

Во-первых, что такое PageControl? Я так думаю, что PageControl1
Во-вторых, TabIndex я привёл потому, что хотел уточнить, что первый параметр в GetBitMap - Integer, если Вы скажете, что мой вариант - не рабочий, можете пойти на улицу, поискать камень
В-третьих, если хотите помощи, не нужно делать такой тон.


Andrey007   (2002-04-25 13:59:00) [8]

Во-первых, спасибо.
Во-вторых после try надо писать иначе: PageControl.Images.GetBitMap(TPageControl(Control).Pages[TabIndex].ImageIndex,BitMap);
и проверку if TPageControl(Control).Pages[TabIndex].ImageIndex>-1 then ...
В-третьих, появляется проблема выравнивания текста так, чтобы он не наползал на картинку.


Song   (2002-04-25 13:49:00) [9]

procedure TForm1.PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
var lpRect: TRect;
BitMap:TBitMap;
begin
With Control.Canvas Do
Begin
FillRect(Rect);
BitMap:=TBitMap.Create;
try
PageControl1.Images.GetBitMap(TabIndex,BitMap);
Draw(Rect.Left+2,Rect.Top+2,BitMap);
finally
BitMap.Free;
end;
End;
end;

То же самое делается в TPageControl автоматически


Andrey007   (2002-04-25 13:40:00) [10]

А в скобках что? Что за Graphic: TGraphic туда надо засовывать?


Song   (2002-04-25 13:35:00) [11]

Control.Canvas.Draw(..);


Наверх

Титульная страница Поиск, карта сайта Написать письмо