Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
1-1176116441
AbrosimovA
2007-04-09 15:00
2007.06.03
Какую директиву использовать


8-1157826089
Voper
2006-09-09 22:21
2007.06.03
Сохранение картинок в 1 файл


2-1179092164
!aLeXa!
2007-05-14 01:36
2007.06.03
Метод главных компонент


1-1175692451
Damager
2007-04-04 17:14
2007.06.03
TJvCheckTreeView


15-1178300863
vasya123123
2007-05-04 21:47
2007.06.03
Свой инсталлятор / installer