У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.
PS
руками это делаться просто -))) встаем к notepad в конец текста и нажимаем shift держим и нажимаем home теперь мы видим что мне нужно -)))
А>Здравствуйте.
А>У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.
Сам по себе EM_SETSEL никуда ничего не прокручивает при любых стилях.
В MFC EM_SETSEL посылай чз SendMessage — тогда все путем.
Иначе , у CEdit::SetSel(DWORD,BOOL) второй параметр должен быть TRUE; Иначе вызовется EM_SCROLLCARET.
Здравствуйте Dutchman, Вы писали:
D> Иначе вызовется EM_SCROLLCARET.
Кто объяснит что такое EM_SCROLLCARET. Раза три прочитал 2е строчки описывающие этот мессадж и все равно ничего не понял
The EM_SCROLLCARET message scrolls the caret into view in an edit control. You can send this message to either an edit control or a rich edit control.
Куда скроллит, зачем скроллит, когда скроллит. Замечательно описание и WPARAM LPARAM
wParam
This parameter is reserved for future use. It should be set to zero.
lParam
This parameter is reserved for future use. It should be set to zero.
Похоже что это сообщение вообще сделано на будущее, а сейчас от него как от козла молока. Переубедите меня пожалуйста, если это не так.
Re[2]: EditBox
От:
Аноним
Дата:
25.03.02 02:21
Оценка:
Здравствуйте Dutchman, Вы писали:
D>Здравствуйте Аноним, Вы писали:
А>>Здравствуйте.
А>>У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.
D>Сам по себе EM_SETSEL никуда ничего не прокручивает при любых стилях. D>В MFC EM_SETSEL посылай чз SendMessage — тогда все путем. D>Иначе , у CEdit::SetSel(DWORD,BOOL) второй параметр должен быть TRUE; Иначе вызовется EM_SCROLLCARET.
Я бы тебе поверил если бы ты мне прислал рабочий пример (dm.russan@mail.ru), я бы с тобой и спорить не стал, а так , у меня все прокручивает и с TRUE и с FALSE . (только у меня WTL)
Здравствуйте Аноним, Вы писали: А>>>У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.
D>>Сам по себе EM_SETSEL никуда ничего не прокручивает при любых стилях. D>>В MFC EM_SETSEL посылай чз SendMessage — тогда все путем. D>>Иначе , у CEdit::SetSel(DWORD,BOOL) второй параметр должен быть TRUE; Иначе вызовется EM_SCROLLCARET.
А>Я бы тебе поверил если бы ты мне прислал рабочий пример (dm.russan@mail.ru), я бы с тобой и спорить не стал, а так , у меня все прокручивает и с TRUE и с FALSE . (только у меня WTL)
Так посмотри, что у тебя вызывается на самом деле. Я попробовал и на АПИ и на MFC. А примерчик нечего и высылать. Проверял с разными стилями AUTOSCROLL и без них.
m_edtInfo.SendMessage(EM_SETSEL,0,-1); // так ничего не прокручивает
m_edtInfo.SendMessage(EM_SCROLLCARET,0,0); // здесь заставит прокрутить
Re[4]: EditBox
От:
Аноним
Дата:
25.03.02 11:21
Оценка:
Здравствуйте Dutchman, Вы писали:
D>Здравствуйте Аноним, Вы писали: А>>>>У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.
D>>>Сам по себе EM_SETSEL никуда ничего не прокручивает при любых стилях. D>>>В MFC EM_SETSEL посылай чз SendMessage — тогда все путем. D>>>Иначе , у CEdit::SetSel(DWORD,BOOL) второй параметр должен быть TRUE; Иначе вызовется EM_SCROLLCARET.
А>>Я бы тебе поверил если бы ты мне прислал рабочий пример (dm.russan@mail.ru), я бы с тобой и спорить не стал, а так , у меня все прокручивает и с TRUE и с FALSE . (только у меня WTL)
D>Так посмотри, что у тебя вызывается на самом деле. Я попробовал и на АПИ и на MFC. А примерчик нечего и высылать. Проверял с разными стилями AUTOSCROLL и без них.
D>
D> m_edtInfo.SendMessage(EM_SETSEL,0,-1); // так ничего не прокручивает
D> m_edtInfo.SendMessage(EM_SCROLLCARET,0,0); // здесь заставит прокрутить
D>
Здравствуйте Dutchman, Вы писали:
D>Здравствуйте Аноним, Вы писали:
D>Блин,а я с Multiline проверял у себя. Ты б сказал.
D>А так действительно коряво. Можно тогда сабклассить и перехватывать все уведомления и вручную управлять всем этим делом. Но тож геморройно :(
Remarks
In a rich edit control, if the selection is not entirely contained in the first 64K, use the message EM_EXSETSEL.
If the nStart parameter is 0 and the nEnd parameter is -1, all the text in the edit control is selected. If nStart is -1, any current selection is removed
. The caret is placed at the end of the selection indicated by the greater of the two values nEnd and nStart.
Т.е. карета будет установлена что больше, nStart или nEnd . А вот будет ли, — это вопрос к
MS.