Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

ListView и позиция курсора.   Найти похожие ветки 

 
koha ©   (2007-10-15 19:19) [0]

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


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

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

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

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


 
Palladin ©   (2007-10-16 11:57) [2]

TListView.HotTrack


 
Palladin ©   (2007-10-16 12:01) [3]

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


 
koha   (2007-10-17 10:05) [4]

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


 
clickmaker ©   (2007-10-17 10:34) [5]


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

OnAdvancedCustomDrawItem


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

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


> OnAdvancedCustomDrawItem


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


 
clickmaker ©   (2007-10-17 11:49) [7]


> [6] koha   (17.10.07 11:44)

GetCursorPos, например


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

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


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


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


> [8] koha   (17.10.07 11:53)

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

GetCursorPos() + ListView.GetItemAt()


 
koha   (2007-10-17 12:04) [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 12:07) [11]


> [10] koha   (17.10.07 12:04)

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


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

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

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


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

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


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

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


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


 
clickmaker ©   (2007-10-17 14:13) [15]


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

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

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


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

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


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


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

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

[15] clickmaker ©   (17.10.07 14:13)

procedure UpdateItems(FirstIndex, LastIndex: Integer);

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


 
koha   (2007-10-17 17:04) [18]

> [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 которое все прорисует, как же мне ловить нужную ячейку в обработчике?


 
koha   (2007-10-17 17:25) [19]

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1191092709
Petr V. Abramov
2007-09-29 23:05
2007.11.11
где скачать ридер djvu


2-1192626983
Elec3C
2007-10-17 17:16
2007.11.11
Inc, Dec.


6-1173444998
vlavich
2007-03-09 15:56
2007.11.11
Проблема с установкой RAS соединения


2-1193040297
ruma
2007-10-22 12:04
2007.11.11
TStringGrid. Как удержать фокус на ячейке таблицы?


2-1192522713
webpauk
2007-10-16 12:18
2007.11.11
Тип данных