Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1259332789
Неважно
2009-11-27 17:39
2010.01.17
кол-во подстрок в строке


1-1233135151
nes
2009-01-28 12:32
2010.01.17
TPopupMenu - подменю с левой стороны


15-1257802926
DVM
2009-11-10 00:42
2010.01.17
Забавный ролик с Гейтсом и Балмером


3-1233431699
123
2009-01-31 22:54
2010.01.17
ПОИСК


2-1258963629
Knight
2009-11-23 11:07
2010.01.17
Как правильно сделать запрос-ответ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский