![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет. У меня есть editbox большого размера, в который Я пытаюсь считать текстовый файл. Считываю с помощью ReadFile(). С файлом .txt проблем нет, а вот когда хочу считать файл в формате .doc то тут получаются каракули, причем их совсем мало (явно не весь файл). Подскажите, может есть какая-нибудь особенность считывания из .doc.
P.S: Да и еще подскажите как мне считать текст так, чтобы его форматирование сохранилось, и как сделать чтобы после считывания в editbox с текстом НЕльзя было работать (нельзя было копировать, выделять и т.д, т.е полностью заблокировать). Спасибо! |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
А та пробовал открывать док файл блокнотом? Что там пишет? Это сообщение отредактировал(а) Andrey44 - 1.4.2009, 14:18 -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Andrey44, да такая же фигня, тока тут намного больше каракулей чем у меня когда считываю (странно почему). Ну вообщем Я так понял что это не ReadFile() - ом делается? Подскажи пожалуйста как мне быть? Все файлы в txt переименовывать и только тогда считывать?
(хотя нет одна фигня же)P.S: кстати объясни пожалуйста почему когда блокнотом открываешь каракули вылезают. Кодировку не поддерживает вордовскую? Это сообщение отредактировал(а) yngwie19 - 1.4.2009, 14:32 |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
Потому-что у док файла свой формат, и просто блокнотом его не прочитать. Для работы с док файлом есть какие-то свои интерфейсы. Не могу сказать какие. Или ищи формат док файла. -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Потому что файл .doc бинарный (кроме текста находится ещё и другая информация - форматирование текста, рисунки и др.), и в блокноте, перед загрузкой файла в edit, в файле удаляются нулевые символы - поэтому файл загружается полностью. Как насчёт RTF-формата? Его можно загрузить в RichEdit. Это сообщение отредактировал(а) 586 - 1.4.2009, 15:03 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
586, есть примерчик?
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Вместо Edit создаётся RichEdit - загружается библиотека с RichEdit'ом riched20.dll (если она загружена, то повторно загружать не нужно
Файл считывается в память, а потом загружается в RichEdit с помощью SetWindowTextA (также, как и в Edit).
Если текстовый документ начинается со слова "{\rtf" или "{urtf", то он парсится как RTF документ, иначе, просто открывается, как текстовый документ в Edit. Это сообщение отредактировал(а) 586 - 1.4.2009, 15:56 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
586, разве SetWindowText установит рич-текст?
для этого же существует EM_STREAMIN/EM_STREAMOUT Добавлено через 3 минуты и 44 секунды SetWindowText не пробовал, но EM_STREAMIN работает точно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
В билдере у меня получилось... Но если нужно будут получить обратно RTF код, то при вызове GetWindowText будет возвращён обычный текст, без RTF кодов, и тогда уже не обойтись без EM_STREAMOUT.
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
проверил,
это работает только в RichEdit'е самой первой версии(еще без юникод-поддержки): RICHEDIT_CLASS10A{"RICHEDIT"} последующие версии такой доступ уже не поддерживают версии RichEdit'ов (не CE): 1.0 Riched32.dll - RICHEDIT_CLASS10A{"RICHEDIT"} 2.0 Riched20.dll - RICHEDIT_CLASS{"RichEdit20A","RichEdit20W"} 3.0 Riched20.dll - RICHEDIT_CLASS{"RichEdit20A","RichEdit20W"} 4.1(и выше) Msftedit.dll - MSFTEDIT_CLASS{"RICHEDIT50A","RICHEDIT50W"} -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Ребят а при использовании RichEdit форматирование текста сохранится? Я имею ввиду Размер заголовков, отступы и т.д ?
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Сохранится. Содержимое документа будет выглядеть как в WordPad. WordPad основан на RichEdit. Ещё, есть сообщение EM_SETTEXTEX, оно для RichEdit'ов. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Ребят и как сделать чтобы после считывания в Richedit с текстом НЕльзя было работать (нельзя было копировать, выделять и т.д, т.е полностью заблокировать). Спасибо
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
вот что он у меня выдает:
![]() а вот загружаемый файл: Это сообщение отредактировал(а) yngwie19 - 1.4.2009, 20:52 Присоединённый файл ( Кол-во скачиваний: 6 )
1.doc 215,00 Kb |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
стиль ES_READONLY или EnableWindow(hWndRichEdit, FALSE); RichEdit не моддерживает doc-файлы. Присоединённый файл ( Кол-во скачиваний: 6 )
test.PNG 52,60 Kb |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
||||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Это сообщение отредактировал(а) 586 - 1.4.2009, 23:58 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
586, Спасибо все работает. У меня vista и все ок. Тока 2 вопроса:
1) В чем главная ошибка в моем коде? 2) Как заблокировать Ctr + C ? |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
На снимке экрана видно, что грузится doc-файл в RichEdit. А так, вроде всё правильно. Итоговый вариант:
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
странный баг
оригинально, с ума они там чтоли посходили по моему, это ненадолго )) у меня все равно остается впечатление, что SetWindowText для RTF использовать не стоит тут просто ситуация такая выйдет, что файлы одного редактора будут парситься, а файлы другго - будут выноситься с исходным RTF-содержимым я пробовал только из википедии пример, который парсится корректно только в первой версии контрола, в Msftedit он уже не парсится Добавлено через 1 минуту и 8 секунд опередил ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
586,
1) Эту библиотеку использовать обязятельно? 2) Это обязятельно? 3) Кстати у этого класса "RichEdit50W" странное название, что значит 50 ? 4) Обязятельно перед каждым строковым литералом ставить _T ? 5) Кстати ищу на компе файл Msftedit.dll, и по ходу у меня его нет. Скажите откуда он загружается? Это сообщение отредактировал(а) yngwie19 - 2.4.2009, 20:17 |
|||
|
||||
| 586 |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Для RichEdit, в зависимости от версии, нужно загружать либо riched32.dll, либо riched20.dll либо Msftedit.dll. В этой библиотеке содержится оконная функция, которая реализует RichEdit.
Обязательно. Сишные строки должны завершаться нулевым символом. В загруженном файле нету нулевых символов, поэтому добавляем нули, чтобы небыло выхода за пределы массива.
50 - Это версия RichEdit Control'а. Означает версию 5.0. Буква 'W' означает, что это Юникод-версия RichEdit'а. Версии 50A (ANSI) нету.
Необязательно. Это нужно для того, чтобы проект можно было собрать и под Юникод и под ANSI. В не-Юникод проектах используются функции RegisterClassExA, CreateWindowExA и т.д., а в Юникод проектах RegisterClassExW, CreateWindowExW и т.д.
Выбери версию RichEdit'а помладше. Например, riched20.dll RichEdit20W Это сообщение отредактировал(а) 586 - 2.4.2009, 20:44 |
||||||||||||||
|
|||||||||||||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |