Тема: Builder C++, Scroll в RichEdit

Що я хочу зробити

Мені потрібно в RichEdit вивести нумерацію рядків (так як в будь-якому спеціальному редакторі, наприклад Notepad++) звичайно потрібно щоб нумерацію неможна було змінювати користувачеві (щоб вона йому не заважала) я довго намагався розібратися з форматом RTF але так і не знайшов як заборонити змінювати певну ділянку тексту. Тому я вирішив зробити ще один RichEdit(такий самий за довжиною) в якому буде нумерація, а коли користувач буде прокручувати текс (в RichEdit1) то в RichEdit2 буде передаватися ця інформація

Я хочу змінити програмно позицію лінії прокрутки (Scroll vertical) в RichEdit я знайшов MSDN функцію SetScrollPos

SetScrollPos(RichEdit1->Handle,SB_VERT,1000,true);

вона змінює позицію лінії прокрутки але проблема в тому що змінюється лише позиція лінії прокрутки а сам текст як був на початку так там і залишився, в описі функції пише New applications should use the SetScrollInfo function. тому я спробував SetScrollInfo

tagSCROLLINFO *scroll = new tagSCROLLINFO;//створюємо tagSCROLLINFO
GetScrollInfo(RichEdit1->Handle,SB_VERT,scroll);//щоб не заповнювати беремо вже існуючі значення
scroll->nPos+=1000;//пробуємо прибавити до позиції
SetScrollInfo(RichEdit1->Handle,SB_VERT,scroll,true);//застосовуємо нові значення
/*для перевірки виведемо в RichEdit3*/
RichEdit3->Text =
"nMin = " + IntToStr(scroll->nMin)+
" | nMax = " + IntToStr(scroll->nMax)+
" | nPos = " + IntToStr(scroll->nPos)+
" | nTrackPos = " + IntToStr(scroll->nTrackPos);

тоді взагалі нічого не відбувається а RichEdit3(який я створив для перевірки введених результатів) пише якісь незрозумілі цифри, наприклад коли видалити scroll->nPos+=1000; а полоса прокрутки на початку то

nMin = 3 | nMax = 7864436 | nPos = 0 | nTrackPos = 0

ніби все логічно nPos =0 але коли в кінці

nMin = 1342516736 | nMax = 35316272 | nPos = 1343691392 | nTrackPos = 0

добре повертаємо полосу на початок

nMin = 7 | nMax = 3538995 | nPos = 3604528 | nTrackPos = 49

замість того щоб nPos = 0 воно дорівнює nPos = 3604528 це якесь сміття
є ще в RichEdit SelStart але це не те що мені потрібно SelStart відповідає за курсор тексту, я намагався знайти builderські функції для скрола але так і не найшов, як вирішити цю проблемо з скролом ?

2

Re: Builder C++, Scroll в RichEdit

/*для перевірки виведемо в RichEdit3*/

А де перевiрка щодо результату самої SetScrollInfo()?
Що вона поверне тобі після виконання?

Доречі спробуй послати річєдиту повідомлення якось так:

РічЄдіт.Perform(WM_VSCROLL,MakeWParam(SB_LINEDOWN,1),0);
Подякували: Betterthanyou1

3

Re: Builder C++, Scroll в RichEdit

Так з Perform мені вдалося створити потрібне повідомлення, дякую за допомогу

RichEdit1->Perform( WM_VSCROLL    ,MAKEWPARAM(SB_THUMBPOSITION,ToPos)   ,0);

SetScrollInfo - повертає правильні результати, але в scroll->nPos на них ніяк не реагує, тай мені вже SetScrollInfo нетреба я через Perform зробив що хотів