![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование на ListView.Canvas [D7, WinXP]
webpauk © (2009-01-27 14:43:00)
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;
KSergey (2009-01-28 09:02:00) [1]> webpauk © (27.01.09 17:20) [5]
Да я читал, но вроде и свойства фонта дла канвы должны меняться вполне себе корректно. если не путаю, проверять лень.
webpauk (2009-01-27 17:20:00) [2]
> KSergey © (27.01.09 15:23) [4]
> webpauk © (27.01.09 15:11) [1]
KSergey (2009-01-27 15:23:00) [3]Есть 2 предложения:
1) убрать with Sender.Canvas do - возможно, где-то неочевидные накладки, все под ним даже сейчас каша из медотов относящихся к Canvas и не относящихся.
2) может DrawGradientEx() чего-то колбасит с параметрами канвы и надо востановить?
Еще не понятна фраза "независимо от команды Font.Color:=$FFFFFF;"- в смысле не зависимо от таличия или не зависимо от того какое число здесь прописано?
{RASkov} (2009-01-27 15:21:00) [4]Спасибо :)
webpauk (2009-01-27 15:19:00) [5]во:
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;
webpauk (2009-01-27 15:11:00) [6]Ага!
вместо:Font.Color:=$FFFFFF;
нужно:SetTextColor(Handle, $FFFFFF);
а как изменить стиль текста? (Font.Style=[fsBold])