FAQ VCL
Компоненты\ListView

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как изменять цвет выделения строки в ListView при потере фокуса?

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.HideSelection := False;
end;


Как определить нак какой строкой в ListView находится курсор?

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Item: TListItem;
begin
  Item := ListView1.GetItemAt(X, Y);    // Строка
  if Assigned(Item) then
    Form1.Caption := IntToStr(Item.Index);
end;


Как изменять цвет выделения строки в ListView при потере фокуса?

uses
  {...,} CommCtrl;

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  p: TPoint;
  HTI: TLVHitTestInfo;
begin
  GetCursorPos(p);
  p := ListView1.ScreenToClient(p);
  HTI.pt.x := p.X;
  HTI.pt.y := p.Y;
  ListView1.Perform(LVM_SUBITEMHITTEST, 0, Integer(@HTI));
  Form1.Caption := IntToStr(HTI.iItem) + '   ' + IntToStr(HTI.iSubItem);
end;


Как нарисовать что-нибудь в ячкйке ListView?

uses
  {...,} CommCtrl;

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  r: TRect;
begin
  if ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @r) then
  begin
    Sender.Canvas.Draw(r.Left + (r.Width div 2) - (cbUncheckedNormal.Width div 2),
      r.Top + (r.Height div 2) - (cbUncheckedNormal.Height div 2), BMP);
    DefaultDraw := False;
  end;
end;

// Если нужно обновлять ListView во время изменения ширины колонки,
// то можно сделать так:
// type
//   TListView = class(Vcl.ComCtrls.TListView)
//   protected
//     procedure WndProc(var Msg: TMessage); override;
//   end;
//
// procedure TListView.WndProc(var Msg: TMessage);
// var
//   Hdn: ^THDNotify;
// begin
//   inherited;
//   if Msg.Msg = WM_NOTIFY then
//   begin
//     Hdn := Pointer(Msg.lParam);
//     if (Hdn.Hdr.code = HDN_ITEMCHANGEDW) or (Hdn.Hdr.code = HDN_ITEMCHANGEDA) then
//       InvalidateRect(Handle, nil, True);
//   end;
end;

При использовании материала - ссылка на сайт обязательна