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

Вниз

В 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
2-1176453469
Merry
2007-04-13 12:37
2007.05.06
Обновить данные таблицы из другой таблицы


15-1175943185
Persd
2007-04-07 14:53
2007.05.06
Где можно найти ноты для фортепиано современных исполнителей?


15-1175898373
Gero
2007-04-07 02:26
2007.05.06
Шедевр


4-1165573534
Repavel
2006-12-08 13:25
2007.05.06
Как узнать хэндл активного окна


2-1176616630
GeLLeR
2007-04-15 09:57
2007.05.06
Focus