EditBox
От: Аноним  
Дата: 24.03.02 11:43
Оценка:
Здравствуйте.

У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.

PS

руками это делаться просто -))) встаем к notepad в конец текста и нажимаем shift держим и нажимаем home теперь мы видим что мне нужно -)))
Re: EditBox
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.03.02 13:58
Оценка:
Здравствуйте Аноним, Вы писали:


А>Здравствуйте.


А>У стандартного контрола Edit в windows есть сообщение EM_SETSEL которое выделяет текст, и ставит каретку в конец выделеного блока, притом что если длина текста привышает длину Edit контрола и у него выставлен стиль AUTOSCROLL, то текст скролиться, вопрос у меня такой мне нужно что бы текст выделялся , но каретка оставалась в начале выделеного блока.


Сам по себе EM_SETSEL никуда ничего не прокручивает при любых стилях.
В MFC EM_SETSEL посылай чз SendMessage — тогда все путем.
Иначе , у CEdit::SetSel(DWORD,BOOL) второй параметр должен быть TRUE; Иначе вызовется EM_SCROLLCARET.
Re[2]: EditBox
От: Sashko Россия http://www.dc.baika.ru/
Дата: 25.03.02 01:43
Оценка:
Здравствуйте 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)
Re[3]: EditBox
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.03.02 09:54
Оценка:
Здравствуйте Аноним, Вы писали:
А>>>У стандартного контрола 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>


http://russan.narod.ru/BaseDlg.exe

здесь пример запусти его у себя на компе, там нет вирусов, и скажи скролиться или нет , но я тебе не верю , или ты льжешь, или я дурак -))
Re[5]: EditBox
От: Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.03.02 12:11
Оценка:
Здравствуйте Аноним, Вы писали:

Блин,а я с Multiline проверял у себя. Ты б сказал.

А так действительно коряво. Можно тогда сабклассить и перехватывать все уведомления и вручную управлять всем этим делом. Но тож геморройно
Re[6]: EditBox
От: ua1zcl Россия www.alexklm.ru
Дата: 25.03.02 21:14
Оценка:
Здравствуйте 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.
Александр
Re: EditBox
От: ua1zcl Россия www.alexklm.ru
Дата: 25.03.02 22:02
Оценка:
Здравствуйте Аноним, Вы писали:


А>Здравствуйте.


Сказанное справедливо для Multiline Edit ящика. Для простого карета подаётся к конец выделения.

{
      HWND hwEd=GetDlgItem(hwnd,IDC_EDIT1020);
      PSTR pszText="IDC_EDIT1020";
      SetWindowText(hwEd,pszText);
      SendMessage(hwEd,EM_SETSEL,strlen(pszText),1);
      SetFocus(hwEd);
}
Александр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.