Уроки Iczelion'а




Урок 34. Операции над текстом в RichEdit - часть 11


&nbsp 'Find Next' и 'Find Prev.' используют сообщение EM_FINDTEXTEX похожим образом.

&nbsp Теперь мы рассмотрим 'Go to Line'. Когда пользователь кликает по этому пункту меню, мы отображаем диалоговое окно.

&nbsp Когда пользователь набирает номер линии и нажимет кнопку 'Ok', мы начинаем операцию.

invoke GetDlgItemInt,hWnd,IDC_LINENO,NULL,FALSE mov LineNo,eax

&nbsp Получаем номер линии из edit control'а.

invoke SendMessage,hwndRichEdit,EM_GETLINECOUNT,0,0 .if eax>LineNo

&nbsp Получаем количество линий в контроле. Проверяем, не указал ли пользователь номер линии, который выходит за рамки допустимых значений.

invoke SendMessage,hwndRichEdit,EM_LINEINDEX,LineNo,0

&nbsp Если номер линии верен, мы передвигает курсор к первому символу в этой строке. Поэтому мы посылаем сообщение EM_LINEINDEX контролу richedit. Это сообщение возвращает индекс первого символа в заданной строке. Мы посылаем номер строки через wParam, а получаем индекс символа.

invoke SendMessage,hwndRichEdit,EM_SETSEL,eax,eax

&nbsp Чтобы установить текущее выделение, в этот раз мы используем EM_SETSEL, потому что индексы символов уже не находятся в структуре CHARRANGE, что сохраняет нам две инструкции (помещение этих индексов в структуру CHARRANGE).

invoke SetFocus,hwndRichEdit .endif

&nbsp Курсор не будет отображен, пока контрол RichEdit не получит фокус. Поэтому мы вызываем SetFocus.

[C] Iczelion, пер. Aquila.






Содержание  Назад  Вперед