Главная страница
    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
4-1211923401
Азат
2008-05-28 01:23
2009.06.28
работа с COM портом


15-1240433713
Юрий
2009-04-23 00:55
2009.06.28
С днем рождения ! 23 апреля 2009 четверг


2-1241089539
Franzy
2009-04-30 15:05
2009.06.28
Абсолютно необъяснимый глюк


3-1222785107
Kelly
2008-09-30 18:31
2009.06.28
выполнение sp с параметрами


15-1240167231
Pavia
2009-04-19 22:53
2009.06.28
Проблемы с wi-fi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский