Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

определить нажатие на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.041 c
6-1073822070
Ермак
2004-01-11 14:54
2004.03.28
Программирование сокетов через WinAPI


1-1078931560
Серёга
2004-03-10 18:12
2004.03.28
Команды


3-1077175446
Rumba
2004-02-19 10:24
2004.03.28
Как задать внешний файл?


14-1078284054
Andrey V.
2004-03-03 06:20
2004.03.28
Хочу печатать штрих коды


4-1073768458
tytus
2004-01-11 00:00
2004.03.28
Нуль-терминал в OLE-строку.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский