Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться в формате RTF 
:(
    Опции темы
tuborg
Дата 23.8.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.8.2007

Репутация: нет
Всего: нет



Помогите пожалуйста с форматом RTF.
На диалоге есть CRichEditCtrl. Туда читаю по-строчно файл (в hex'е). Строка, к примеру, 48 штук WORD значений.
Пытаюсь каждую строку выразить табличной строкой (48 колонок).

Вот мой код:

Код

void CWin_CCHexPad::AddValueFrame(BYTE word_size, BYTE val_len, DWORD* frame_string){
        // val_len      - количество значений в строке и одновременно длина массива frame_string
        // word_size    - размер в байтах одного значения выводимого в одну колонку
        // frame_string - массив прочитанных значений из файла которые надо вывести в табличную строку
    
        char tmp[1024];
    CString val;    // результирующая строка выводимая в CRichEdiCtrl
    DWORD i, value;

        // Начало RTF строки
    val="{\\rtf1{\\fonttbl{\\f0\\fmodern\\fprq1\\fs20{\\*\\fname Courier New;}Courier New CYR;}}{\\colortbl;\\red0\\blue0\\green0;\\red255\\blue255\\green255;\\red128\\green128\\blue255;}";
    val+="\\trgaph10\\intbl\\trautofit1";
    
        for(i=0;i<val_len;i++){                      // val_len к примеру равен 48 (количество значений в строке)
        itoa(600*(i+1), tmp,10);             // ширина ячейки 
        val=val+"\\cellx"+tmp+" ";           // для i=0, "..\\cellx600 "
        val+="\\f0\\fg1\\highlight2 ";       //цвет, подсветка и шрифт выводимого значения в колонку
        sprintf(tmp,"%.4X",frame_string[i]); // Преобразуем i-тое значение из массива в строковый hex-вид
        val=val+tmp+" \\cell";               // закрываем ячейку

    }
    val+="\\row\\par}";                          // закрываем строку
    mViewLimitText+=val.GetLength();
    mView.LimitText(mViewLimitText);             // увеличиваеm LimitText на размер сформированной строки
    

        EDITSTREAM es;                               // заполняем структуру для StreamIN CallBack-функции
        es.dwCookie = (DWORD)&val;
        es.pfnCallback = HexPadStreamInCallback; 

    mView.SetSel(-1,-1);                         // перед выводом помещаем курсор в конец (для режима добавления текста)
    mView.StreamIn(SF_RTF|SFF_SELECTION, es);
}




Что и где я пропустил в описании формата выводимой строки? Беда в том что таблица выводится следующим образом:
1) прорисовываются только 31 ячейка
2) вторая ячейка — пустая
3) все значения оставшиеся после прорисованной ячейки имеют неодинаковый отступ между собой... то плотнее стоят... то разряженее...

Прошу о помощи!  smile 
PM MAIL   Вверх
The Thing
Дата 24.8.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



попробуй почитать здесь:
описание формата RTF
http://www.codenet.ru/progr/formt/rtf1.php


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
tuborg
Дата 24.8.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.8.2007

Репутация: нет
Всего: нет



Я описание формата выучил наизусть. Выкачивал его в MSDN. И все мои пляски с бубном соотвесттвует официальному описанию стандарта... но результат получается всё равно не удовлетворительный
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.