Форум: "Основная";
Текущий архив: 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.715 c