Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TListView и нестандартная прорисовка


Автор: Illusion Dolphin 1.8.2004, 12:09
Пытаюсь разобраться, как в TListView своими средствами прорисовать изображения, но пока плохова-то выходит...
По началу просто написал так:

Код

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
 var sd : TDrawingStyle;
begin
sd:=dsNormal;
if Item.Selected  then sd:=dsSelected;
imagelist1.BlendColor:=0;
imagelist1.Draw(Sender.Canvas,Item.left,Item.top,Item.ImageIndex,sd,itImage);
Sender.Canvas.Font.Size:=8;
Sender.Canvas.Font.Style:=[];
Sender.Canvas.Font.Name:='Arial';
DefaultDraw:=false;
end;


Но сразу получил несколько непонятностей... например, Item.top - это координата итема, но как учитывать то, что у TListView есть скролинг? Если есть и использовать скролинг, то тогда некорректно отображаются элементы (Item.top-то остаётся одинаковым всё время). Как это исправлять? дайте, если можно, простенький пример правильной прорисовки...

Автор: p0s0l 1.8.2004, 13:40
Используй Item.DisplayRect(...)
Добавлено @ 13:46
Пример:
Код
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
 sd : TDrawingStyle;
 r1, r2 : TRect;

begin
 r1 := Item.DisplayRect(drIcon);
 r2 := Item.DisplayRect(drLabel);
 sd:=dsNormal;
 if Item.Selected  then sd:=dsSelected;
 imagelist1.BlendColor:=0;
 imagelist1.Draw(Sender.Canvas,r1.Left,r1.Top,Item.ImageIndex,sd,itImage);
 Sender.Canvas.TextRect(r2, r2.Left, r2.Top, Item.Caption);
 DefaultDraw := false;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)