Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2014, 17:39   #1
Oleg_SS
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 75
По умолчанию Обработка события OnChange ListView

Доброе время суток!
Помогите обработать событие OnChange ListView
Надо обработать событие только тогда, когда пользователь изменил статус CheckBox.
Дело в том, что это событие возникает при любом изменении, в том числе и программном, и во время создания формы.
Oleg_SS вне форума Ответить с цитированием
Старый 27.05.2014, 17:44   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

отписываетесь перед программным изменением, и подписываетесь после
eval вне форума Ответить с цитированием
Старый 27.05.2014, 19:35   #3
Oleg_SS
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
отписываетесь перед программным изменением, и подписываетесь после
это какое то свойство установить?
какое?
Oleg_SS вне форума Ответить с цитированием
Старый 27.05.2014, 21:10   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

OnChange естественно
eval вне форума Ответить с цитированием
Старый 27.05.2014, 21:32   #5
Oleg_SS
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 75
По умолчанию

вы меня не поняли
как раз OnChange мне и надо обработать, но только так, что бы это событие срабатывало только тогда, когда пользователь меняет что-то
как это сделать?
Oleg_SS вне форума Ответить с цитированием
Старый 27.05.2014, 21:39   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

см. пост #2
eval вне форума Ответить с цитированием
Старый 27.05.2014, 21:43   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну все ж просто

Код:
...
self.ListView1.OnChange  := nil;
//тут (ан)чекаем чекбокс(ы)
self.ListView1.OnChange  := self.ListView1_OnChange;
...

Последний раз редактировалось eval; 27.05.2014 в 21:54.
eval вне форума Ответить с цитированием
Старый 27.05.2014, 22:30   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Лови WM_NOTIFY родителя ListView с уведомлением LVN_ITEMCHANGED и в структуре PNMListView анализируй 14-ый справа бит полей uNewState и uOldState
Код:
procedure TForm1.WMNotify(var Message: TWMNotify);
var p: PNMListView;
begin
  p:=PNMListView(Message.NMHdr);
  if (p^.hdr.hwndFrom=ListView1.Handle) and (p^.hdr.code=LVN_ITEMCHANGED) and
     ((p^.uNewState and $2000)<>(p^.uOldState and $2000)) then
    Label1.Caption:=ListView1.Items.Item[p^.iItem].Caption+' Checked='+IntToStr(Ord(ListView1.Items.Item[p^.iItem].Checked));
  inherited;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.05.2014, 04:40   #9
Oleg_SS
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Лови WM_NOTIFY родителя ListView с уведомлением LVN_ITEMCHANGED и в структуре PNMListView анализируй 14-ый справа бит полей uNewState и uOldState
Это сложно для моего понимания.
Не знаю как это описать в форме.
Ругается на var p: PNMListView;
и наверное еще где-нибудь надо что то указать?
как прикрутить к форме это событие?

Последний раз редактировалось Oleg_SS; 28.05.2014 в 04:45.
Oleg_SS вне форума Ответить с цитированием
Старый 28.05.2014, 04:43   #10
Oleg_SS
Пользователь
 
Регистрация: 02.04.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
ну все ж просто

Код:
...
self.ListView1.OnChange  := nil;
//тут (ан)чекаем чекбокс(ы)
self.ListView1.OnChange  := self.ListView1_OnChange;
...
Да про это я не подумал. Практически получилось. Вот только onChange вызывается даже тогда, когда просто выбираем строку не изменяя ее.
Это глюк самого delphi или это надо как то по особому обрабатывать?
Oleg_SS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается изменить св-во Text у Combobox из события OnSelect или OnChange leklerk Общие вопросы Delphi 9 27.01.2013 12:00
Использование события OnChange ComboBox Lyubimov Помощь студентам 2 19.04.2011 15:46
Обработка события Lena220 Microsoft Office Access 2 22.11.2010 11:48
Как создать в listbox события OnChange и OnChanging (Delphi 6)? AlexSoft777 Компоненты Delphi 3 22.10.2010 01:54