Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
mrNeeL
1 / 1 / 0
Регистрация: 26.01.2010
Сообщений: 3
#1

Установка Карета в конец текста в RichEdit - Visual C++

27.01.2010, 16:58. Просмотров 1110. Ответов 0
Метки нет (Все метки)

Я пишу программу в VS2008, использую WINAPI.
Проблема собственно в том, что я не могу переставить карет в конец текста. Я использую RichEdit20 форму.
Приведу кусок кода для полной картины:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SETTEXTEX tmp_buf;
CHARFORMAT Fchar;
char  buf[1000];
LRESULT lR;
 
int СScreen::LogWnd (char *buff, int color)
{
    hRich=GetDlgItem(main_hwnd, IDC_RICHEDIT21);
    Fchar.cbSize = sizeof(CHARFORMAT);
    lR = SendMessage(hRich, EM_GETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&Fchar);
    Fchar.dwEffects = 0;
    Fchar.crTextColor = color;
    lR = SendMessage(hRich, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&Fchar);
    tmp_buf.flags = ST_SELECTION;
    tmp_buf.codepage = CP_ACP;
     lR = SendMessage(hRich, EM_SETTEXTEX, (WPARAM)&tmp_buf, (LPARAM)buff);
 return 0;
};
Так вот, для отправки текста я использую процедуру SendMessage
lR = SendMessage(hRich, EM_SETTEXTEX, (WPARAM)&tmp_buf, (LPARAM)buff);
с параметрами структуры (SETTEXTEX) tmp_buf :
tmp_buf.flags = ST_SELECTION;
tmp_buf.codepage = CP_ACP;
Любой редактированный текст засовуется отлично до того момента, пока карет находится в конце текста. Как только пользователь при помоши мышки или клавиш (вверх,в низ, в лево в право) не меняет положение корет(курсора), то после этого весь текст начинает вставляется с данной позиции.
Пробовал менять и комбенировать флаги ST_SELECTION, ST_KEEPUNDO, ST_DEFAULT в структуре tmp_buf, но ето не помогло,
Подскажите, какое-то решение, за ранее Благодарен .

Добавлено через 1 минуту
Народ что нету ни каких идей?
Подскажите хотябы направление в котором нужно копать.

Добавлено через 6 часов 18 минут
После дня проб и ошибок, я наконецто нашел болие менее нормальный способ установки карета в конец текста.
вот кусок кода который у меня получился :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
HWND hRich;
SETTEXTEX Tformat;
CHARFORMAT Tproperty;
GETTEXTLENGTHEX Tleng;
LRESULT lR;
 
 
int OnScreen (HWND hwnd , char *buff, int color)
{
    Tleng.codepage = CP_ACP; 
    lR = SendMessage(hwnd, EM_GETTEXTLENGTHEX , (WPARAM)&Tleng, 0); 
    SendMessage(hwnd, EM_SETSEL , (LPARAM)lR, (LPARAM)lR); 
 
    Tproperty.cbSize = sizeof(CHARFORMAT);
    lR = SendMessage(hwnd, EM_GETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&Tproperty);
    Tproperty.dwEffects = 0;
    Tproperty.crTextColor = color;
    lR = SendMessage(hwnd, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&Tproperty);
    
    Tformat.flags = ST_SELECTION;
    Tformat.codepage = CP_ACP;
    lR = SendMessage(hwnd, EM_SETTEXTEX, (WPARAM)&Tformat, (LPARAM)buff);
 
    return 0;
};
стока 5 объявляет структуру,
строка 11 выставляет флаг указывающий на вид текста (в данном случае ANSI)
строка 12 в переменную lR выводит длину текста, который находится в RichEdit
Строка 13 устанавливает каретку на последний симол
Примечание: сообщение "EM_SETSEL" вобще-то используется для выдиления текста, но более лучшего способа перевода корета я не придумал. Если ктото знает лучший способ, пишите, буду очень признателен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2010, 16:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Установка Карета в конец текста в RichEdit (Visual C++):

(MFC) Увеличить размер текста в RichEdit 2.0 - Visual C++
Здравствуйте! Есть вопрос: почему размер текста в RichEdit ограничен? И каким способом можно его увеличить? Например: вставляю 100000...

RichEdit добавление текста в начало и конец строки - C++ Builder
Здравствуйте. Требуется ввести в RichEdit произвольный текст, после нажатия на кнопку в начале и конце каждой строки добавляется...

В поле RichEdit удалить html-теги; при вставке в RichEdit замена старого текста на новый - Delphi
Всем привет! помогите пожалуйста с написание кода на две процедуры : - В поле RichEdit удалить html-теги; - при вставке в RichEdit...

RichEdit и конец строки - C++ Builder
Необходимо менять размеры шрифта RichEdit по кнопке, но из-за этого будет сбиваться признаки начала и конца строки. Что делать в этом...

RichEdit добавить в конец из потока - C++ Builder
Имеется RichEdit в котором уже есть инфа и имеется инфа в переменной потока Stream : TMemoryStream *Stream = new TMemoryStream ; ...

Установка отображения нужной строки RichEdit - C++ Builder
Программа выдает отчет в RichEdit. В RichEdit есть полоса прокрутки. Текст отчета большой из RichEdit отображает низ отчета. Смотрится не...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2010, 16:58
Привет! Вот еще темы с ответами:

RichEdit - выравнивание текста - C++ Builder
Прива, пацпны как можно запрограмировать кнопку виравнивание таекста "С лева"?

Форматирование текста в RichEdit - Delphi
Доброй ночи. Ради интереса решил написать маленькую программу, которая представляет из себя форму с компонентом TRichEdit, в котором весь...

Цвет текста в RichEdit - C++ Builder
Приветствую. Я добавляю в RichEdit построчно текст, используя код RichEdit1->Lines->Add(L"Hello!"). Требуется вставляемый текст делать...

RichEdit Отображение текста - C++ WinAPI
Добрый день. Имеется richedit. Сделал сабклассинг.В сообщении WM_PAINT имеется следующий код : RECT rect; int inumChar = 0,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.