Форум: "KOL";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизOnEndEditLVItem Найти похожие ветки
← →
Sapersky (2006-10-17 19:54) [0]Кто-нибудь пробовал? У меня не работает.
Версия KOL, правда, старая, но в новых WndProcEndLabelEdit, вроде бы, не изменилась, значит и вести они себя должны так же.
Собственно почему не работает. Выходит из WndProcEndLabelEdit вот в этом месте:
if LVDisp.item.pszText = nil then Exit;
Если убрать проверку, событие срабатывает, но нельзя изменять редактируемый текст. Кстати, вообще не очень понятно, как его изменять, если это PChar. Сколько там памяти выделено - неизвестно, можно, конечно, понадеяться что MAX_PATH...
← →
Vladimir Kladov (2006-10-18 18:49) [1]Посмотрел я, все нормально работает. Вы опцию-то liustview поставьте, чтобы он редактировать разрешал. Пример обработчика:
function TForm1.LV1EndEditLVItem(Sender: PControl; Idx, Col: Integer;
NewText: PChar): Boolean;
begin
if NewText = "z" then
begin
Result := FALSE;
Sender.LVItems[ Idx, 0 ] := "zzzzzzzz";
end
else
begin
Result := TRUE;
end;
end;
← →
Sapersky (2006-10-18 19:31) [2]Да, работает. Я проверял плохо - просто включал/выключал редактирование, не изменяя текст. Шибко умный ListView считал, что в этом случае текст мне не нужен и выдавал nil.
Имеется ещё одна проблема - нужно изменить текст непосредственно перед редактированием. Сообщение поймать получается (LVN_BEGINLABELEDIT), но текста оно не даёт (опять-таки LVDisp.item.pszText = nil). LVItems дёргать бесполезно, на текст в редакторе оно не влияет.
← →
Vladimir Kladov (2006-10-18 20:43) [3]это тогда OnLVData нужно хитро обрабатывать.
← →
Sapersky (2006-10-19 17:47) [4]Пробовал OnLVData (про lvoOwnerData помню) - похоже, что оно на текст в редакторе не влияет.
Сделал через LVM_GETEDITCONTROL и WM_SETTEXT этому контролу в LVN_BEGINLABELEDIT.
Кстати, в KOLBook от 29.09.06 по OnEndEditLVItem написано: "событие срабатывает, когда завершено редактирование текста элемента пользователем, по любой причине (редактирование отменено или завершено)". У меня, повторюсь, срабатывает только при завершении редактирования с изменением текста.
Ещё, раз уж речь зашла о KOLBook, там есть очепятка в главе про таймеры, относительно того, сколько срабатываний в секунду даёт интервал в 50 миллисекунд :)
← →
Vladimir Kladov (2006-10-20 18:53) [5]Так на escape и не должно срабатывать. Проверьте в VCL, та тоже так. И вовсе не потому что я захотел сделать как в VCL. Просто система не посылает нотификацию LVN_ENDLABELEDIT(W).
Не понял, что за владельцы меню, в другой ветке меня спрашивали. Куда смотреть, что там случилось?
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.061 c