Pascal 7 & Objects

       

Реакция на блок списка


-----------------------------------------------------------------

Методы модификации и запроса блока списка позволяют вам ус- тановить значения или определять в каждый конкретный момент сос- тояние блока списка. Однако, чтобы знать, что делает пользователь в данный момент с блоком списка, вам нужно реагировать на уведом- ляющие сообщения управляющего элемента.

Пользователь может выполнять с блоком списка только следую- щие действия: прокрутку списка, щелчок кнопкой "мыши" на элементе списка, двойной щелчок кнопкой "мыши" на элементе. Когда выполня- ется одно из этих действий, Windows посылает порождающему окну блока списка уведомляющее сообщение блока списка. Обычно метод реакции на уведомление для обработки сообщений для каждого управ- ляющего элемента порождающего объекта определяется в порождающем оконном объекте.

Каждое уведомляющее сообщение блока списка содержит в поле lParamHi параметра Msg код уведомления (константу lbn_), который специфицирует характер действия. Наиболее общие коды lbn перечис- лены в следующей таблице:

Информационные сообщения блока списка Таблица 12.2 +-------------+-------------------------------------------------+ | wParam | Действие | +-------------+-------------------------------------------------| |lbn_SelChange|Отдельным нажатием кнопки "мыши" был выбран| | |элемент. | +-------------+-------------------------------------------------| |lbn_DblClk |Элемент был выбран двойным щелчком кнопки "мыши".| +-------------+-------------------------------------------------| |lbn_SetFocus |Пользователь переместил фокус на блок списка| | |простым или двойным нажатием кнопки "мыши", либо| | |клавишей Tab. Предшествует lbn_SelChange. | +-------------+-------------------------------------------------+

Приведем пример метода порождающего окна по обработке сооб- щений блока списка:

procedure TLBoxWindow.HandleLB1Msg(var Msg: TMessage); var Idx: Integer; ItemText: string[10] begin if Msg.lParamHi=lbn_SelChange then begin Idx:=LB1^.GetSelIndex; if LB1^.GetStringLenIdx)<11 then begin LB1^.GetSelString(@ItemText, 10); MessageBox(HWindow, @ItemText, 'Вы выбрали:', mb_OK); end; end; else DefWndProc(Msg); end;

Пользователь делает выбор, если Msg.lParamHi совпадает с константой lbn_SelChange. Если это так, то берется длина выбран- ной строки, проверяется, что она помещается в строку из 10 симво- лов, и выбранная строка показывается в блоке сообщения.



Содержание раздела