Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› загадочный глюк с RichEdit
Посл.ответ Сообщение

Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 декабря 2006 23:00
· Личное сообщение · #1

Добрый день!

В своей программе я использую RichEdit (от 2.0, в зависимости от версии установленного в системе файла Riched20.dll), обращаясь к нему через интерфейсы TOM (Text Object Model). При этом обнаружился следующий глюк: метод SetName интерфейса ITextFont работает некорректно - шрифт Times New Roman не выставляется. Сохраняю содержимое RichEdit'а в RTF-файле посредством посыла ему сообщения EM_STREAMOUT. При этом сторонние программы, использующие RichEdit, отображают текст некорректно, а MS Word корректно.
Обнаружив это обстоятельство, стал пробовать заменить файл Riched20.dll. С файлом от Windows 98 проблемы нет, но в нем отсутствуют те возможности, которые есть в аналогичном файле от Windows XP. Со всеми остальными версиями этой библиотеки та же проблема.
Более того, в штатном WordPad'е при создании нового документ и выборе шрифта Times New Roman набиваемый текст выглядит, как MS Sans Serif!
Выяснил в MSDN, что схожая проблема описана в KB884047, однако хот-фикс по этой теме удалось найти только для английской XP (KB884047-x86-ENU.exe), а у меня она русская.
В этой связи просьба, если кто-либо сталкивался с подобной ситуацией, поделиться опытом ее решения. Или просто поделиться хотфиксом (ориентировочно он должен будет войти в XP SP3) или даже готовым пропатченным файлом Riched20.dll (или Msftedit.dll) или этими же файлами от русской Vista (может, там пропатчено).



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 22 декабря 2006 23:19
· Личное сообщение · #2

Шрифт Times New Roman устанавливается по умолчанию, и вообще можно пофиксить этот баг руководстуясь лишь статьями Криса.



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 декабря 2006 23:53
· Личное сообщение · #3

а можно ссылку? или хотя бы примерное название статьи?



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 23 декабря 2006 00:16
· Личное сообщение · #4

Да у него таких статей дофига.... есть старый файл без баги, есть новый с багой. почитай подшивку ксакепа за последний год



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 декабря 2006 00:42 · Поправил: Wolfgang
· Личное сообщение · #5

Дело в том, что не хотелось бы править Riched20.dll, если уже существует исправленный.
Или ты не это имеешь в виду?

P.s. Times Nwe Roman - частный случай



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 23 декабря 2006 00:53
· Личное сообщение · #6

Wolfgang пишет:
Более того, в штатном WordPad'е при создании нового документ и выборе шрифта Times New Roman набиваемый текст выглядит, как MS Sans Serif!

Хм…
Сейчас попробовал все нормально работает, класс RICHEDIT50W следы ведут в mfc42u.dll вернее подвешенная PROC находиться там - ИМХО.
Может эта PROC и исправляет этот баг, но не факт что поможет! Смотреть самому влом…
Так как ошибка в твоем коде! Давай сделаем так, ты скачай урок 34 Iczelion'a на русском!
Запусти IczEdit.exe из архива напиши в WordPad в разных шрифтах слова скопируй и вставь в RichEdit20A (IczEdit.exe), у меня разные шрифты и размеры и все работает нормально – ИМХО

P. S.
XP SP2

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 23 декабря 2006 01:05 · Поправил: back_analys
· Личное сообщение · #7

Да, именно это, распространяй патченный Riched20.dll вместе с прогой... если она серьезная....



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 декабря 2006 01:08
· Личное сообщение · #8

Так как ошибка в твоем коде! Давай сделаем так, ты скачай урок 34 Iczelion'a на русском!
тогда почему с Riched20.dll от Win98 все нормаьлно?
Давай сделаем так, ты скачай урок 34 Iczelion'a на русском!
А там есть что-либо про TOM? EM_SETCHARFORMAT работает нормально, но я не могу его использовать, потому что в моем случае нельзя трогать выделение текста.
Могу предоставить файл, который Ричедит отображает одним шрифтом, а Ворд - другим



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 декабря 2006 01:09
· Личное сообщение · #9

back_analys
я патченный Riched20.dll и прошу



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 23 декабря 2006 01:13
· Личное сообщение · #10

есть старый файл без баги, есть новый с багой. почитай подшивку ксакепа за последний год, там есть статьи мышъ'а



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 декабря 2006 01:30
· Личное сообщение · #11

back_analys
Поискал, не нашел ничего. Кстати, файлы совершенно разные, хоть и содержат одинаковый функцинал.

