Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как узнать, по какой колонке был клик в TListView

Delphi , Компоненты и Классы , TListView

Как узнать, по какой колонке был клик в TListView

Метод GetItemAt позволяет получить координаты ListItem, по которой был клик, но только для первой колонки TListView. Если нужно узнать по какому элементу из другой колонки кликнул пользователь, то прийдётся объявить новый метод в наследованном классе:


uses ComCtrls;

type
  TListViewX = class(TListView)
  public
    function GetItemAtX(X, Y: integer; var Col: integer): TListItem;
  end;

implementation

function TListViewX.GetItemAtX(X, Y: integer;
  var Col: integer): TListItem;
var
  i, n, RelativeX, ColStartX: Integer;
  ListItem: TlistItem;
begin
  Result := GetItemAt(X, Y);
  if Result <> nil then begin
    Col := 0; // Первая колонка
  end else if (ViewStyle = vsReport)
    and (TopItem <> nil) then begin
    // Первая, попробуем найти строку
    ListItem := GetItemAt(TopItem.Position.X, Y);
    if ListItem <> nil then begin
      // Теперь попробуем найти колонку
      RelativeX := X - ListItem.Position.X - BorderWidth;
      ColStartX := Columns[0].Width;
      n := Columns.Count - 1;
      for i := 1 to n do begin
        if RelativeX < ColStartX then break;
        if RelativeX <= ColStartX +
          StringWidth(ListItem.SubItems[i - 1]) then
        begin
          Result := ListItem;
          Col := i;
          break;
        end; //if
        Inc(ColStartX, Columns[i].Width);
      end; //for
    end; //if
  end; //if
end;

А вот так выглядит событие MouseDown:


procedure TForm1.ListView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  col: integer;
  li: TListItem;
begin
  li := TListViewX(ListView1).GetItemAtX(x, y, col);
  if li <> nil then
    ShowMessage('Column #' + IntToStr(col));
end;

Код, который вы предоставили, - это кастомное реализация компонента TListView в Delphi, добавляющая новый метод под названием GetItemAtX. Этот метод позволяет получить элемент на конкретной позиции (X, Y) и индексе столбца.

Цель этого метода - обрабатывать клики мыши на различных столбцах списка. Оригинальный метод GetItemAt возвращает только элемент на кликнутой позиции для первого столбца, но ваш кастомный код позволяет указать, какой столбец проверять.

В примере кода обработчик события MouseDown использует этот новый метод, чтобы получить элемент на кликнутой позиции и определить, какой столбец был кликнут. Затем он отображает сообщение с номером кликнутого столбца.

Следующий разбор того, как работает код:

  1. Кастомный метод GetItemAtX вызывается с координатами X и Y клика мыши, а также переменной Col, которая хранит индекс столбца.
  2. Если элемент на указанной позиции не null, то это означает, что клик был на первом столбце, поэтому метод возвращает элемент и устанавливает Col в 0 (первый столбец).
  3. Если стиль просмотра - report-style и есть элементы в списке, метод пытается найти строку на верху кликнутой позиции.
  4. Для каждого последующего столбца он проверяет, падает ли относительная координата X внутри границ ширины этого столбца. Если это так, то он устанавливает Col в текущий индекс столбца и выходит из цикла.

Кастомное реализация используется в обработчике события MouseDown, чтобы получить элемент на кликнутой позиции и определить, какой столбец был кликнут. Результат - сообщение с номером кликнутого столбца.

В целом, этот код предоставляет полезное расширение к оригинальному компоненту TListView, позволяя разработчикам легко определять, какой столбец был кликнут на контроле списка.

Получение координат клика в TListView позволяет узнать по какой колонке был выполнен клик, для этого можно объявить новый метод в наследованном классе TListView.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TListView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:57:31/0.0034198760986328/0