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

используй OnSelectItem (этого должно хватить)
...
Рейтинг: 0 / 0
Как отловить клик на иконке SubItem'а в ListView?
    #40125583
Вот, нашаманил, вроде работает:
Код: 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
Как отловить клик на иконке SubItem'а в ListView?
    #40125602
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Иван
Код: 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
Как отловить клик на иконке SubItem'а в ListView?
    #40125608
_Vasilisk_
Петров Иван
А что хотелось сделать?

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

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

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


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