Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1242228171
GibiW
2009-05-13 19:22
2009.06.28
Функция "Сохранить как"


15-1240847736
Практик
2009-04-27 19:55
2009.06.28
Наука: Прикладной смысл


2-1242076140
***Evil***
2009-05-12 01:09
2009.06.28
OnClick на SubMenu не работает?


15-1240058056
Andy BitOff
2009-04-18 16:34
2009.06.28
Чем пахнут профессии...


15-1240556883
tesseract
2009-04-24 11:08
2009.06.28
Прогресс виртуализации





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский