Текущий архив: 2005.12.04;
Скачать: CL | DM;
Вниз
ListView и редактирование InPlace Найти похожие ветки
← →
Андрей Молчанов (2005-11-07 22:24) [0]Использую ListView со свойством ReadOnly = False. В программе используются горячие клавиши Del и Enter, перед редактированием их надо отключать, а после - включать. Выключаю по событию OnEditing, а вот когда включать? Событие OnEdited вызывается только если данные были изменены. Как бороться?
← →
gdaujk © (2005-11-08 06:23) [1]OnExit
← →
begin...end © (2005-11-08 08:49) [2]> Андрей Молчанов (07.11.05 22:24)
> Событие OnEdited вызывается только если данные были изменены.
Верно. По окончании редактирования генерируется уведомление LVN_ENDLABELEDIT. Оно содержит указатель на запись NMLVDISPINFO (это комбинация структур NMHDR и LVITEM), в котором находится информация об этом событии. Читаем в MSDN про LVN_ENDLABELEDIT:
If the user cancels editing, the pszText member of the LVITEM structure is NULL; otherwise, pszText is the address of the edited text.
Теперь смотрим в реализацию TCustomListView.CNNotify:with Message do
case NMHdr^.code of
...
LVN_ENDLABELEDIT:
with PLVDispInfo(NMHdr)^ do
if (item.pszText <> nil) and (item.IItem <> -1) then
Edit(item);
...
Т.е. если item.pszText = nil (а это означает, что пользователь отменил редактирование), до метода Edit дело не доходит (а именно в нём вызывается обработчик OnEdited). Поэтому события OnEdited и не происходит.
Вывод -- можно самостоятельно, без введения ограничений на содержимое item.pszText, обрабатывать уведомление LVN_ENDLABELEDIT (оно посылается в форме сообщения WM_NOTIFY родительскому окну ListView"а). Например, если parent"ом ListView"у приходится форма, то можно написать такой её обработчик:uses CommCtrl;
type
TMyForm = class(TForm)
MyListView: TListView;
private
procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;
end;
procedure TMyForm.WMNotify(var Message: TWMNotify);
begin
with Message.NMHdr^ do
if (hwndFrom = MyListView.Handle) and (code = LVN_ENDLABELEDIT) then
begin
// Ваши действия
end
else
inherited
end
← →
Андрей Молчанов (2005-11-08 18:16) [3]begin...end, большое спасибо тебе! Наверное, напишу потомка TListView.
Страницы: 1 вся ветка
Текущий архив: 2005.12.04;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.052 c