Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отловить клик на иконке SubItem'а в ListView? / 8 сообщений из 8, страница 1 из 1
10.01.2022, 13:42
    #40125504
Как отловить клик на иконке SubItem'а в ListView?
GetHitTestInfoAt() распознает иконку только для первой колонки, а для SubItem'ов всегда возвращает "htOnItem".
Есть ли возможность как-то отловить клик по иконке SubItems?
...
Рейтинг: 0 / 0
10.01.2022, 15:26
    #40125524
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить клик на иконке SubItem'а в ListView?
Петров Иван,

используй OnSelectItem (этого должно хватить)
...
Рейтинг: 0 / 0
10.01.2022, 20:39
    #40125583
Как отловить клик на иконке SubItem'а в ListView?
Вот, нашаманил, вроде работает:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function GetColumnIndex(pListView: TListView; CursorX: Integer): Integer;
var
  WidthOffset: Integer;
begin
  WidthOffset := 0;
  Result := NEGATIVE_INDEX;
  if pListView = nil then
    Exit;
  while CursorX > WidthOffset do
  begin
    Inc(Result, 1);
    Inc(WidthOffset, pListView.Columns[Result].Width);
  end;
end;

procedure TFrom1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  p: TPoint;
  nBegColPos, I: Integer;
begin
  GetCursorPos(p);
  p := ListView1.ScreenToClient(p);
  I := GetColumnIndex(ListView1, p.X);
  if I = 9 then
  begin
    nBegColPos := (ListView1.Width - ListView1.Columns[9].Width);
    if (p.X = nBegColPos) or (p.X <= (nBegColPos + ImageList1.Width)) then
      ShowMessage('Иконка SubItem #9')
    else
      ShowMessage('Это не иконка');
  end;
end;


Спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
10.01.2022, 21:36
    #40125602
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить клик на иконке SubItem'а в ListView?
Петров Иван
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TFrom1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  p: TPoint;
  nBegColPos, I: Integer;
begin
  GetCursorPos(p);
  p := ListView1.ScreenToClient(p);
  I := GetColumnIndex(ListView1, p.X);
  if I = 9 then
  begin
    nBegColPos := (ListView1.Width - ListView1.Columns[9].Width);
    if (p.X = nBegColPos) or (p.X <= (nBegColPos + ImageList1.Width)) then
      ShowMessage('Иконка SubItem #9')
    else
      ShowMessage('Это не иконка');
  end;
end;

А что хотелось сделать?
...
Рейтинг: 0 / 0
10.01.2022, 22:03
    #40125608
Как отловить клик на иконке SubItem'а в ListView?
_Vasilisk_
Петров Иван
А что хотелось сделать?

При щелчке по иконке нужно вывести текст из колонки, который не помещается в экран ввиде хинта (или чего-то еще - пока не придумал).
...
Рейтинг: 0 / 0
10.01.2022, 22:05
    #40125609
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить клик на иконке SubItem'а в ListView?
Петров Иван
При щелчке по иконке нужно вывести текст
Так?
Код: pascal
1.
2.
3.
4.
5.
procedure TFrom1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  ShowMessage(Item.Caption);
end;
...
Рейтинг: 0 / 0
10.01.2022, 22:15
    #40125611
Как отловить клик на иконке SubItem'а в ListView?
_Vasilisk_
Петров Иван
При щелчке по иконке нужно вывести текст
Так?
Код: pascal
1.
2.
3.
4.
5.
procedure TFrom1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  ShowMessage(Item.Caption);
end;


Нет, нужен взять текст из колонки #9, т.е ListView1.Items[x].SubItems[9] и показать его как (может) хинт в месте клика, т.к текст может быть длинным и его неудобно будет просматривать обычным способом.
...
Рейтинг: 0 / 0
10.01.2022, 22:24
    #40125616
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отловить клик на иконке SubItem'а в ListView?
Петров Иванвроде работает

Аккурат до момента когда при высокой загрузке ЦПУ мышь успеет передвинуться от
места клика на половину экрана пока до твоего кода дойдёт управление.

Координаты надо брать из мышинного сообщения, а не текущие.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отловить клик на иконке SubItem'а в ListView? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]