Страница 1 из 1

Таблицы в RTF полях.

Добавлено: 30 мар 2009, 21:13
kairat
В моем отчете присутствуют RTF поле, если в этом поле находится таблица, то внутри ячеек таблицы не производится
перенос на новую строку. В результате чего строки заползают на соседние столбы.
Как решить эту проблему?
С уважением
Кайрат

Таблицы в RTF полях.

Добавлено: 30 мар 2009, 21:43
Ivan
Здравствуйте.
kairat писал(а):В моем отчете присутствуют RTF поле, если в этом поле находится таблица, то внутри ячеек таблицы не производится перенос на новую строку. В результате чего строки заползают на соседние столбы.
Как решить эту проблему?
Обработка RTF-полей осуществляется с помощью системной dll - riched20.dll.
В WinXP по умолчанию установлена старая версия (3.0), которая некорректно отображает таблицы.
Поэтому Вам необходимо положить в папку программы свежую версию riched20.dll, которую вы можете взять из OfficeXP (4.0), Office2003 (5.0) или Office2007 (6.0, копировать вместе с MSPTLS.DLL).

Спасибо.

Таблицы в RTF полях.

Добавлено: 31 мар 2009, 00:43
kairat
я работаю в Windows Vista. Указанных файлов поэтому не нашел. Как поступить в этом случае?

Таблицы в RTF полях.

Добавлено: 31 мар 2009, 01:38
kairat
на моем компьютере riched.dll версии 3.1,
кстати msptls.dll вообще не найден.

относительно самого редактора RichTextBox. В программе мне необходимо кроме вывода отчетов производить редактирование рич-текста.
там я также столкнулся с этой проблемой со столбцами в таблице и решил ее с помощью следующего кода:

public class NewRichTextBox : RichTextBox
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr LoadLibrary(string libname);

private static IntPtr RichEditModuleHandle;
private const string RichEditDllV3 = "RichEd20.dll";
private const string RichEditDllV41 = "Msftedit.dll";

private const string RichEditClassV3A = "RichEdit20A";
private const string RichEditClassV3W = "RichEdit20W";
private const string RichEditClassV41W = "RICHEDIT50W";


protected override CreateParams CreateParams
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
get
{
if (RichEditModuleHandle == IntPtr.Zero)
{
//попытаемся загрузить реализацию RichEdit v4.1 (Msftedit.dll, WinXP + SP1)
RichEditModuleHandle = LoadLibrary(RichEditDllV41);
if (RichEditModuleHandle == IntPtr.Zero)
{
//нет такой dll, используем стандартную реализацию (Riched20.dll)
return base.CreateParams;
}
}

//используем более новую реализацию richedit'а
CreateParams theParams = base.CreateParams;
theParams.ClassName = RichEditClassV41W;
return theParams;
}
}
//....
}

может быть можно как-то использовать этот код внутри StimulSoft для решения этой проблемы.



Таблицы в RTF полях.

Добавлено: 31 мар 2009, 09:02
Ivan
Здравствуйте.
kairat писал(а):я работаю в Windows Vista. на моем компьютере riched.dll версии 3.1,
кстати msptls.dll вообще не найден.
MSPTLS.DLL устанавливается только вместе с Office2007 и нужен только если вы используете riched20.dll v6.0 из Office2007.
kairat писал(а):относительно самого редактора RichTextBox. В программе мне необходимо кроме вывода отчетов производить редактирование рич-текста.
там я также столкнулся с этой проблемой со столбцами в таблице и решил ее с помощью следующего кода: .....
может быть можно как-то использовать этот код внутри StimulSoft для решения этой проблемы.
Как показывает наша практика, в существующих базах данных хранятся rtf-объекты совершенно разных версий, от самых свежих до очень старых начала 90-х годов. Соответственно, эти объекты по-разному отображаются в разных версиях riched20.dll. И не всегда последние версии правильно отображают старые объекты (особенно это заметно на таблицах и нумерованных списках). Например, данные одного из наших клиентов отображаются правильно только в riched20.dll версии 5.0.

Поэтому было принято решение использовать ту библиотеку, которая находится в папке программы, а при ее отсутствии - системную библиотеку. Такой подход позволяет использовать в каждом приложении свою версию библиотеки. Также нет необходимости устанавливать MS-Office на каждую машину с приложением, достаточно вместе с библиотеками приложения копировать библиотеку riched20.dll.

Спасибо.

Таблицы в RTF полях.

Добавлено: 20 апр 2009, 12:17
kairat
Спасибо!
Сработало!

Таблицы в RTF полях.

Добавлено: 21 апр 2009, 11:31
Ivan
Здравствуйте.

Дайте нам знать, если понадобится ещё какая-нибудь помощь.

Спасибо.