Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView и позиция курсора.


koha ©   (2007-10-15 19:19:00) 

Помогите. Как определить позицию курсора в ListView? Необходимо такая работа, допустим в одной из колонок ListView (vsReport) при наведении курсора строка текста подсвечавалась или выделялась, например, как это можно сделать для TLabel при методе onMouseMove onMouseLeave?


koha   (2007-10-17 17:25:00) [1]

Обещаю болеше не мучать никого вопросами по этому поводу уже все-таки разобрался.


koha   (2007-10-17 17:04:00) [2]

> [17] clickmaker ©   (17.10.07 16:42)


> чукча не читатель? :)
>
> [15] clickmaker ©   (17.10.07 14:13)
>
> procedure UpdateItems(FirstIndex, LastIndex: Integer);
>
> Оно само дернет LVAdvancedCustomDrawItem именно для 5-й
> строки


- Чукчи сдесь ни причем, вопрос посуществу. Вот смотри что получается допустим что порисовать нужно только 3-й колонке а в 1,2-й нет, но вот курсор попал на первую колонку и сделал клик и тут событие LVAdvancedCustomDrawItem которое все прорисует, как же мне ловить нужную ячейку в обработчике?


clickmaker   (2007-10-17 16:42:00) [3]


> именно текст в 5-й строке 3-й колонке, а другие элементы
> пропустить

чукча не читатель? :)

[15] clickmaker ©   (17.10.07 14:13)

procedure UpdateItems( FirstIndex, LastIndex: Integer);

Оно само дернет LVAdvancedCustomDrawItem именно для 5-й строки


koha   (2007-10-17 16:12:00) [4]

Хорошо, с вопросам по поводу как что расчитать: позицию курсора, в какой колонке (ячейке) уже нет.
Вот допусим все уже расчитал, что курсор находится в в пятой строке 3-й колонке, а как же в LVAdvancedCustomDrawItem мне прорисовать именно текст в 5-й строке 3-й колонке, а другие элементы пропустить, как определить, что функция именно этот элемент сейчас будет прорисовывать, там может быть есть какой-нибудь перечислитель? По sender или Item?


clickmaker   (2007-10-17 14:13:00) [5]


> а мне нужно при наведении курсора перерисовывалась нужная
> ячейка

так а самому пнуть листвью, чтобы перерисовался?
Даже метод такой есть
procedure UpdateItems(FirstIndex, LastIndex: Integer);

ЗЫ. Когда уже хелп начнем читать чутка внимательней?


koha   (2007-10-17 14:11:00) [6]

> [13] Palladin ©   (17.10.07 13:48)
> В этой проседуре можно получить Mouse.CursorPos, а потом
> нужно слить два ответа воедино [3] и [11]


- это уже понятно позиция курсора минус клиентская часть = позиция курсора в клиентская часть. Но вот LVAdvancedCustomDrawItem перечисляет ячейки или елементы и перерисовывает, но как определить мне нужную ячейку или элемент? Да и вообще под необходимую мне задачу LVAdvancedCustomDrawItem не подходит так как LVAdvancedCustomDrawItem перерисовывает (событие) только при клике по нему, а мне нужно при наведении курсора перерисовывалась нужная ячейка или элемент.


Palladin   (2007-10-17 13:48:00) [7]

В этой проседуре можно получить Mouse.CursorPos, а потом нужно слить два ответа воедино [3] и [11]


koha   (2007-10-17 13:25:00) [8]

procedure TForm1.LVAdvancedCustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
 var DefaultDraw: Boolean);

В этой проседуре через какое свойство перечисляются колонка строка или как там ее ечейка которую обрабатывает?


clickmaker   (2007-10-17 12:07:00) [9]


> [10] koha   (17.10.07 12:04)

ну так переведи
ScreenToClient() на что?


koha   (2007-10-17 12:04:00) [10]

> [9] clickmaker ©   (17.10.07 11:58)
>
> > [8] koha   (17.10.07 11:53)
>
> а до Ф1 не дотянуться?
>
> GetCursorPos() + ListView.GetItemAt()


Я может ошибаюсь GetCursorPos() возвращает позицию относительно экрана, а ListView.GetItemAt() обрабатывает относительно собственного окна?


clickmaker   (2007-10-17 11:58:00) [11]


> [8] koha   (17.10.07 11:53)

а до Ф1 не дотянуться?

GetCursorPos() + ListView.GetItemAt()


koha   (2007-10-17 11:53:00) [12]

> [7] clickmaker ©   (17.10.07 11:49)
>
> > [6] koha   (17.10.07 11:44)
>
> GetCursorPos, например


- а оно возвращает в какой колонке и строке курсор находится?


clickmaker   (2007-10-17 11:49:00) [13]


> [6] koha   (17.10.07 11:44)

GetCursorPos, например


koha   (2007-10-17 11:44:00) [14]

> [5] clickmaker ©   (17.10.07 10:34)


> OnAdvancedCustomDrawItem


- A через что тут обработать позицию курсора?


clickmaker   (2007-10-17 10:34:00) [15]


> а вот изменить цвет шрифта в строке X и N-й колонке, как
> осуществить?

OnAdvancedCustomDrawItem


koha   (2007-10-17 10:05:00) [16]

Позицию колонки и строки найти это еще пол дела, а вот изменить цвет шрифта в строке X и N-й колонке, как осуществить?


Palladin   (2007-10-16 12:01:00) [17]

а... колонки отдельно нужно.... тогда да, MouseMove, найти колонку считать циферки Columns[i].Width и вычислять...


Palladin   (2007-10-16 11:57:00) [18]

TListView.HotTrack


koha   (2007-10-16 11:55:00) [19]

Просматривал предыдущие ветки нашел такой способ:

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//...
ListView1.GetItemAt(x, y).Index;
//...
end;

- Это найти позицию строки, а как найти позицию колонки?


Наверх

Титульная страница Поиск, карта сайта Написать письмо