Форум: "Основная";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизРазбираем ListView Найти похожие ветки
← →
Cash (2004-01-05 13:53) [0]А возможно ли узнать, внутри какого столбца был произведен клик мыши (при выделении итема)?
Главное как это узнать.
← →
[lamer]Barmaglot (2004-01-05 13:59) [1]ListView_HitTest?
← →
Cash (2004-01-05 14:10) [2][lamer]Barmaglot © (05.01.04 13:59) [1] так.. а по конкретнее.
← →
[lamer]Barmaglot (2004-01-05 14:14) [3]Ну я бы делал руками... То есть при клике на ListView получаешь координаты в координатной сетке listview`а. Потом проверяешь если х от 0 до конца первого столбца, то первый, если от конца первого до конца второго, то второй и т.д.
← →
Cash (2004-01-05 14:19) [4]Ха... я также делал, НО! если к-во столбцов выходит за рамки ListView, из любого положения гор. ползунка моя процедурка отсчитывает начиная с самого первого столбца.
P.S. думал там спецательный элемент для этого припасен.
← →
[lamer]Barmaglot (2004-01-05 14:31) [5]Насколько хватает моих ограниченных знаний, специальных функций нет. Может отслеживать позицию скрола?
← →
Леприкон (2004-01-05 14:32) [6]Может лучше StringGrid поюзать?
← →
default (2004-01-05 14:38) [7]GetItemAt?
← →
[lamer]Barmaglot (2004-01-05 14:41) [8]Ему нужна колонка а не итем (правда не понятно зачем...)
← →
default (2004-01-05 14:44) [9]ну если у него число столбцов(и item-ов в них) заранее определено, можно по item-у определить столбец...
← →
[lamer]Barmaglot (2004-01-05 14:49) [10]Если защел разговор о столбцах для ListView, это значит, что он находится в режиме Report, то есть каждый итем занимает 1 строку и н-ное количество столбцов. (Например как в программе FindFiles). Поэтому знание номера итема ему ничего не даст...
← →
olookin (2004-01-05 14:55) [11]Получить значение координаты начала области листвью если он прокручен можно... Например на onmousedown прописать
showmessage(inttostr(listview1.TopItem.Left));
Отсюда зная X и Y мыши можно получить координату клика относительно самого края листвью, и пересчитав на ширину колонок, номер колонки где кликнули мышкой
← →
olookin (2004-01-05 14:59) [12]вот рабочий код
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var n,i,z: integer;
begin
n:=Abs(listview1.TopItem.Left)+X; z:=0;
for i:=0 to listview1.Columns.Count-1 do begin
z:=z+listview1.Column[i].Width;
if z>n then begin
showmessage("number of column is "+inttostr(i+1));
break; end;
end;
end;
← →
Cash (2004-01-05 15:30) [13]Мужики, всем спасибо.
за недолгим отсуцтвием сам разработал алгоритм(защищено А.П.:)))). Нате Смотрите, работает на все сто.
Procedure TForm1.SchClm(AListView: TListView;MouseX: integer;var stb,stbw: integer);
var
i,a: integer;
begin
if AListView.Items.Item[0]<> nil then
a:=AListView.Items.Item[0].Position.X
else a:=0;
for i:=0 to (AListView.Columns.Count-1) do
if (MouseX>a)and(MouseX<a+AListView.Columns[i].Width) then begin
stb:=i;
stbw:=a+2;
break;
end else a:=a+ListView1.Columns[i].Width;
end;
[8] - поясню зчем.
ранее я задал вопрос о вставке Edit или CombBox в рамки, ограниченные столбцом и строкой(ПРЯМОУГОЛЬНИК), сейчас вставляешь эту процедурку в событие MouseMove, далее по даблклику внутри определенной области делаешь несколько подготовительных операцый с Edit-ом и, оба-на, готово.
Когда в ListView дофига и больше полей с припиской "редактировать", можно воткнуть именно этот алгоритм.(эдесь толко одна функцыя из всего алгоритма).
Всем спасибо за участие.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c