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

Вниз

Фокус при скроллинге в ListViewСкроллинг   Найти похожие ветки 

 
Mishenka   (2009-05-06 16:04) [0]

Пишу компонент потомок от TListView. В нём в одном из столбцов при щелчке мышкой создаётся ComboBox, для выбора значений из списка. Соответственно при потере СоmboBox"ом фокуса, тобишь по событию OnExit он самоуничтожается. Всё хорошо, только почему то если после активизации ComboBox начать на скроллинг в ListView, то почему, то фокус на ComboBox остаётся, и соответственно он не уничтожается. Пытался обрабатывать сообщение начала скроллинга LVN_BEGINSCROLL, но оно возникает у формы, и непонятно как его отлавливать при написании самого компонента. Как можно решить данную проблему?


 
clickmaker ©   (2009-05-06 17:23) [1]

> как его отлавливать при написании самого компонента

procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;


 
Mishenka   (2009-05-07 09:24) [2]

Что-то ничего не работает :((

TMyListView = class(TListView)
private
 procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
..............

procedure TMyListView.CNNotify(var Message: TWMNotify);
begin
 if Assigned(InsertCombo) then InsertCombo.Free;
end;


После этого из компонента пропал весь текст.


 
Машенька   (2009-05-07 10:39) [3]

Неправильный Вы, Мишенька, ник выбрали для вопроса :)  вот назвались бы как я - сюда бы сразу набежало человек N-цать мастеров с правильными ответами :)

По поводу OnExit - посмотрите реализацию, иногда это событие может обрабатываться некорректно. Кстати - а кого вы парентом у комбобокса назначили ?
Да и уничтожать комбобокс каждый раз совсем необязательно - достаточно просто скрыть.


 
clickmaker ©   (2009-05-07 10:43) [4]

> [2] Mishenka   (07.05.09 09:24)

у TWMNotify есть NMHdr. Там сидит код извещения.
Рекомендую посмотреть реализацию этого обработчика у TListView

а вообще так
procedure TMyListView.CNNotify(var Message: TWMNotify);
begin
inherited CNNotify(Message);
if Message.NMHdr.code = LVN_BEGINSCROLL then
 ...
end;


 
Mishenka   (2009-05-07 15:18) [5]


> Машенька   (07.05.09 10:39) [3]
> Неправильный Вы, Мишенька, ник выбрали для вопроса :)

Интересная идея надо попробовать :)


> Кстати - а кого вы парентом у комбобокса назначили ?

MyListView


> clickmaker ©   (07.05.09 10:43) [4]

Придирается к строке inherited CNNotify(Message); пишет Undeclared identifier. Если оставить просто inherited, то всё компилируется? компонент заполняется нормально, но сообщение всё равно не обрабатывается.

Может я неправильно описал константу. Мне на королевстве посоветовали написать
const
LVN_BEGINSCROLL = LVN_FIRST - 80;

Потому что на MSDN значения найти не удалось. Там про это написано что-то непонятное:

LVN_BEGINSCROLL Notification
Notifies a list-view control"s parent window when a scrolling operation starts.

Syntax

LVN_BEGINSCROLL
   pnmLVScroll = (LPNMLVSCROLL) lParam;Parameters

pnmLVScroll
Pointer to a NMLVSCROLL structure that contains the horizontal or vertical position of where the scroll operation starts.
Return Value

Remarks

This notification message is sent in the form of a WM_NOTIFY message.

Note  To use this API, you must provide a manifest specifying Comclt32.dll version 6.0. For more information on manifests, see Enabling Visual Styles.
Notification Requirements

Minimum DLL Version None
Header commctrl.h
Minimum operating systems Windows XP



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1241885395
barbaroska
2009-05-09 20:09
2009.06.28
Обработчик окончания изменения размеров окна..


4-1212063238
dev
2008-05-29 16:13
2009.06.28
кнопка с иконкой


15-1240397060
12
2009-04-22 14:44
2009.06.28
Мулдашев Эрнст. Книги


15-1240580067
мученик
2009-04-24 17:34
2009.06.28
php и файлы..


15-1240512847
leonidus
2009-04-23 22:54
2009.06.28
Гибридный компонент для отображения текста