Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прорисовка SubItems в ТListView


Sorry ©   (2007-10-20 13:01:00) 

Добился прорисовки текста нужного мне субитема через ListViewMouseMove при наведении курсора, т.е. работает так: несколько колонок и в определенной колонке например 3 (subitems[2]) при на ведении курсора текст подсвечивается как веб-ссылка, а при удалении курсора должн стать обычным текстом.

Проблема в том, что не могу добиться возврата текста в обратное положение т.е. в преждний цвет и стиль. Кде нужно обрабатывать код для возврата ListViewMouseMove или ListViewAdvancedCustomDrawSubItem? Не совсем ясен порядок их работы?

есть код:

procedure TForm1.ListViewMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
Var
 Rect: TRect;
 ItemIndex,SubItem, i,WL,WR: Integer;
 LI: TListItem;
 LV: TListView;
begin
 LV:=TListView(Sender);
 LI:=LV.GetItemAt(X,Y);
 WR:=0;
 WL:=0;
 if LI <> Nil then begin

   ItemIndex:=LV.GetItemAt(X,Y).Index;
   Rect:=LI.DisplayRect(drIcon);

   for i:=0 to LV.Columns.Count -2 do begin
     WL:=WL+LV.Column[i].Width;
     WR:=WL+LV.Column[i+1].Width;
     if (X > WL) and (X < WR) then begin
       SubItem:=I;
       Break;
     end;
   end;
   
   if SubItem = 2 then begin
   
     for i:=0 to SubItem do Rect.Left := Rect.Left + LV.Column[i].Width;

     Rect.Right := Rect.Left + LV.Column[SubItem+1].Width;
     Inc(Rect.Left,5);
     LV.Canvas.FillRect(Rect);
     LV.Canvas.Font.Style := [fsUnderline];
     LV.Canvas.Font.Color := clBlue;  
     DrawText(LV.Canvas.Handle, PChar(LV.Items[ItemIndex].SubItems[SubItem]),
              Length(LV.Items[ItemIndex].SubItems[SubItem]), Rect,
              DT_WORDBREAK
              OR DT_END_ELLIPSIS
              OR DT_Left
              OR DT_VCENTER
              OR DT_NOPREFIX);
   end;
 end;


guav   (2007-10-20 22:19:00) [1]

Предлагаю рисовать в OnCustomDrawSubItem, в MouseMove при попадании в SubItem делать Invalidate Rect'a этого SubItem'а и запоминать этот Item, если вышли из этого SubItem'а - снова Invalidate.


Наверх

Титульная страница Поиск, карта сайта Написать письмо