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

Вниз

определить нажатие на checkbox в ListView   Найти похожие ветки 

 
Yuri Btr ©   (2004-03-06 15:22) [0]

Ув. мастера, подскажите как "красиво" определить что было нажатие  пользователем именно на checkbox в ListView. (Checkboxes=true, Style=vsReport)
События OnClick, OnSelectItem генерируются не позволяя опр. клик на чекбоксе. (например Item может и не выделяться при клике по чекбоксу)
События OnChange, OnChanging генерируются в разных ситуациях, частично их можно отфильтровать с пом. Change=ctState, но всё равно идёт срабатывание при добавлении, уничтожении ListView, перемещении, клике на Item вне чекбокса...


 
Yuri Btr ©   (2004-03-06 16:18) [1]

Да, забыл сказать заранее спасибо...
:-)
Очччень надо.


 
Юрий Зотов ©   (2004-03-06 16:44) [2]

procedure TForm1.ListView1Click(Sender: TObject);
const
 CheckState: array[boolean] of string = ("Unchecked", "Checked");
var
 P: TPoint;
 Item: TListItem;
begin
 with ListView1 do
 begin
   P := ScreenToClient(Mouse.CursorPos);
   if GetHitTestInfoAt(P.X, P.Y) = [htOnStateIcon] then
   begin
     Item := GetItemAt(P.X, P.Y);
     if Item <> nil then
       Caption := Format("%d: %s", [Item.Index, CheckState[Item.Checked]])
   end
 end
end;


 
Yuri Btr ©   (2004-03-06 18:33) [3]

to Юрий Зотов ©
Вот оно - GetHitTestInfoAt+GetItemAt !!!
Спасибо Вам, выручили !


 
Yuri Btr ©   (2004-03-06 19:44) [4]

Осталась одна лишь проблема - OnClick не генерируется при клике правой кнопкой мыши на чекбоксе, однако чекбокс изменяет своё состояние, глупых людей мало, но всё же неприятный факт...
К тому же правая кнопка не ловится при клике на чекбоксе и на OnMouseUp...
Видимо всё таки нужно создавать компонент от TListView  - и перехватывать в нём сообщения от мыши, также в нём реализовать новое событие OnCheckClick (как в TCheckListBox)


 
Yuri Btr ©   (2004-03-06 19:55) [5]

Ура.
Всё решилось, вот код:

procedure TForm1.LV1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
Item: TListItem;
begin
with (Sender as TListView) do
 begin
  if GetHitTestInfoAt(X,Y) = [htOnStateIcon]
   then
    begin
     Item := GetItemAt(X,Y);
     if Item <> nil
      then
       //do some stuff
    end;
 end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.051 c
4-1074053732
Sirus
2004-01-14 07:15
2004.03.28
Как из DLL отослать сообщение вызывающему приложению??


4-1073743323
volser
2004-01-10 17:02
2004.03.28
Перехват вставки


14-1077778345
Иван Николаевич Понырев
2004-02-26 09:52
2004.03.28
Как бесплатно, через инет, отправить факс?


3-1077205993
Zevsus
2004-02-19 18:53
2004.03.28
Interbase: Перехватить неправльный ввод пароля


7-1072874326
начинающий1
2003-12-31 15:38
2004.03.28
Подскажите как правильно подставить значения в процедуру