Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView: узнать столбец в котором ячейка? при двойном клике мышью по ячейке 
:(
    Опции темы
DmitryHT
Дата 2.7.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Подскажите как в ListView узнать столбец в котором находится ячейка, по которой кликнули мышкой?

Попробовал вычислять через координаты получаемые на событие OnMouseDown и ширину столбцов.
Но если у ListView есть горизонтальная полоса прокрутки, то такой способ работает только на половину: координата X не меняется при прокрутке скрола.

В общем, буду признателен за помощь.

Это сообщение отредактировал(а) DmitryHT - 3.7.2009, 13:05
PM MAIL   Вверх
Nofate
Дата 3.7.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: нет
Всего: 8



Есть еще TListView.ViewOrigin который нужно учитывать в расчетах.


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
RomanEEP
Дата 3.7.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 5
Всего: 8



Цитата(Nofate @  3.7.2009,  14:11 Найти цитируемый пост)
Есть еще TListView.ViewOrigin который нужно учитывать в расчетах.

в режиме vsReport свойство не работает
PM MAIL   Вверх
DmitryHT
Дата 5.7.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



Цитата

Есть еще TListView.ViewOrigin который нужно учитывать в расчетах.

Режим vsReport. Координата Х все время равна 0  smile 

Это сообщение отредактировал(а) DmitryHT - 5.7.2009, 21:00
PM MAIL   Вверх
Pseex
Дата 5.7.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.9.2008

Репутация: нет
Всего: нет



может поможет api функция GetCaretPos:
Код

procedure TForm1.ListView1Click(Sender: TObject);
var
 CliPos:TPoint;
 posX:integer;
begin
 GetCaretPos(CliPos);
 posX := CliPos.X;
end;

PM MAIL ICQ   Вверх
DmitryHT
Дата 6.7.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



тоже мимо smile 
PM MAIL   Вверх
Pseex
Дата 6.7.2009, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.9.2008

Репутация: нет
Всего: нет



Код

procedure TForm1.ListView1Click(Sender: TObject);
begin
 Caption := IntToStr(ListView1.Items.IndexOf(ListView1.Selected));
end;

с тебя шоколадка))
PM MAIL ICQ   Вверх
jsa
Дата 6.7.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



че то типо этого
Код

function GetSubitem(Sender: TObject; X, Y: Integer; var ACol: Integer): TListItem;
var LI: TListItem;
    RelativeX, ColStartX, ColCnt,I: Integer;
begin
  ACol:=-1;
  LI:=nil;
  with (Sender as TListView) do
   begin
    LI:=GetItemAt(X,Y);
    if LI <> nil then
     begin
      ACol:=0;
     end
    else
     if TopItem <> nil then
      begin
       LI:=GetItemAt(TopItem.Position.X,Y);
       if LI <> nil then
        begin
         RelativeX:=X-LI.Position.X-BorderWidth;
         ColStartX:=Column[0].Width;
         ColCnt:=Columns.Count-1;
         for I:=1 to ColCnt do
          begin
           if RelativeX < ColStartX then
            Break;
           if RelativeX <= ColStartX + Columns[I].Width then
            begin
              //Result:=LI;
              ACol:=I;
              Break;
            end;
           Inc(ColStartX,Columns[I].Width);
          end;
        end;
      end;
   end;
  Result:=LI;
end;



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
DmitryHT
Дата 6.7.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 31.8.2007

Репутация: нет
Всего: нет



jsa, большое спасибо за ListView.TopItem.Position.X  smile 

Проблема решена ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.