Форум: "Основная";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
ВнизРисование на ListView.Canvas Найти похожие ветки
← →
webpauk © (2009-01-27 14:43) [0]
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect: TRect;
fI: Integer;
begin
with Sender.Canvas do
begin
if Item.Selected then
begin
Rect:=Item.DisplayRect(drBounds);
DrawGradientEx(Sender.Canvas, Rect, False, [$D6945D, $D6945D, $AD5619, $AD5619]);
Rect:=Item.DisplayRect(drLabel);
SetBkMode(Handle, TRANSPARENT);
Font.Color:=$FFFFFF;
TextOut(rect.Left+2, rect.Top, Item.Caption);
...
end;
end
else ...
end;ListView.ViewStyle:=vsReport;
рисую на ListView градиент.
возникла проблема: если закоментить SetBkMode(Handle, TRANSPARENT);, то шрифт рисуется белым, иначе - черным, независимо от команды Font.Color:=$FFFFFF;
← →
webpauk © (2009-01-27 15:11) [1]Ага!
вместо:Font.Color:=$FFFFFF;
нужно:SetTextColor(Handle, $FFFFFF);
а как изменить стиль текста? (Font.Style=[fsBold])
← →
webpauk © (2009-01-27 15:19) [2]во:
procedure TFormPropertiesMain.ListViewObjects1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect: TRect;
fI: Integer;
fFont: tagLOGFONT;
NewFont, OldFont: HFONT;
begin
with Sender.Canvas do
begin
if Item.Selected then
begin
Rect:=Item.DisplayRect(drBounds);
DrawGradientEx(Sender.Canvas, Rect, False, [$D6945D, $D6945D, $AD5619, $AD5619]);
GETOBJECT(Sender.Canvas.Font.Handle, sizeof(fFont), @fFont);
fFont.lfWeight:=700;
NewFont:=CreateFontIndirect(fFont);
OldFont:=SelectObject(Handle, NewFont);
Rect:=Item.DisplayRect(drLabel);
SetBkMode(Handle, TRANSPARENT);
SetTextColor(Handle, $79431B);
TextOut(rect.Right-5-TextWidth(Item.Caption), rect.Top+1, Item.Caption);
SetTextColor(Handle, $FFFFFF);
TextOut(rect.Right-5-TextWidth(Item.Caption), rect.Top, Item.Caption);
Rect:=Item.DisplayRect(drBounds);
for fi := 0 to Item.SubItems.Count - 1 do
begin
Rect.Left:=Rect.Left+TListView(Sender).Columns[fi].Width;
Rect.Right:=Rect.Left+TListView(Sender).Columns[fi+1].Width;
SetTextColor(Handle, $79431B);
TextOut(rect.Left+2, rect.Top+1, Item.SubItems[fi]);
SetTextColor(Handle, $FFFFFF);
TextOut(rect.Left+2, rect.Top, Item.SubItems[fi]);
end;
NewFont:=SelectObject(Handle, OldFont);
DeleteObject(NewFont);
end
else
begin
Rect:=Item.DisplayRect(drBounds);
Brush.Color:=TListView(Sender).Color;
FillRect(Rect);
SetBkMode(Handle, TRANSPARENT);
Rect:=Item.DisplayRect(drLabel);
TextOut(rect.Right-5-TextWidth(Item.Caption), rect.Top, Item.Caption);
Rect:=Item.DisplayRect(drBounds);
for fi := 0 to Item.SubItems.Count - 1 do
begin
Rect.Left:=rect.Left+TListView(Sender).Columns[fi].Width;
Rect.Right:=rect.Left+TListView(Sender).Columns[fi+1].Width;
TextRect(rect,rect.Left+2,rect.Top,Item.SubItems[fi]);
end;
end;
end;
DefaultDraw:=False;
end;
← →
{RASkov} © (2009-01-27 15:21) [3]Спасибо :)
← →
KSergey © (2009-01-27 15:23) [4]Есть 2 предложения:
1) убрать with Sender.Canvas do - возможно, где-то неочевидные накладки, все под ним даже сейчас каша из медотов относящихся к Canvas и не относящихся.
2) может DrawGradientEx() чего-то колбасит с параметрами канвы и надо востановить?
Еще не понятна фраза "независимо от команды Font.Color:=$FFFFFF;" - в смысле не зависимо от таличия или не зависимо от того какое число здесь прописано?
← →
webpauk © (2009-01-27 17:20) [5]
> KSergey © (27.01.09 15:23) [4]
> webpauk © (27.01.09 15:11) [1]
← →
KSergey © (2009-01-28 09:02) [6]> webpauk © (27.01.09 17:20) [5]
Да я читал, но вроде и свойства фонта дла канвы должны меняться вполне себе корректно. если не путаю, проверять лень.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c