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

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

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

:: MVP ::

:: RSS ::

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

Как изменить цвет текста TListView?

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  ListView1.Canvas.Font.Color := clRed;
end;


Как изменить цвет текста выделенной строки TListView?

// Способ первый
uses
  {...,} CommCtrl;

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
begin
  Item := (Sender as TListView).GetItemAt(X, Y);
  if Item = nil then
    Exit;
  SendMessage(Item.Handle, LVM_SETTEXTCOLOR, 0, RGB(255, 0, 0));
end; 

// Способ второй
uses
  {...,} CommCtrl;

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
begin
  Item := (Sender as TListView).GetItemAt(X, Y);
  if Item = nil then
    Exit;
  ListView_SetTextColor(Item.Handle, RGB(255, 0, 0));
end;


Как сделать выделение в TListView как в Vista (чтобы не пунктирный прямоугольник был)?

uses
  {...,} CommCtrl;

procedure TForm1.FormCreate(Sender: TObject);
const
  LVS_EX_DOUBLEBUFFER = $00010000;
begin
  // Должно быть включено свойство MultiSelect
  ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_DOUBLEBUFFER);
  ListView1.DoubleBuffered := True;
end;


Как реализовать подчеркивание элемента TListView при наведении на него мыши?

uses
  {...,} CommCtrl;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

{...}

implementation

procedure TForm1.FormCreate(Sender: TObject);
const
  LVS_EX_UNDERLINEHOT = $00000800;
var
  Styles : DWord;
begin
  Styles := ListView_GetExtendedListViewStyle(ListView1.Handle);
  Styles := Trunc(Styles + LVS_EX_UNDERLINEHOT - LVS_EX_FULLROWSELECT);
  ListView_SetExtendedListViewStyle(ListView1.Handle, Styles);
end;

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  AItem : TListItem;
begin
  AItem := ListView1.GetItemAt(X, Y);
  if not Assigned(AItem) then
    ListView1.Cursor := crArrow
  else
    ListView1.Cursor := crHandPoint;
end;


Как выбрать строку списка средней кнопкой мыши?

procedure TMainForm.lvKeyboardLayoutsMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
begin
  if Button = mbMiddle then
  begin
    Item := (Sender as TListView).GetItemAt(X, Y);
    if Assigned(Item) then
      Item.Selected := True;
  end;
end;


Как назначить заголовку TListView отдельный ImageList?

uses
  {...,} CommCtrl;

procedure SetHeaderImages(ListView: TCustomListView; Images: TCustomImageList);
var
  Wnd: HWND;
begin
  Wnd := FindWindowEx(ListView.Handle, 0, 'SysHeader32', nil);
  if Wnd <> 0 then
    Header_SetImageList(Wnd, Images.Handle);
end;


Как прокрутить ListView к выделенному элементу?

procedure TForm1.Button1Click(Sender: TObject);
var
  li: TListItem;
begin
  // Запоминаем выделенный элемент
  li := ListView1.Selected;

  // что-то делаем со списком
  // (например, обновляем)

  // Возвращаемся к ранее запомненному элементу
  ListView1.Selected := li;
  ListView1.ItemFocused := ListView1.Selected;
  ListView1.Selected.MakeVisible(True);
end;


Как в ListView отображать записи разным шрифтом?

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.Index mod 2 = 0 then
    Sender.Canvas.Font.Style := [fsStrikeOut];
end;

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if Item.Index mod 2 = 0 then
    Sender.Canvas.Font.Style := [fsStrikeOut];
end;


Как обработать щелчок мыши в пустой области TListView?

// Способ первый
procedure TForm1.FiltersListDblClick(Sender: TObject);
begin
  if FiltersList.SelCount = 0 then
    ShowMessage('Щелчок в пустой области ListView');
end;

// Способ второй
procedure TForm1.FiltersListDblClick(Sender: TObject);
begin
  if not Assigned(FiltersList.Selected) then
    ShowMessage('Щелчок в пустой области ListView');
end;


Как убрать рамку фокуса с элементов TListView?

procedure TForm1.FormCreate(Sender: TObject);
begin
  SendMessage(ListView1.Handle, WM_UPDATEUISTATE, MakeLong(UIS_SET, UISF_HIDEFOCUS), 0);
end;

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