Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.17;
Скачать: CL | DM;

Вниз

Рисование на 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1258963809
Oleg1963
2009-11-23 11:10
2010.01.17
Выбор каталога.Проблема c ShellTreeView.


2-1258632982
Drowsy
2009-11-19 15:16
2010.01.17
Canvas, Brush.Color,FillRect.


1-1233569939
OlegNik
2009-02-02 13:18
2010.01.17
Работа с общей памятью.


2-1258523471
Tornado
2009-11-18 08:51
2010.01.17
Обработать ошибку пинга


15-1258140062
Германн
2009-11-13 22:21
2010.01.17
Как жить сегодня с тремя устройствами IDE?