Как заставить EditBox прокручиваться вслед за вставкой?
От: bugpiper  
Дата: 14.09.07 10:14
Оценка:
Собственно, сабж. Под ставкой подразумевается вставляемый в него текст.
По умолчанию командой AddString текст вставляется в конец списка (каждый раз на новой строке). Подскажите пожалуйста, каким образом заставить многострочный EditBox прокручиваться? Заранее благодарю.
Re: Как заставить EditBox прокручиваться вслед за вставкой?
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 14.09.07 10:31
Оценка:
Здравствуйте, bugpiper, Вы писали:

B>По умолчанию командой AddString текст вставляется в конец списка (каждый раз на новой строке). Подскажите пожалуйста, каким образом заставить многострочный EditBox прокручиваться? Заранее благодарю.


Смотрите в сторону EM_SCROLL/EM_SCROLLCARET.
[ posted via RSDN@Home 1.2.0 alpha r746, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re[2]: Как заставить EditBox прокручиваться вслед за вставко
От: bugpiper  
Дата: 14.09.07 11:35
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Смотрите в сторону EM_SCROLL/EM_SCROLLCARET.


Сорри, хочу уточнить, ибо не так поняли.
При вставке текста, количество строк которого превышает высоту (в строках) EditBox-а, по умолчанию бегунок остаётся на месте. Вот, я мучаюсь, пытаясь найти решение, чтоб бегунок автоматически перескакивал в конец полосы прокрутки.
Помогите найти решение. Спасибо.
Re[3]: Как заставить EditBox прокручиваться вслед за вставко
От: Sashaka Россия  
Дата: 14.09.07 20:15
Оценка:
Здравствуйте, bugpiper, Вы писали:
B>Сорри, хочу уточнить, ибо не так поняли.
B>При вставке текста, количество строк которого превышает высоту (в строках) EditBox-а, по умолчанию бегунок остаётся на месте. Вот, я мучаюсь, пытаясь найти решение, чтоб бегунок автоматически перескакивал в конец полосы прокрутки.
B>Помогите найти решение. Спасибо.

1. создаете класс-наследник от CEdit, например CMyEdit.
2. используете его вместо того CEdit который вы использовали. Если вы получали CEdit через GetDlgItem, придется от этого отказаться и либо создать его самому через Create либо через DDX (класс-визард) создать переменную
3. в своем CMyEdit переопределяете виртуальную функцию (add virtual function):

LRESULT CMyEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    // TODO: Add your specialized code here and/or call the base class
    
    if (message == WM_PASTE)
    {
        LineScroll( GetLineCount() );
    }

    return CEdit::DefWindowProc(message, wParam, lParam);
}


типа работает
Re: Как заставить EditBox прокручиваться вслед за вставкой?
От: Аноним  
Дата: 17.09.07 10:37
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

Здравствуйте, bugpiper, Вы писали:

B>Собственно, сабж. Под ставкой подразумевается вставляемый в него текст.

B>По умолчанию командой AddString текст вставляется в конец списка (каждый раз на новой строке).
B>Подскажите пожалуйста, каким образом заставить многострочный EditBox прокручиваться? Заранее благодарю.

Вот моя функция:

//**************************************
//**  Добавить сообщение в протокол.  **
//**************************************
//* Параметр:                          *
//* MessageString-текстовое сообщение. *
//**************************************
//* Возврат: нет значений.             *
//**************************************
void CServArchiveDlg::AddMessageToLog(LPCSTR MessageString)
{
    int LineCount;            // количество строк в поле для результатов работы
//*****
    if(lstrlen(MessageString)==0)        // пустое сообщение
        return;
    //endif
    UpdateData();                // прочитать введенные значения
    if(!m_ReportBox.IsEmpty())        // протокол не пустой
        m_ReportBox += "\r\n";
    //endif
    m_ReportBox += MessageString;        // добавить сообщение в протокол
    UpdateData(FALSE);            // вывести значения в поля диалога
    CEdit* ReportEdit=(CEdit*)GetDlgItem(IDC_EDIT_REPORT);
    LineCount=ReportEdit->GetLineCount();
    ReportEdit->LineScroll(LineCount);
//*****
}

В h-файле надо:

    CString m_ReportBox;        // поле для результатов работы

и в DoDataExchange() надо:

    DDX_Text(pDX, IDC_EDIT_REPORT, m_ReportBox);
    DDV_MaxChars(pDX, m_ReportBox, 32000);

В файле ресурсов описан EditBox (EDITTEXT) с идентификатором IDC_EDIT_REPORT и со стилем ES_MULTILINE.

Желаю успехов,
Никита.
Re[3]: Как заставить EditBox прокручиваться вслед за вставко
От: Carc Россия http://www.amlpages.com/home.php
Дата: 22.09.07 00:54
Оценка:
"bugpiper" <69126@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:2657462@news.rsdn.ru...
> Здравствуйте, SchweinDeBurg, Вы писали:
>
> SDB>Смотрите в сторону EM_SCROLL/EM_SCROLLCARET.
>
> Сорри, хочу уточнить, ибо не так поняли.
> При вставке текста, количество строк которого превышает высоту (в строках) EditBox-а, по умолчанию бегунок остаётся на месте. Вот, я мучаюсь, пытаясь найти решение, чтоб бегунок автоматически перескакивал в конец полосы прокрутки.
> Помогите найти решение. Спасибо.
SendMessage(hwndEdit, EM_SETSEL,-1,0); это и каретка уйдет в конец кода
. + заморочки на старых RichEdit вроде версии 2.0 — это может привести к выделению ВСЕГО текста (в новых все в порядке)
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.