Главная страница
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.07 c
15-1178437370
iZEN
2007-05-06 11:42
2007.06.03
Microsoft признает провал Windows Vista


2-1178957175
GDB
2007-05-12 12:06
2007.06.03
Firebird


5-1154951820
Vaitek__
2006-08-07 15:57
2007.06.03
Храние ресурсов в компоненте


2-1179315922
thvfrjd
2007-05-16 15:45
2007.06.03
Отчет QuickReport


2-1179379997
Alkinoos
2007-05-17 09:33
2007.06.03
MDI окна