Здравствуйте, kondrik, Вы писали:
K>Как в свой контрол RichEdit добавить разрыв страницы?
K>Использую версию RICHED20.DLL версии 7.
EM_SETPARAFORMAT +
PARAMFORMAT2+PFM_PAGEBREAKBEFORE
Но не факт, что будет в конкретной версии RichEdit реализована поддержка разрыва. А вообще там еще та свистопляска с версиями RichEdit. Всякие фишечки для RichEdit можно покопать в
блоге у Мюррея, правда последнее время он малехо
запил не пишет, и последние статьи больше про MathML были, но в предыдущих много интересного по RichEdit (таблицы, всякие фокесы про вставку рисунков через COM и еще много чего).
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, kondrik, Вы писали:
K>>Как в свой контрол RichEdit добавить разрыв страницы?
K>>Использую версию RICHED20.DLL версии 7.
C>EM_SETPARAFORMAT + PARAMFORMAT2+PFM_PAGEBREAKBEFORE
C>Но не факт, что будет в конкретной версии RichEdit реализована поддержка разрыва. А вообще там еще та свистопляска с версиями RichEdit. Всякие фишечки для RichEdit можно покопать в блоге у Мюррея, правда последнее время он малехо запил не пишет, и последние статьи больше про MathML были, но в предыдущих много интересного по RichEdit (таблицы, всякие фокесы про вставку рисунков через COM и еще много чего).
Спасибо, Егор. Вы уже не раз меня выручаете в различных вопросах. Мне необходимо было в RichEdit'е склеить несколько RTF файлов (каждый файл необходимо вывести с новой страницы) и результат необходимо сохранить в RTF.
Я в принципе уже немного по другому решил этот вопрос с помощью калбека.
static DWORD CALLBACK
PageBreakCallBack(DWORD dwCookie, LPBYTE lpBuffer, LONG lSize, LONG *plWrite)
{
LONG c;
char szString[] = "{\\rtf\\page \\par}\0";
c = lSize;
c = strlen(szString);
if (*plWrite > c)
{
strncpy((char*)lpBuffer, szString, c+1);
*plWrite = c;
return 0;
}
else
return c;
}
Ваш совет возьму на заметку для дальнешей модификации своего контрола
K>Спасибо, Егор. Вы уже не раз меня выручаете в различных вопросах. Мне необходимо было в RichEdit'е склеить несколько RTF файлов (каждый файл необходимо вывести с новой страницы) и результат необходимо сохранить в RTF.
K>Я в принципе уже немного по другому решил этот вопрос с помощью калбека.
K>K>static DWORD CALLBACK
K>PageBreakCallBack(DWORD dwCookie, LPBYTE lpBuffer, LONG lSize, LONG *plWrite)
K>{
K> LONG c;
K> char szString[] = "{\\rtf\\page \\par}\0";
K> c = lSize;
K> c = strlen(szString);
K> if (*plWrite > c)
K> {
K> strncpy((char*)lpBuffer, szString, c+1);
K> *plWrite = c;
K> return 0;
K> }
K> else
K> return c;
K>}
K>
K>Ваш совет возьму на заметку для дальнешей модификации своего контрола
Приятный код. В принципе можно и так, и наверное эффективнее прямо в колбеке вставлять разрыв.
Но... Вообще-то RTF-формат подразумевает разные кодировки (ANSI, UTF8, UCS2). И соответственно, не уверен, что подобная вставка будет работать.
А вот если ручками класть RTF в контрол, то в перспективе все контроллируемо — от разпознавания формата входного RTF (там префикс в начале файла специфичный, не \rtf, а что-то вроде \rtfu что ли — но точно на память не помню). И соответственно выводить результирующий файл можем тоже в разной кодировке.
Но соответственно, стоит помнить что такое последовательное складывание РТФа в контрол запросто может приводить к неслабому оверхеду по использованию памяти. Конкретное решение я бы выбирал от параметров задачи — большие ли файлы, нужно ли поддерживать разные кодировки и.т.д.