CRichEdit и разрыв страницы?
От: kondrik  
Дата: 11.06.13 17:42
Оценка:
Как в свой контрол RichEdit добавить разрыв страницы?
Использую версию RICHED20.DLL версии 7.
.
Re: CRichEdit и разрыв страницы?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 13.06.13 08:13
Оценка:
Здравствуйте, kondrik, Вы писали:

K>Как в свой контрол RichEdit добавить разрыв страницы?

K>Использую версию RICHED20.DLL версии 7.
EM_SETPARAFORMAT + PARAMFORMAT2+PFM_PAGEBREAKBEFORE

Но не факт, что будет в конкретной версии RichEdit реализована поддержка разрыва. А вообще там еще та свистопляска с версиями RichEdit. Всякие фишечки для RichEdit можно покопать в блоге у Мюррея, правда последнее время он малехо запил не пишет, и последние статьи больше про MathML были, но в предыдущих много интересного по RichEdit (таблицы, всякие фокесы про вставку рисунков через COM и еще много чего).
Aml Pages Home
Re[2]: CRichEdit и разрыв страницы?
От: kondrik  
Дата: 17.06.13 08:37
Оценка:
Здравствуйте, 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;
}


Ваш совет возьму на заметку для дальнешей модификации своего контрола
.
Re[3]: CRichEdit и разрыв страницы?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 24.06.13 10:32
Оценка:
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 что ли — но точно на память не помню). И соответственно выводить результирующий файл можем тоже в разной кодировке.

Но соответственно, стоит помнить что такое последовательное складывание РТФа в контрол запросто может приводить к неслабому оверхеду по использованию памяти. Конкретное решение я бы выбирал от параметров задачи — большие ли файлы, нужно ли поддерживать разные кодировки и.т.д.
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.