В аттаче пример файла, криво отображаемого ричедитом, если интересно

XP SP2 ru

6078_23.12.2006_CRACKLAB.rU.tgz - test.rtf



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 23 декабря 2006 01:42
· Личное сообщение · #12

аттача не вижу



Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 декабря 2006 02:02
· Личное сообщение · #13

http://exelab.ru/f/files/6078_23.12.2006_CRACKLAB.rU.tgz



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 23 декабря 2006 02:12
· Личное сообщение · #14

Может забыл установить charset???



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 23 декабря 2006 02:20
· Личное сообщение · #15

Wolfgang
Исследуемые мной проги, которые продают за деньги, не исползают это EM_STREAMOUT/EM_STREAMIN, потому что полно ошибок, забегая вперед, скажу, что следующий баг тебя ждет такой, при открытии файла больше 1mb будешь очень долго ждать ;)
Обычно создается свой класс, помещается в свою библиотеку вся обработка сообщений и у каждой программы своя такая библиотека. (Вот так и патчат профи баги из Riched20.dll)
Для примера чтобы понятнее было, класс RICHEDIT находится в riched32.dll, но юзается Riched20.dll
Вместо EM_STREAMOUT/EM_STREAMIN используют связку CreateFileMapping(W) и т. д.
Даже если ты найдешь патченный Riched20.dll не факт что тебе поможет!
Возьми CodeHi.dll из пакета WinAsm Studio 5.1.3.0 там и описание есть всех сообщений, какие параметры нужно передавать и т. д.
Это тебе пригодиться, если ты собираешься серьезное что-то написать!?

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 декабря 2006 21:15
· Личное сообщение · #16

back_analys
А как средствами интерфейса ITextFont выставить charset?
Demon666
RichEdit 2.0 находится именно в Riched20.dll.
А EM_STREAMOUT и не создает никаких файлов, просто начинает вызывать определенную мной колбэк-функцию, передавая ей данные...



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 24 декабря 2006 23:48
· Личное сообщение · #17

Wolfgang пишет:
А EM_STREAMOUT и не создает никаких файлов


Wolfgang пишет:
Сохраняю содержимое RichEdit'а в RTF-файле посредством посыла ему сообщения EM_STREAMOUT.

LOL! Читай внимательнее стоя и вслух, что сам написал!!! Или объясняй конкретнее свои действия!?
Тем более почитай
The EM_STREAMOUT message causes a rich edit control to pass its contents to an application–defined EditStreamCallback callback function. The callback function can then write the stream of data to a file or any other location that it chooses. MSDN ©

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 декабря 2006 00:52
· Личное сообщение · #18

Сохраняю содержимое RichEdit'а в RTF-файле посредством посыла ему сообщения EM_STREAMOUT. Да, но при этом МОЯ функция сохраняет содержимое в файл, это не очевидно?

Demon666
LOL! Читай внимательнее стоя и вслух, что сам написал!!! Или объясняй конкретнее свои действия!?

не можешь помочь, не замусоривай форум



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 25 декабря 2006 01:36
· Личное сообщение · #19

Wolfgang пишет:
сохраняет содержимое в файл, это не очевидно?

Дык, естественно я знаю, что ты будешь сохранять содержимое RichEdit'а после EM_STREAMOUT, но вижу, что ты не понял о чем я тебе писал.
Demon666 пишет:
связку CreateFileMapping(W) и т. д.

File Management Functions
CreateFileMapping
FlushViewOfFile
MapViewOfFile
MapViewOfFileEx
OpenFileMapping
UnmapViewOfFile
CloseHandle
ReadFile
VirtualAlloc
WriteFile… и т. д.
Это функции, которые надо использовать вместо EM_STREAMOUT/EM_STREAMIN, чтобы сохранять или записывать в файл из RichEdit'а данные напрямую.(без проблем!)
Wolfgang пишет:
не замусоривай форум

Но думаю тебе бесполезно объяснять, что-либо ты уперся и думаешь, что во всем прав и к советам прислушиваться не хочешь - ИМХО.

P. S.
Твой файл вернее то, что в нем отображается, синим у меня все OK! :P =)))

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 9.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 декабря 2006 01:48
· Личное сообщение · #20

я не уперся, просто проблема моя в другом - корректное отображение фонтов ричедитом, в частности -выставление чарсета.

Вот оно как... и как не используя EM_STREAMOUT получить содержимое ричедита в ртф-виде?

P.s. Созданная мной тема не подразумевает рассматривание или оценивание чьих-либо личных качеств.


 eXeL@B —› Программирование —› загадочный глюк с RichEdit
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати