Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
ВнизФокус при скроллинге в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c