”Арсеналъ” предлагает новые инструменты
Первый взгляд
Алексей Роговцев
На прошлогодней выставке SofTool’97 компания “Арсеналъ” представила инструмент разработчика Lexicon Toolkit. Это набор динамических библиотек, позволяющих реализовать в любом приложении функции просмотра (или просмотра и редактирования) и печати документов. По словам представителей компании, этот инструмент предназначен в основном для разработки приложений или систем, в которых создаются или просматриваются комплекты документов и для которых использование существующих текстовых процессоров невозможно или нецелесообразно.
Предлагаемый инструмент содержит библиотеки функций, доступных из программ, написанных на языке Си и реализующих практически все возможности текстового процессора “Лексикон-97”. Эти библиотеки позволяют создавать программы просмотра и редактирования документов в форматах Word 6.0/7.0, RTF, Write, “Лексикон” для DOS и Windows, а также DOS- и Windows-текстов.
Библиотеки поставляются как в 16-разрядном (для Windows 3.x), так и в 32-разрядном (для Windows 95 и Windows NT) вариантах. Программный интерфейс библиотек повторяет идеологию интерфейса OLE2, поэтому вся работа в создаваемых приложениях происходит с использованием интерфейсов соответствующих объектов. Всего в библиотеке более 30 таких интерфейсов. Каждый из них соответствует определенному элементу документа (шрифту, абзацу, таблице и т. д.) и предоставляет в распоряжение разработчика определенные методы, с помощью которых можно изменять свойства элементов документа или получать информацию о нем.
Всего в библиотеку входит более 240 методов. Все они разделены на группы в соответствии с тем, к какому интерфейсу они относятся и какие функции выполняют, например:
- инициализация библиотеки и создание основных интерфейсов ILexDocEditor и ILexDocViewer. В эту же группу входят методы инициализации системы печати;
- интерфейс ILexDocViewer включает набор методов для загрузки, просмотра и печати документов в различных форматах. При создании программы просмотра документов вы получаете возможность просмотра документа в окне, его масштабирования, выделения фрагментов текста с помощью мыши и клавиш управления курсором, копирования выделенного фрагмента текста в буфер обмена и поиска в документе;
- интерфейс ILexDocEditor включает в себя методы интерфейса ILexDocViewer и методы редактирования текста. При редактировании текста вы можете изменить параметры шрифта или абзаца, вставить закладки, сноски или рисунки, создать таблицу.
Кроме динамических библиотек в состав Lexicon Toolkit входят наборы служебных файлов, руководство программиста, примеры готовых программ и проектов для их создания. Подразумевается, что примеры программ должны проиллюстрировать возможности Lexicon Toolkit, а файлы проектов - показать, как это делается в программе.
С помощью программ я смог просмотреть текстовые файлы, файлы в формате RTF и “родных” форматах “Лексикона”, а в редакторе - и внести изменения в них. А вот с файлами Word и Write случилась неприятность - кроме окна с сообщением No error occurred (“Ошибок нет”), я ничего не увидел. Что ошибок нет - это хорошо, но сам текст-то где?
Запустив редактор текстов, я увидел привычный интерфейс, чем-то похожий на интерфейс программы WordPad или редактора “Лексикон”: те же кнопки, почти те же пункты меню. В чем же разница? В деталях, конечно.
При работе с предложенным примером мне, например, не удалось в каком-либо параграфе задать новый шрифт или изменить параметры старого. Уж если я начал набирать текст прямым шрифтом, то поменять его на курсив или жирный я не мог - все мои попытки сделать это с помощью стандартных действий не приводили к желаемому результату. Приходилось действовать нестандартно (что напомнило известную поговорку про левую руку и правое ухо): выделять нужный фрагмент, выбирать пункт меню Format, в нем - Font и в первой закладке “Шрифт” менять параметры шрифта. При этом нужно было обязательно поправить и размер шрифта, так как он (размер) почему-то оказывался со знаком минус+
Кроме того, при изменении стиля параграфа надо быть очень осторожным: случайное попадание не на ту закладку приводит к нежелательным последствиям. Например, установив параметры отступа, я (интереса ради) заглянул на закладку “Обрамление”, вернулся обратно к “Отступам и интервалам” и нажал кнопку “Да”. В результате текст параграфа оказался заключенным в рамку, но я же этого не хотел! Было бы лучше, если бы на каждой закладке присутствовала кнопка “Применить” (Apply), с помощью которой можно было бы подтвердить выбор тех или иных параметров, но разработчики по каким-то причинам от использования этой кнопки отказались. И непонятно, почему в закладках по умолчанию выбираются параметры не текущего параграфа или фрагмента, а совсем другие.
Но самое неприятное - программа “Редактор текста” дает возможность закрыть файл после всех внесенных в него изменений, даже не спрашивая, нужно ли их запомнить, и, естественно, не сохраняет их.
Возможно, что некоторые из этих недостатков были вызваны ошибками в программировании, поэтому я решил посмотреть, как эти функции реализованы в исходных текстах примеров.
В состав Lexicon Toolkit входят файлы проектов для Microsoft Visual C++ 5.0 и Borland C++ 5.02. Поскольку у меня установлен Visual C++, то я проверял примеры именно для него. При компиляции проектов никаких проблем не возникало, но вот просмотреть классы, входящие в проект, мне не удалось. Причем я не смог этого сделать даже с помощью ClassWizard. Описание класса CLexDoc просто не формировалось, а для некоторых других классов (CLexLookApp или CMainFrame) выдавались сообщения об ошибках. Это объяснялось тем, что разработчики в исходных файлах с помощью операторов условной трансляции объединили фрагменты кода как редактора текста, так и программы просмотра файлов. Такой подход, хотя и сокращает число файлов, но, к сожалению, не дает возможности полностью разобраться в том, как работает приложение, созданное с помощью того или иного проекта.
Хочу отметить, что у меня в распоряжении была одна из последних, но не окончательная версия. Поэтому будем надеяться на то, что к выходу готового продукта все те недостатки, которые я в ней заметил, будут исправлены.
И еще - не считайте эту статью отчетом о недостатках Lexicon Toolkit. Сама идея дать в руки разработчику готовый инструмент для создания приложений, обладающих возможностью просмотра или редактирования текстов, безусловно, заслуживает внимания и реализации. Тем более, что при подобном подходе программисту не придется все делать самому с помощью стандартных функций и классов (например, Visual C++) - ему нужно лишь выбрать необходимые функции из библиотеки. Преимущества этого способа очевидны, их даже не нужно обсуждать. Хочется только, чтобы все декларированные возможности Lexicon Toolkit были реализованы в окончательной версии.
Телефон компании “Арсеналъ”: (095) 974-7989, Web-адрес: www.it.ru/arsenal.
P. S. В описании библиотеки Lexicon Toolkit, которую мне любезно предоставили в компании “Арсеналъ”, говорится, в частности, о том, что “+модуль RichEdit Control из библиотеки MFC практически невозможно использовать, если разработчику нужен сколь-нибудьсерьезный модуль редактирования текста”. Мне кажется, это несколько поспешное заявление, и пример программы WordPad, поставляемой с Microsoft Visual C++ 5.0, свидетельствует об боратном.