Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизВ ListView строки разного цвета.... Найти похожие ветки
← →
serko © (2007-04-11 23:50) [0]Привет всем!
Ребят подскажите как в ListView сделать так чтобы можна было добавлять строки разного цвета. я понимаю что все делается в OnDrawItem... но у меня чето не получается!
Можна примерчик состряпать? Плиз....
← →
MikePetrichenko © (2007-04-12 00:10) [1]Легко. Открываем Delphi, кидаем на форму TListView выделяем его (если он по какой-то причине не выделен) и нажимаем F1. В появившемся окне кликаем на Events потом на OnDrawItem - читаем.
Если просветление не наступило, то в окне, после F1 которое, выбираем Properties там ищем OwnerDraw и опять читаем.
Повторять до полного просветления.
Велкам....
← →
serko © (2007-04-12 00:19) [2]Бу-га-га...
Вопрос был не о том как найти OnDrawItem по F1.
← →
MikePetrichenko © (2007-04-12 00:21) [3]А Вы попробуйте, а вось поможет. Хотя, если чукча только писатель...
← →
{RASkov} (2007-04-12 00:40) [4]> [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;
← →
serko © (2007-04-14 21:11) [5]
> TextOut(Rect.Left, Rect.Top, Item.Caption);
А для subitem как?
← →
serko © (2007-04-14 21:24) [6]если писать так:
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... но как?
← →
{RASkov} (2007-04-14 22:00) [7]> [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 23:14) [8]Ага!
Выскакивает ошибка List index out of bounds (0)
Вот с этим и мучусь... ошибка и все...
← →
{RASkov} (2007-04-14 23:22) [9]> [8] serko © (14.04.07 23:14)
Ну наверное здесь эта собака зарыта:
if N<Item.SubItems.Count then TextOut(Rect.Left, Rect.Top, Item.SubItems[N-1]);
Вообщем найди где у тебя чего-то нехватает....
← →
{RASkov} (2007-04-14 23:33) [10]Т.е. даже лучше так переделать
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-1 do 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;
Вообщем все это не красиво и только для примера, пораскинь мозгами, только не в прямом смысле :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c