Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Раскраска строк в listview   Найти похожие ветки 

 
denis24   (2004-09-09 10:09) [0]

Как сделать правильно сабж?Стиль Report.

ondrawitem......
if TListView(sender).Column[3].Caption ="" then
Font.Color := clred;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top,TListView(sender)........... );


 
Black ©   (2004-09-09 11:33) [1]

Это взято из FAQ"a Kuliba
Если разберёшся то поможет

У меня есть два примера процедур OnDrawItem:

--------------------------------------------------------------------------------

procedure TTest.ListBox1DrawItem(Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin

With ( Control As TListBox ).Canvas Do
Begin
Case Index Of
0:
Begin
Font.Color  := clBlue;
Brush.Color := clYellow;
End;
1:
Begin
Font.Color  := clRed;
Brush.Color := clLime;
End;
2:
Begin
Font.Color  := clGreen;
Brush.Color := clFuchsia;
End;
End;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, ( Control As TListBox ).Items[Index]);
End;
end;  

Вышеприведенный код устанавливает различный цвет у фона и текста в зависимости от номера строки, но он не работает с выделенными/выбранными строками (кстати, не забудьте установить значение свойства ListBox1.Style равным lbOwnerDrawFixed.)

--------------------------------------------------------------------------------
procedure TListTest.ListBox1DrawItem( Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState );

Const

HighLight = "LINE";

Var

TempLine, TempText, TempHigh: String;
TempLeft, TempTop, TempStart: Integer;
OldColor: TColor;

begin

with ( Control as TListBox ).Canvas do
begin
FillRect( Rect );
TempLeft := Rect.Left + 3;
TempTop := Rect.Top + 1;
TempLine := ( Control as TListBox ).Items[ Index ];

While TempLine > "" Do
Begin
TempStart := Pos( HighLight, AnsiUpperCase( TempLine ) );

If TempStart > 0 Then
Begin
TempText := Copy( TempLine, 1, TempStart - 1 );
TempHigh := Copy( TempLine, TempStart, Length( HighLight ) );
Delete( TempLine, 1, TempStart + Length( HighLight ) - 1 );
End
Else
Begin
TempText := TempLine;
TempHigh := "";
TempLine := "";
End;

If TempText > "" Then
Begin
TextOut( TempLeft, TempTop, TempText );
Inc( TempLeft, TextWidth( TempText ) );
End;

If TempHigh > "" Then
Begin
OldColor := Font.Color;
If odSelected In State Then
Font.Color := clYellow
Else
Font.Color := clBlue;
TextOut( TempLeft, TempTop, TempHigh );
Inc( TempLeft, TextWidth( TempHigh ) );
Font.Color := OldColor;
End;
End;
end;
end;
 

Это можно протестировать со следующими тремя строками:

"Строка номер один"
"Вторая строка"
"Это строчка номер три"

Есть несколько вещей, достойных упоминания:

Я использую параметр Control для приведения типов ( Control as TListBox ).Items[ Index ], что убедиться в том, что я использую данные ListBox, такой способ позволяет сделать общим данный обработчик события для нескольких компонентов TListBox, например, если у вас имеется пара ListBox на различных страницах TNoteBook.

OldColor и проверка параметра State позволяет быть уверенным, что выбранная строка содержит видимый цвет шрифта (множество видеодрайверов используют белый текст на синем фоне для выбранной строки).

Также я создаю небольшое свободное пространство вокруг текста - увеличиваю TListBox.ItemHeight и, соответственно, область вывода текста - TempLeft := Rect.Left + 3 и TempTop := Rect.Top + 1.


 
denis24   (2004-09-09 12:17) [2]

Это все хорошо.Но у меня listview в котором несколько колонок.
Я запутался с прорисовкой этих колонок.
Хочу так ,если в первой и во второй колонке значения совпадают то вся строка рисуется отдельным цветом..
Если делать так :

Sender.Canvas.TextOut(Rect.Left+23,Rect.Top+1,Item.Caption);
то рисуется только первая колонка


 
AlexSV   (2004-09-09 13:41) [3]

> denis24

вместо OnDrawItem используй

OnCustomDrawItem ...
OnCustomDrawSubItem ...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.067 c
14-1094332002
olookin
2004-09-05 01:06
2004.09.26
Вы придете в дом...


4-1092484250
leonidus
2004-08-14 15:50
2004.09.26
Функция определения свободного места на винте


14-1094743978
X9
2004-09-09 19:32
2004.09.26
Организация локальной сети


14-1094236128
noname.txt
2004-09-03 22:28
2004.09.26
Как узнать PageRank и ТИц страницы???


1-1094813834
Antonmm
2004-09-10 14:57
2004.09.26
Свой курсор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский