![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В ListView строки разного цвета.... [D7, XP]
serko © (2007-04-11 23:50:00)Привет всем!
Ребят подскажите как в ListView сделать так чтобы можна было добавлять строки разного цвета. я понимаю что все делается в OnDrawItem... но у меня чето не получается!
Можна примерчик состряпать? Плиз....
{RASkov} (2007-04-14 23:33:00) [1]Т.е. даже лучше так переделать
procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var N: Integer;
begin
with Sender.Canvas do begin
Font.Color:=RGB(Random(255), Random(255), Random(255));
TextOut(Rect.Left, Rect.Top, Item.Caption);
for N:=0 to Item.SubItems.Count-1do begin
if N=ListView1.Columns.Count-1 then Break;
Rect.Left:=Rect.Left + ListView1.Columns[N].Width;
Rect.Right:=Rect.Left + ListView1.Columns[N+1].Width;
TextOut(Rect.Left, Rect.Top, Item.SubItems[N]);
end;
end;
end;
Вообщем все это не красиво и только для примера, пораскинь мозгами, только не в прямом смысле :)
{RASkov} (2007-04-14 23:22:00) [2]> [8] serko © (14.04.07 23:14)
Ну наверное здесь эта собака зарыта:
if N<Item.SubItems.Count then TextOut(Rect.Left, Rect.Top, Item.SubItems[N-1]);
Вообщем найди где у тебя чего-то нехватает....
serko (2007-04-14 23:14:00) [3]Ага!
Выскакивает ошибка List index out of bounds (0)
Вот с этим и мучусь... ошибка и все...
{RASkov} (2007-04-14 22:00:00) [4]> [5] serko © (14.04.07 21:11)
Ну примерно так:
procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var N: Integer;
begin
with Sender.Canvas do begin
Font.Color:=RGB(Random(255), Random(255), Random(255));
TextOut(Rect.Left, Rect.Top, Item.Caption);
for N:=1 to ListView1.Columns.Count-1 do begin
Rect.Left:=Rect.Left + ListView1.Columns[N-1].Width;
Rect.Right:=Rect.Left + ListView1.Columns[N].Width;
TextOut(Rect.Left, Rect.Top, Item.SubItems[N-1]);
end;
end;
end;
serko (2007-04-14 21:24:00) [5]если писать так:
with Sender.Canvas do begin
Font.Color:=RGB(Random(255), Random(255), Random(255));
TextOut(Rect.Left, Rect.Top, Item.Caption);
TextOut(Rect.Left, Rect.Top, Item.SubItems.CommaText);
end;
То добавляются две записи в СТОЛБИК.
Как то надо различать что сейчас рисуется Item или SubItem... но как?
serko (2007-04-14 21:11:00) [6]
> TextOut(Rect.Left, Rect.Top, Item.Caption);
А для subitem как?
{RASkov} (2007-04-12 00:40:00) [7]> [0] serko © (11.04.07 23:50)
procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
ListView1.Columns.Add;
ListView1.OwnerDraw:=True;
ListView1.ViewStyle:=vsReport;
ListView1.OnDrawItem:=ListView1DrawItem;
for N:=0 to 10 do ListView1.AddItem('Строка №'+IntToStr(N), nil);
end;
procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
with Sender.Canvas do begin
Font.Color:=RGB(Random(255), Random(255), Random(255));
TextOut(Rect.Left, Rect.Top, Item.Caption);
end;
end;
MikePetrichenko (2007-04-12 00:21:00) [8]А Вы попробуйте, а вось поможет. Хотя, если чукча только писатель...
serko (2007-04-12 00:19:00) [9]Бу-га-га...
Вопрос был не о том как найти OnDrawItem по F1.
MikePetrichenko (2007-04-12 00:10:00) [10]Легко. Открываем Delphi, кидаем на форму TListView выделяем его (если он по какой-то причине не выделен) и нажимаем F1. В появившемся окне кликаем на Events потом на OnDrawItem - читаем.
Если просветление не наступило, то в окне, после F1 которое, выбираем Properties там ищем OwnerDraw и опять читаем.
Повторять до полного просветления.
Велкам....