Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизПрорисовка SubItems в ТListView Найти похожие ветки
← →
Sorry (2007-10-20 13:01) [0]Добился прорисовки текста нужного мне субитема через 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) [1]Предлагаю рисовать в OnCustomDrawSubItem, в MouseMove при попадании в SubItem делать Invalidate Rect"a этого SubItem"а и запоминать этот Item, если вышли из этого SubItem"а - снова Invalidate.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.053 c