Как сделать модуль в ворде
Перейти к содержимому

Как сделать модуль в ворде

  • автор:

Вставка математических знаков

В Word можно вставлять математические символы в уравнения и текст.

  1. На вкладке Вставка в группе Символы щелкните стрелку рядом с надписью Формула и выберите Вставить новую формулу. Меню
  2. В области Работа с формулами в группе Символы на вкладке Конструктор щелкните стрелку Еще. Стрелка
  3. Щелкните стрелку рядом с именем набора символов, а затем выберите набор символов, который вы хотите отобразить.
  4. Щелкните нужный символ.

Доступные наборы символов

В группе Символы в Word доступны указанные ниже наборы математических символов. Щелкнув стрелку Еще, выберите меню в верхней части списка символов, чтобы просмотреть группы знаков.

Набор символов

Определение

Основные математические символы

Часто используемые математические символы, такие как > и

Строчные буквы греческого алфавита

Прописные буквы греческого алфавита

Символы, которые напоминают буквы

Обычные бинарные операторы

Символы, обозначающие действия над двумя числами, например + и ÷

Обычные реляционные операторы

Символы, обозначающие отношение между двумя выражениями, такие как = и ~

Основные N-арные операторы

Операторы, осуществляющие действия над несколькими переменными

Сложные бинарные операторы

Дополнительные символы, обозначающие действия над двумя числами

Сложные реляционные операторы

Дополнительные символы, обозначающие отношение между двумя выражениями

Символы, указывающие направление

Отношения с отрицанием

Символы, обозначающие отрицание отношения

Математический шрифт Script

Математический шрифт Fraktur

Математический шрифт с двойным зачеркиванием

Часто используемые геометрические символы

Дополнительные сведения

Facebook LinkedIn Электронная почта

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Редактор формул

Excel 2016 Word 2016 Outlook 2016 PowerPoint 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Excel 2010 Word 2010 Outlook 2010 PowerPoint 2010 Excel 2007 Word 2007 Outlook 2007 PowerPoint 2007 Еще. Меньше

Редактор уравнений (Microsoft Equation 3,0) был добавлен в более ранние версии Word, но был удален из всех версий, указанных в общедоступном обновлении для 2018 января (ОБЩЕДОСТУПНОЕ обновление за), и заменен новым редактором уравнений.

Содержимое здесь описывает эту функцию для пользователей, которые установили это обновление.

Важно: Редактор уравнений 3,0 она была удалена из-за проблем с безопасностью в ее реализации. Пользователи, которые пытаются изменить формулу, созданную в редакторе уравнений 3,0, получат сообщение об ошибке «Microsoft Equation недоступен». Если вы установили шрифт «MT Extra» (если у вас нет шрифта, вы можете скачать его), вы увидите, что они будут отображаться в 3,0 редакторе уравнений в обычном режиме. Тем не менее, пользователи могут редактировать эти уравнения только путем загрузки программных средств Мастипе, предоставленных ВИРИС. Посмотрите, как мастипе классическое приложение для пользователей «редактор уравнений».

Вставка уравнения с помощью редактора формул

Вставка объекта

  1. На вкладке Вставка в группе Текст нажмите кнопку Объект.
  2. В диалоговом окне Объект откройте вкладку Создание.
  3. В поле Тип объекта выберите значение Microsoft Equation 3.0 и нажмите кнопку ОК.
  4. Измените уравнение с помощью символов, шаблонов и структур на панели инструментов Формула.
  5. Чтобы вернуться к документу, в Word, Excel или Outlook щелкните в любом месте документа. Чтобы вернуться к презентации в PowerPoint, в меню Файлредактора формул щелкните Выход и возврат к презентации.

Изменение уравнения с помощью редактора формул

Если вы использовали редактор формул для вставки уравнения, изменить его также можно с помощью этого редактора.

  1. Дважды щелкните уравнение, которое вы хотите изменить.
  2. Измените уравнение с помощью символов, шаблонов и структур на панели инструментов Формула.
  3. Чтобы вернуться к документу, в Word, Excel или Outlook щелкните в любом месте документа. Чтобы вернуться к презентации в PowerPoint, в меню Файлредактора формул щелкните Выход и возврат к презентации.

Вставка уравнения с помощью редактора формул

  1. На вкладке Вставка в группе Текст нажмите кнопку Объект.
  2. В диалоговом окне Объект откройте вкладку Создание.
  3. В поле Тип объекта выберите значение Microsoft Equation 3.0. Если редактор уравнений недоступен, возможно, потребуется установить его. Установка редактора формул
    1. Закройте все программы.
    2. На панели управления щелкните Установка и удаление программ.
    3. В поле Установленные программы выберите Microsoft Office 2007 и нажмите кнопку Изменить.
    4. На странице Изменение установленного пакета Microsoft Office 2007. выберите команду Добавить или удалить компонентыи нажмите кнопку продолжить.
    5. На вкладке Параметры установки щелкните индикатор развертывания (+) рядом с компонентом Средства Office.
    6. Щелкните стрелку рядом с названием Редактор формул и выберите Запускать с моего компьютера.
    7. Нажмите кнопку Продолжить.
    8. После того как вы закончите установку редактора формул, перезапустите приложение Office, которое вы используете.

    Изменение уравнения с помощью редактора формул

    Если вы использовали редактор формул для вставки уравнения, изменить его также можно с помощью этого редактора.

    1. Дважды щелкните уравнение, которое вы хотите изменить.
    2. Измените уравнение с помощью символов, шаблонов и структур на панели инструментов Формула.
    3. Чтобы вернуться к документу, в Word, Excel или Outlook щелкните в любом месте документа. Чтобы вернуться к презентации в PowerPoint, в меню Файлредактора формул щелкните Выход и возврат к презентации.

    Сведения о том, как использовать встроенные уравнения с помощью кнопки » уравнение «, можно узнать в статье написание формулы или формулы.

    Создание модулей расширения Microsoft Office

    В Office 2000 Microsoft ввела единый API для написания подключаемых модулей, расширяющих функциональные возможности пакета. Теперь стало возможно написание модулей, которые интегрируются с любым из приложений пакета. Разработанный набор интерфейсов упрощает создание расширений, позволяя программисту сконцентрироваться на функциональности, а не на изучении особенности каждого из приложений.

    Новая модель подключаемых модулей была названа COM Add-Ins. Как следует из названия, модуль расширения (Add-In) представляет собой COM-сервер, который специальным образом зарегистрирован в операционной системе. При загрузке приложение пакета Office загружает зарегистрированные расширения и вызывает их методы, позволяя установить обработчики на необходимые для их дальнейшего функционирования события. По завершении работы приложение Office извещает об этом модули расширения, позволяя последним корректно освобождать ресурсы.

    Общение модулей расширения с загрузившим их приложением происходит с помощью объектной модели Microsoft Office.

    Использование COM Add-In позволяет в корне изменить подходы к интеграции приложений с Microsoft Office. Например, вместо того чтобы вызывать Word для генерации отчетов, можно, наоборот, встроить в него меню со списком отчетов, а по выбору пользователем нужного отчета — запросить данные из базы данных и сформировать по ним документ.

    Интерфейс IDTExtensibility2

    Ключевым моментом в написании COM Add-In является реализация им интерфейса IDTExtensibility2, определенного следующим образом:

    type IDTExtensibility2 = interface(IDispatch) [''] procedure OnConnection(const HostApp: IDispatch; ext_ConnectMode: Integer; const AddInInst: IDispatch; var custom: PSafeArray); safecall; procedure OnDisconnection(ext_DisconnectMode: Integer; var custom: PSafeArray); safecall; procedure OnAddInsUpdate(var custom: PSafeArray); safecall; procedure OnStartupComplete(var custom: PSafeArray); safecall; procedure BeginShutdown(var custom: PSafeArray); safecall; end;

    После загрузки зарегистрированного в качестве расширения COM-сервера Office запрашивает у него этот интерфейс и, если он реализован, вызывает соответствующие методы, позволяя расширению реализовать свою функциональность.

    Рассмотрим методы IDTExtensibility2 подробнее:

    procedure OnConnection( const HostApp: IDispatch; ext_ConnectMode: Integer; const AddInInst: IDispatch; var custom: PSafeArray ); safecall;

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

    Параметры, передаваемые методу:

    Ссылка на интерфейс IDispatch вызывающего приложения. Если модуль расширения планирует в дальнейшем обращаться к его объектной модели, он должен сохранить ссылку в переменной

    Константа, информирующая о том, по какой причине производится загрузка:

    ext_cm_AfterStartup — модуль расширения загружен после загрузки хотя бы одного документа Office

    ext_cm_External — модуль расширения загружен другим компонентом

    ext_cm_Startup — модуль расширения загружен до загрузки хотя бы одного документа Office

    ext_cm_CommandLine — не используется в Office 2000

    Ссылка на интерфейс IDispatch загружаемого модуля расширения

    Здесь и далее — в Microsoft Office не используется

    procedure OnDisconnection(ext_DisconnectMode: Integer; var custom: PSafeArray); safecall;

    Вызывается при выгрузке модуля расширения. Этот метод должен произвести освобождение занятых ресурсов и прочие процедуры по завершении работы COM-сервера.

    Параметр ext_DisconnectMode информирует о причине выгрузки COM-сервера и может принимать следующие значения:

    ext_dm_HostShutdown – приложение завершает работу;

    ext_dm_UserClosed – модуль расширения выгружен пользователем.

    procedure OnAddInsUpdate(var custom: PSafeArray); safecall;

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

    procedure OnStartupComplete(var custom: PSafeArray); safecall;

    Вызывается по завершении инициализации приложения. Те модули расширений, которые должны предоставлять интерфейс пользователя при запуске приложения, должны делать это в методе OnStartupComplete, когда приложение полностью завершило этап инициализации.

    procedure BeginShutdown(var custom: PSafeArray); safecall;

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

    Внедрение в объектную модель Office

    Как было показано в предыдущем разделе, расширению доступен интерфейс IDispatch вызывающего приложения. Таким образом, оно может модифицировать интерфейс этого приложения, добавляя и удаляя необходимые интерфейсные элементы, создавать документы, вызывать различные методы для работы с ними. Однако, как правило, помимо этого необходимо обеспечить реакцию на различные события в вызывающем приложении (такие как изменение документа или нажатие кнопки на панели инструментов). Для этого Add-In должен установить обработчик соответствующего события. Прежде чем перейти к вопросам реализации, совершим небольшой экскурс по событиям COM и их обработчикам.

    COM Events

    Введение

    Если COM-объект хочет получать информацию о событиях в другом COM-объекте, то он должен уведомить об этом объект-источник событий, зарегистрировав себя в списке объектов-получателей уведомлений о событиях. Модель COM предоставляет для этого стандартный механизм.

    Объект-источник событий (в нашем случае – приложение Office, документ, кнопка на панели инструментов и т.п.) реализует интерфейс IConnectionPointContainer. Объект, нуждающийся в оповещении о событиях, должен запросить у источника этот интерфейс, затем при помощи метода FindConnectionPoint получить «точку подключения» – интерфейс IConnectionPoint и посредством вызова метода Advise зарегистрировать в этой точке подключения ссылку на свою реализацию интерфейса IDispatch, методы которого будут вызываться при возникновении тех или иных событий в источнике событий.

    Различные объекты Office определяют интерфейсы, которым должны соответствовать обработчики их событий. Так, например, для объекта CommandBarButton (кнопка на панели инструментов) определен интерфейс обработчика –

    type _CommandBarButtonEvents = dispinterface [''] procedure Click(const Ctrl: CommandBarButton; var CancelDefault: WordBool); dispid 1; end;

    Это означает, что при нажатии кнопки будет вызван метод Invoke зарегистрированного интерфейса-обработчика, с параметром DispId, равным 1. При этом параметр pDispIds будет содержать указатель на вариантный массив из двух параметров — соответственно типов CommandBarButton и WordBool.

    Базовый класс обработчика COM-событий

    Реализуем базовый класс обработчика COM-событий. Реализация взята из модуля SinkObject.pas, написанного Бином Ли (Binh Ly, http://www.techvanguards.com/).

    type TBaseSink = class(TObject, IUnknown, IDispatch) protected < методы IUnknown >function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; < методы IDispatch >function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; virtual; stdcall; function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; virtual; stdcall; function GetTypeInfoCount(out Count: Integer): HResult; virtual; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; virtual; stdcall;
    private FCookie: Integer; FCP: IConnectionPoint; FSinkIID: TGuid; FSource: IUnknown; function DoInvoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var dps: TDispParams; pDispIds: PDispIdList; VarResult, ExcepInfo, ArgErr: Pointer): HResult; virtual; abstract;
    public destructor Destroy; override; procedure Connect(pSource : IUnknown); procedure Disconnect; property SinkIID: TGuid read FSinkIID; property Source: IUnknown read FSource; end;

    Рассмотрим реализацию ключевых методов этого класса. Метод QueryInterface в дополнение к стандартной реализации проверяет, нет ли попыток запросить интерфейс обработчика событий. В этом случае возвращается IDispatch, позволяющий объекту-источнику событий вызвать метод Invoke:

    function TBaseSink.QueryInterface(const IID: TGUID; out Obj): HResult; begin Result := E_NOINTERFACE; Pointer(Obj) := NIL; if GetInterface(IID, Obj) then Result := S_OK; // если запрашивается интерфейс SinkIID - // возвращаем свой IDispatch if not Succeeded(Result) then if IsEqualIID(IID, FSinkIID) then if GetInterface(IDispatch, Obj) then Result := S_OK; end;

    Метод Connect регистрирует COM-объект в качестве обработчика событий COM-объекта pSource. Обращаю внимание, что переменная FCP объявлена как поле класса, поскольку он должен удерживать счетчик ссылок на «точку подключения», пока она используется. Если объявить FCP как локальную переменную — по завершении метода Connect произойдет неявный вызов FCP._Release, что приведет к неправильной работе.

    procedure TBaseSink.Connect(pSource: IUnknown); var pcpc: IConnectionPointContainer; begin Disconnect; try // Запрашиваем интерфейс IConnectionPointContainer у объекта- // источника событий OleCheck(pSource.QueryInterface(IConnectionPointContainer, pcpc)); // Запрашиваем интерфейс IConnectionPoint. OleCheck(pcpc.FindConnectionPoint(FSinkIID, FCP)); // Подключаемся к обработчику событий OleCheck(FCP.Advise(Self, FCookie)); // Все прошло успешно - устанавливаем свойство Source FSource := pSource; except raise Exception.Create(Format('Unable to connect %s.'#13'%s', [ClassName, Exception(ExceptObject).Message])); end; end;

    Метод Disconnect отключает обработчик событий от объекта-источника.

    procedure TBaseSink.Disconnect; begin if FSource = NIL then Exit; try OleCheck(FCP.Unadvise(FCookie)); FCP := NIL; FSource := NIL; except Pointer(FCP) := NIL; Pointer(FSource) := NIL; end; end;

    Метод Invoke вызывается при возникновении события в объекте-источнике. Он осуществляет предварительную обработку параметров и вызывает абстрактный метод DoInvoke, который должен быть перекрыт в наследниках, реализующих конкретные интерфейсы обработчиков событий. Реализация такого наследника будет рассмотрена ниже.

    Обработчик событий от CommandBarButton

    Наследуя функциональность от базового класса TBaseSink, обработчики событий конкретных COM-объектов реализуются перекрытием методов Create и DoInvoke. Создадим такой обработчик для кнопки на панели инструментов Office. Он должен реализовать интерфейс _CommandBarButtonEvents –

    type _CommandBarButtonEvents = dispinterface [''] procedure Click(const Ctrl: CommandBarButton; var CancelDefault: WordBool); dispid 1; end;
    type // Обработчик события нажатия на кнопку TOnCommandButtonClick = procedure (Button: CommandBarButton; var CancelDefault: WordBool) of object;
    TCommandButtonEventSink = class(TBaseSink) private FOnClick: TOnCommandButtonClick; protected procedure DoClick(Button: CommandBarButton; var CancelDefault: WordBool); virtual; function DoInvoke (DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var dps : TDispParams; pDispIds : PDispIdList; VarResult, ExcepInfo, ArgErr: Pointer): HResult; override; public constructor Create; virtual; property OnClick: TOnCommandButtonClick read FOnClick write FOnClick; end;

    В конструкторе установим идентификатор интерфейса обработчика событий, который мы реализуем.

    constructor TCommandButtonEventSink.Create; begin inherited; FSinkIID := _CommandBarButtonEvents; end;

    Метод DoClick просто вызывает назначенный классу обработчик события и нужен для более удобной работы с ним из Delphi.

    procedure TCommandButtonEventSink.DoClick(Button: CommandBarButton; var CancelDefault: WordBool); begin if Assigned(FOnClick) then FOnClick(Button, CancelDefault); end;

    Ключевым методом является DoInvoke, который для каждого DispId, объявленного в интерфейсе _CommandBarButtonEvents, должен выполнить соответствующие действия.

    function TCommandButtonEventSink.DoInvoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var dps: TDispParams; pDispIds: PDispIdList; VarResult, ExcepInfo, ArgErr: Pointer): HResult; begin Result := S_OK; case DispID of // Для этого DispId передаются 2 параметра – CommandBarButton // и WordBool 1 : DoClick(IUnknown(dps.rgvarg^[pDispIds^[0]].unkval) as CommandBarButton, dps.rgvarg^[pDispIds^[1]].pbool^); else Result := DISP_E_MEMBERNOTFOUND; end; end;

    Как видим, реализация конкретного обработчика является практически механической задачей и не должна вызвать проблем. Если в интерфейсе предусмотрено несколько методов, то следует подставить в оператор case все их DispId. От программиста требуется лишь аккуратность при отображении массива dps на параметры соответствующих обработчиков.

    Регистрация модулей

    COM Add-In — это COM-сервер, который должен быть зарегистрирован в системе, например, при помощи TRegSvr.exe или RegSvr32.exe. Однако требуется еще один шаг — регистрация его в Microsoft Office. Для этого необходимо создать в реестре раздел с именем.

    — название приложения, к которому подключается Add-In

    — имя, под которым зарегистрирован COM-сервер (название_проекта.имя_класса)

    В этом разделе необходимо создать два параметра:

    Строковый параметр, определяющий имя, под которым наше расширение будет видно в менеджере расширений приложений Microsoft Office

    Параметр типа DWORD, определяющий, когда должен загружаться Add-In

    Параметр LoadBehavior может принимать одно из следующих значений:

    Add-In загружается при старте приложения

    Add-In загружается по требованию (когда его свойство Connected в колекции AddIns приложения будет установлено в TRUE)

    Add-In загружается один раз при следующем запуске приложения

    Пишем COM Add-In

    Библиотеки типов Office 2000

    Для работы с объектной моделью Microsoft Office 2000 нам понадобятся библиотеки типов, описывающие доступные интерфейсы. Поскольку Delphi 5 поставляется с библиотеками типов от Office 97, необходимо импортировать нужные модули. В любом случае понадобится библиотека Office_TLB, остальные (Word_TLB, Excel_TLB и т.п.) могут потребоваться в зависимости от того, к какому приложению будет писаться модуль расширения.

    Для импорта воспользуемся меню Import TypeLibrary.

    После создания модулей с описаниями интерфейсов рекомендую вручную удалить из них ссылки на модули Graphics и OleCtrls, которые приводят к подключению к проекту модуля Forms, а при компиляции не нужны.

    Создаем COM-сервер

    Поскольку COM Add-In является COM-сервером, воспользуемся мастерами Delphi для его создания. Выберем команду New. -> ActiveX -> ActiveX Library.

    Затем добавим в созданную библиотеку Automation Object при помощи мастера New. -> ActiveX -> Automation Object.

    В поле CoClassName введем имя реализуемого интерфейса (DTExtensibility2). В принципе, можно ввести любое имя, требуется только, чтобы этот интерфейс имел тот же GUID, что и IDTExtensibility, и аналогичный набор методов.

    После того как Delphi создаст новый объект автоматизации, запустим редактор библиотеки типов. Вначале мы имеем описание интерфейса без методов и со сгенерированным Delphi значением GUID.

    Перейдем на вкладку Text созданного интерфейса и введем там следующий текст:

    [ uuid(B65AD801-ABAF-11D0-BB8B-00A0C90F2744), version(1.0), helpstring("Dispatch interface for Office2000ComAddIn Object"), dual, oleautomation ]
    interface IDTExtensibility2: IDispatch < [id(0x00000001)] HRESULT _stdcall OnConnection( [in] IDispatch * HostApp, [in] long ext_ConnectMode, [in] IDispatch * AddInInst, [in] SAFEARRAY(VARIANT) * custom ); [id(0x00000002)] HRESULT _stdcall OnDisconnection([in] long ext_DisconnectMode, [in] SAFEARRAY(VARIANT) * custom ); [id(0x00000003)] HRESULT _stdcall OnAddInsUpdate( [in] SAFEARRAY(VARIANT) * custom ); [id(0x00000004)] HRESULT _stdcall OnStartupComplete( [in] SAFEARRAY(VARIANT) * custom ); [id(0x00000005)] HRESULT _stdcall BeginShutdown( [in] SAFEARRAY(VARIANT) * custom ); >;

    Если вы назвали свой класс не DTExtensibility2, а как-то иначе — скорректируйте название интерфейса. Все остальное, включая uuid, должно быть введено точно так, как это было описано выше.

    Если все введено правильно — в окне Type Library Editor вы должны увидеть пять методов созданного интерфейса.

    Нажмите кнопку «Обновить» и закройте редактор библиотеки типов — больше он нам не понадобится. Теперь откомпилируйте полученный проект и зарегистрируйте его в Windows при помощи меню Run->Register COM Server.

    При помощи редактора реестра создайте в реестре Windows запись для регистрации Add-In с приложением Microsoft Office. COM Add-In готов!

    Отладка модулей расширения

    Для работы с модулями расширения необходимо добавить в меню Microsoft Office команду для вызова диспетчера дополнений. Для этого (на примере Word):

    • В меню Сервис выберите команду Настройка, а затем — вкладку Команды.
    • В списке Категории выберите категорию Сервис.
    • Перетащите команду Надстройки для модели COM. из списка Команды в меню Сервис. Когда в меню Сервис раскроется список команд, укажите, где в этом меню должна располагаться команда Надстройки для модели COM. после чего отпустите кнопку мыши.
    • Нажмите кнопку «Закрыть».

    При помощи этой команды вызывается окно диспетчера дополнений. Загруженные дополнения помечены в списке галочкой. Чтобы загрузить надстройку — отметьте ее и нажмите OK, чтобы выгрузить — снимите отметку.

    !Если во время загрузки Add-In произошла ошибка — Office не будет загружать его при следующем запуске приложения автоматически. Чтобы надстройка снова начала загружаться — загрузите ее через диспетчер.

    Для отладки Com Add-Ins установите в качестве Host Application (меню Run — > Parameters) приложение Office, к которому подключена надстройка, например WinWord.exe. После этого установите точку прерывания в одном из методов своего объекта и запустите приложение. Загрузится Word, и при попадании на точку прерывания вы окажетесь в отладчике Delphi.

    Реализуем функциональность

    В настоящий момент наш Add In умеет только загружаться, но не может сделать ничего полезного. Для примера реализации функциональности добавим на панель инструментов Office кнопку, по нажатии которой в текущую позицию курсора будет вставляться список файлов выбранной папки.

    Для этого дополним наш объект автоматизации несколькими полями и методами.

    type TDirectoryList = class(TAutoObject, IDTExtensibility2) private Host: WordApplication; FButtonEventsSink: TCommandButtonEventSink; procedure ButtonClick(Button: CommandBarButton; var CancelDefault: WordBool); protected // Реализация IDTExtensibility2 procedure BeginShutdown(var custom: PSafeArray); safecall; procedure OnAddInsUpdate(var custom: PSafeArray); safecall; procedure OnConnection(const HostApp: IDispatch; ext_ConnectMode: Integer; const AddInInst: IDispatch; var custom: PSafeArray); safecall; procedure OnDisconnection(ext_DisconnectMode: Integer; var custom: PSafeArray); safecall; procedure OnStartupComplete(var custom: PSafeArray); safecall; end;

    Поле Host будет хранить ссылку на интерфейс WordApplication, необходимый для работы с объектной моделью Word, поле FButtonEventsSink — ссылку на объект-обработчик событий от кнопки, реализация которого была рассмотрена в разделе «Обработчик событий от CommandBarButton», а метод ButtonClick будет вызываться для обработки нажатия на кнопку.

    Реализуем необходимую функциональность в методах класса TDirectoryList.

    const // Уникальный идентификатор кнопки. Можно задать любую уникальную // строку. Для ее генерации удобно воспользоваться средствами // Delphi по генерации GUID (Ctrl+Shift+G) // Этот идентификатор понадобится нам для того, чтобы после // создания кнопки иметь возможность ее найти. BUTTON_TAG = '';
    procedure TDirectoryList.OnConnection(const HostApp: IDispatch; ext_ConnectMode: Integer; const AddInInst: IDispatch; var custom: PSafeArray); var Bar: CommandBar; Button: CommandBarButton; begin // Сохраняем ссылку на WordApplication для // последующей работы с ней Host := HostApp as WordApplication; // Создаем обработчик событий для кнопки FButtonEventsSink := TCommandButtonEventSink.Create; FButtonEventsSink.OnClick := ButtonClick; // Получаем интерфейс панели инструментов "Форматирование" Bar := Host.CommandBars.Get_Item('Formatting'); // Проверяем наличие на ней нашей кнопки Button := Bar.FindControl(msoControlButton, EmptyParam, BUTTON_TAG, EmptyParam, msoFalse) as CommandBarButton;; if not Assigned(Button) then // Если ее нет – создаем Button := Bar.Controls.Add(msoControlButton, EmptyParam, BUTTON_TAG, 1, EmptyParam) as CommandBarButton; // Подключаем обработчик и устанавливаем свойства кнопки FButtonEventsSink.Connect(Button); Button.Set_Style(msoButtonCaption); Button.Set_Tag(BUTTON_TAG); Button.Set_Caption('Dir'); end;
    procedure TDirectoryList.OnDisconnection(ext_DisconnectMode: Integer; var custom: PSafeArray); var Bar: CommandBar; B: CommandBarControl; begin // Уничтожаем обработчик событий кнопки FreeAndNil(FButtonEventsSink); // Ищем свою кнопку Bar := Host.CommandBars.Get_Item('Formatting'); B := Bar.FindControl(msoControlButton, EmptyParam, BUTTON_TAG, EmptyParam, msoFalse) as CommandBarButton; // И удаляем ее if Assigned(B) then B.Delete(msoFalse); end;
    procedure TDirectoryList.ButtonClick(Button: CommandBarButton; var CancelDefault: WordBool); var S: String; SR: TSearchRec; D: WordDocument; FindStatus: Integer; begin // Эта процедура вызывается при нажатии на созданную нами кнопку D := Host.ActiveDocument; // Проверяем наличие активного документа if Assigned(D) then begin // Функция BrowseForFolder возвращает путь к выбранной // в диалоге папке. Код функции приведен в модуле с примером // на сопровождающем диске. От использования аналогичной // функции VCL SelectDirectory пришлось отказаться, так как // модуль, в котором она находится, использует Forms if BrowseForFolder(S) then begin with TStringList.Create do try // Получаем список файлов FindStatus := FindFirst(S + '\*.*', 0, SR); while FindStatus = 0 do begin Add(SR.Name); FindStatus := FindNext(SR); end; FindClose(SR); // И вставляем его в документ D.ActiveWindow.Selection.InsertAfter(S+#13#13+Text); finally // Освобождаем TStringList Free; end; end; end; end;

    Пример работы этой надстройки изображен на рисунке.

    Написание надстроек, работающих с несколькими приложениями Office

    Поскольку все приложения Office реализуют одну и ту же модель COM Add-Ins, одно и то же расширение может быть зарегистрировано одновременно для нескольких приложений. В этом случае оно должно определять, из какого приложения оно загружено, и использовать соответствующую объектную модель. Определить приложение-владельца можно, запросив у него соответствующий интерфейс:

    procedure TDirectoryList.OnConnection(const HostApp: IDispatch; ext_ConnectMode: Integer; const AddInInst: IDispatch; var custom: PSafeArray); begin if HostApp is WordApplication then // Это Microsoft Word

    Также возможно сохранение HostApp в переменной типа Variant и использование позднего связывания. В этом случае надстройка будет работать с любым приложением Office, имеющим подходящие по именам методы.

    • ПК и комплектующие
      • Настольные ПК и моноблоки
      • Портативные ПК
      • Серверы
      • Материнские платы
      • Корпуса
      • Блоки питания
      • Оперативная память
      • Процессоры
      • Графические адаптеры
      • Жесткие диски и SSD
      • Оптические приводы и носители
      • Звуковые карты
      • ТВ-тюнеры
      • Контроллеры
      • Системы охлаждения ПК
      • Моддинг
      • Аксессуары для ноутбуков
      • Принтеры, сканеры, МФУ
      • Мониторы и проекторы
      • Устройства ввода
      • Внешние накопители
      • Акустические системы, гарнитуры, наушники
      • ИБП
      • Веб-камеры
      • KVM-оборудование
      • Сетевые медиаплееры
      • HTPC и мини-компьютеры
      • ТВ и системы домашнего кинотеатра
      • Технология DLNA
      • Средства управления домашней техникой
      • Планшеты
      • Смартфоны
      • Портативные накопители
      • Электронные ридеры
      • Портативные медиаплееры
      • GPS-навигаторы и трекеры
      • Носимые гаджеты
      • Автомобильные информационно-развлекательные системы
      • Зарядные устройства
      • Аксессуары для мобильных устройств
      • Цифровые фотоаппараты и оптика
      • Видеокамеры
      • Фотоаксессуары
      • Обработка фотографий
      • Монтаж видео
      • Операционные системы
      • Средства разработки
      • Офисные программы
      • Средства тестирования, мониторинга и диагностики
      • Полезные утилиты
      • Графические редакторы
      • Средства 3D-моделирования
      • Веб-браузеры
      • Поисковые системы
      • Социальные сети
      • «Облачные» сервисы
      • Сервисы для обмена сообщениями и конференц-связи
      • Разработка веб-сайтов
      • Мобильный интернет
      • Полезные инструменты
      • Средства защиты от вредоносного ПО
      • Средства управления доступом
      • Защита данных
      • Проводные сети
      • Беспроводные сети
      • Сетевая инфраструктура
      • Сотовая связь
      • IP-телефония
      • NAS-накопители
      • Средства управления сетями
      • Средства удаленного доступа
      • Системная интеграция
      • Проекты в области образования
      • Электронный документооборот
      • «Облачные» сервисы для бизнеса
      • Технологии виртуализации
      1999 1 2 3 4 5 6 7 8 9 10 11 12
      2000 1 2 3 4 5 6 7 8 9 10 11 12
      2001 1 2 3 4 5 6 7 8 9 10 11 12
      2002 1 2 3 4 5 6 7 8 9 10 11 12
      2003 1 2 3 4 5 6 7 8 9 10 11 12
      2004 1 2 3 4 5 6 7 8 9 10 11 12
      2005 1 2 3 4 5 6 7 8 9 10 11 12
      2006 1 2 3 4 5 6 7 8 9 10 11 12
      2007 1 2 3 4 5 6 7 8 9 10 11 12
      2008 1 2 3 4 5 6 7 8 9 10 11 12
      2009 1 2 3 4 5 6 7 8 9 10 11 12
      2010 1 2 3 4 5 6 7 8 9 10 11 12
      2011 1 2 3 4 5 6 7 8 9 10 11 12
      2012 1 2 3 4 5 6 7 8 9 10 11 12
      2013 1 2 3 4 5 6 7 8 9 10 11 12

      theWord

      Не давно открыл для себя theWord. Был весьма обрадован, что, в отличии от других качественных библейских программ ориентированных на американского пользователя, theWord имеет не только модуль РСТ. Хотелось бы узнать каким образом создаются именно библейские модули, т.к. сама оболочка theWord позволяет работать с ними на много удобнее, чем, к примеру, Цитата. (ИМХО, на сегодняшний день Цитата выигрывает в сравнении с theWord за счет количества русскоязычного материала).

      Поискал в русской ветке инструкцию для создания библ. модулей, не нашел (может плохо искал). Буду весьма признателен за подробное описание процедуры создания модулей.

      Чем меньше человек думает, тем больше у него единомышленников.
      Timur_75 Posts: 168 Joined: Mon Nov 01, 2010 7:33 pm Location: Russia

      Re: Создание Библейских модулей

      Post by Timur_75 » Sat Apr 02, 2011 9:56 pm

      Библейский модуль представляет из себя текстовый файл с расширением ”nt” (новый завет), ”ot” (ветхий завет), ”ont” (ветхий и новый завет).
      Для создания модуля вам понадобится текстовый редактор, например, NotePad++ или в простонародье «Блакнот». Если вы когда-нибудь работали с NotePad++ то вы знаете, что каждая строка в документе имеет свой номер от 1 и далее. Так вот, основу библейского модуля составляют 31102 строки, именно столько стихов в Библии. Откройте библейский модуль Синодального перевода (запросто открывается в «Блакноте») и вы увидите, что 1-ая строка содержит первый стих Библии из книги Бытия: «В начале сотворил Бог небо и землю», а 31102-ая последний из книги Откровения: «Благодать Господа нашего Иисуса Христа со всеми вами. Аминь.».
      Весь труд в том, чтобы расположить стихи по порядку, каждый стих в отдельную строку. Затем, после основной части добавить описание, пример из модуля Синодального перевода:
      lang=ru (язык)
      charset=204 (кодировка, не знаю зачем нужна)
      short.title=RST (короткое название)
      description=1876 Russian Synodal Text (описание)
      about=1876 Russian Synodal Text (о тексте)

      После этого сохранить текстовый документ в кодировке UTF-8 (важно. )
      поменяйте расширение с ”txt” на ”ont”
      после чего положите файл в папку C:\Program Files\The Word\Bibles
      запустите программу и посмотрите, что получилось.

      В помощь:
      WinMerge-2.12.4-Setup.exe Это программа поможет синхронизировать тексты Библий. В левом окне программы открываем «образец», в правом синхронизируемый текст и начинаем работу. (вот ссылка на файл синхронизации всей библии index.ont Он представляет собой последовательность: 01\01\01, 01\01\02, 01\01\03. и т.д. где первая цифра — книга, вторая — глава, третья стих).

      P.S. Помните, что у каждого перевода есть правообладатель. Если вы планируете распространять созданные вами модули, позаботьтесь, чтобы иметь письменное разрешение автора перевода или издательства.

      За чистоту и порядок.
      Fog Posts: 204 Joined: Wed Mar 30, 2011 2:51 pm Location: Deutschland

      Re: Создание Библейских модулей

      Post by Fog » Sat Apr 02, 2011 11:41 pm

      1.

      Спасибо за ответ. Вроде как на первый взгляд все понятно. По-тихонько, если время будет, буду пробовать.

      Еще один вопрос. Есть ли возможность (как бывает в печатных изданиях) группировать несколько стихов указав выше тему, о чем в них говорится?

      Притча о четырех видах почвы (77/Мф 13:1-9; Мк 4:1-9)

      4 К Иисусу продолжали приходить люди из разных городов, и когда собралась большая толпа, Он рассказал им притчу:
      5 — Сеятель вышел сеять семена. И когда он разбрасывал их, то некоторые из семян упали у дороги и были затоптаны или cклеваны птицами.
      6 Другие упали на камень, и как только ростки взошли, они засохли от недостатка влаги.
      7 Третьи упали в терновник, и когда тот разросся, то заглушил ростки.
      8 Прочие же упали на хорошую почву. Они взошли и принесли урожай во сто раз больше того, что было посеяно. Закончив эту притчу, Иисус громко сказал: — У кого есть уши, чтобы слышать, пусть слышит!

      2.

      P.S. Помните, что у каждого перевода есть правообладатель. Если вы планируете распространять созданные вами модули, позаботьтесь, чтобы иметь письменное разрешение автора перевода или издательства.

      Вообще с этим как все очень неопределенно и очень туманно. По ходу, распространять только РСТ и можно. Все остальное — коммерческий продукт. Мне вот интересно, каким образом, к примеру, Цитата получила разрешение правообладателей (а есть модули, на которые она получила это право). Может стоит официально theWord сделать подобного рода запрос? Это будет куда практичнее, чем какой-то Федя Сумкин напишет Е-мейл правообладателям. За одно будет и продвижение в христианском рунете. Оболочка theWord того стоит.

      Last edited by Fog on Mon Apr 18, 2011 12:32 pm, edited 1 time in total.
      Чем меньше человек думает, тем больше у него единомышленников.
      Timur_75 Posts: 168 Joined: Mon Nov 01, 2010 7:33 pm Location: Russia

      Re: Создание Библейских модулей

      Post by Timur_75 » Sun Apr 03, 2011 8:52 pm

      Заголовки уже прописаны. Вывести заголовки в окне библии можно открыв окошко «Настройки Окна Библии». В категории “Paragraphs and headings” ставим галочку в строке «Показывать заголовок отрывка» и точку в «Если у модуля нет заголовков то использовать дополнительный заголовки», в строке «Дополнительные заголовки» по умолчанию будет выбрано «английские заголовки», других пока нет. После этого в тексте Библии появятся заголовки на английском.

      Заголовки содержатся в файле default.english.hdgs.twm в папке C:\Program Files\The Word\Misc. Его можно отредактировать открыв программой SQLiteExpertPersSetup.exe.
      Откройте программу
      Во вкладке «File» выберите «Open Data Base»
      Зайдите в C:\Program Files\The Word\Misc. (в строке «Тип файлов» выберите «Any files»)
      Откройте файл default.english.hdgs.twm
      В корне будут две под-темы «config» и «headings», выберите вторую
      Откройте вкладку «Data»
      Вы увидите таблицу с названиями заголовков на английском, ее можно отредактировать, перевести на русский (я попробывал, получилось)

      Как сделать свои заголовки, пока не знаю.

      За чистоту и порядок.
      DrMiKEY Posts: 104 Joined: Mon May 05, 2008 4:03 pm Location: Slovakia Contact:

      Re: Создание Библейских модулей

      Post by DrMiKEY » Mon Apr 04, 2011 7:28 am

      Как сделать свои заголовки:

      В Библии модуль вставки и код

      Из Словацкой Библии:

      Image

      Dielo prvého dňaTu povedal Boh: „Buď svetlo!“ a bolo svetlo. 

      Извините за мой русский. Я использовал Google Translate.

      Timur_75 Posts: 168 Joined: Mon Nov 01, 2010 7:33 pm Location: Russia

      Re: Создание Библейских модулей

      Post by Timur_75 » Mon Apr 04, 2011 9:17 am

      DrMiKEY vďaka moc!
      (Большое спасибо!)
      За чистоту и порядок.
      DrMiKEY Posts: 104 Joined: Mon May 05, 2008 4:03 pm Location: Slovakia Contact:

      Re: Создание Библейских модулей

      Post by DrMiKEY » Mon Apr 04, 2011 11:42 am

      Не за что Timur
      nikolay_l Posts: 511 Joined: Thu Dec 09, 2010 3:29 pm Location: Россия, Крым, Севастополь Contact:

      Re: Создание Библейских модулей

      Post by nikolay_l » Sat Apr 09, 2011 8:52 pm

      Официальные модули только через запрос со стороны автора прогаммы и появляются (если вообще есть правообладатель). Насколько я знаю например Современный Перевод (СоП) может распросранятся на сайте TheWord только платно согласно условиям контракта с Costas Stergiou (автором TheWord). Поэтому пользуйтесь пока что тем что есть.

      Восстановительный перевод также если и будет выложен на офф. странице, то только его платный вариант, а Перевод Нового Мира Costas и сам не хочет видеть на своем сайте даже бесплатно.

      «Мыши плакали, кололись, но продолжали жрать кактус»
      nikolay_l Posts: 511 Joined: Thu Dec 09, 2010 3:29 pm Location: Россия, Крым, Севастополь Contact:

      Re: Создание Библейских модулей

      Post by nikolay_l » Sat Apr 09, 2011 9:48 pm

      Есть к слову шаблоны для облегчения создания различных модулей от библейских до книжных. В этом торренте они есть в архиве »Файлы помощи и спецификации TheWord 3.rar»

      Спецификацию по созданию модулей я пробовал как то на русский язык перевести но так и не закончил. В принципе там много возможностей для создания професиональных библейских модулей, но у нас нет переводов с таким высоким уровнем проработки деталей кроме пожалуй перевода профессора Кулакова (Институт Перевода Библии в Заокском).

      Но вообще если делать серьезный модуль то переводы мало пригодны для реализации потенциала и точности. Лучше брать уже готовые модули критических изданий типа Вескота-Хорта или Нестле-Аланда с номерами Стронга, Кодами морфологии, Лемами и прочим и разбираться с ними преращая их во что то подобное подстрочника Винокурова с проработкой разных версий и разночтений. Это может быть весьма трудоемко, но и результат будет существенным. Но такую работу должны делать в любом случае профессоналы-линвисты знающие древние языки. Иначе получится что то вроде подстрочника В.Журомского. Круто выглядит но авторитетом не пользуется.

      В спецификации к слову сказано что обилие кода в тексте негативно влияет на поиск.

      «Мыши плакали, кололись, но продолжали жрать кактус»
      Vorlage Posts: 2 Joined: Fri Sep 03, 2021 3:24 pm

      Re: Создание Библейских модулей

      Post by Vorlage » Fri Sep 03, 2021 3:33 pm

      Тимур, пришлите пожалуйста мне файл index.ont.

      Timur_75 wrote: Библейский модуль представляет из себя текстовый файл с расширением ”nt” (новый завет), ”ot” (ветхий завет), ”ont” (ветхий и новый завет).
      Для создания модуля вам понадобится текстовый редактор, например, NotePad++ или в простонародье «Блакнот». Если вы когда-нибудь работали с NotePad++ то вы знаете, что каждая строка в документе имеет свой номер от 1 и далее. Так вот, основу библейского модуля составляют 31102 строки, именно столько стихов в Библии. Откройте библейский модуль Синодального перевода (запросто открывается в «Блакноте») и вы увидите, что 1-ая строка содержит первый стих Библии из книги Бытия: «В начале сотворил Бог небо и землю», а 31102-ая последний из книги Откровения: «Благодать Господа нашего Иисуса Христа со всеми вами. Аминь.».
      Весь труд в том, чтобы расположить стихи по порядку, каждый стих в отдельную строку. Затем, после основной части добавить описание, пример из модуля Синодального перевода:
      lang=ru (язык)
      charset=204 (кодировка, не знаю зачем нужна)
      short.title=RST (короткое название)
      description=1876 Russian Synodal Text (описание)
      about=1876 Russian Synodal Text (о тексте)

      После этого сохранить текстовый документ в кодировке UTF-8 (важно. )
      поменяйте расширение с ”txt” на ”ont”
      после чего положите файл в папку C:\Program Files\The Word\Bibles
      запустите программу и посмотрите, что получилось.

      В помощь:
      WinMerge-2.12.4-Setup.exe Это программа поможет синхронизировать тексты Библий. В левом окне программы открываем «образец», в правом синхронизируемый текст и начинаем работу. (вот ссылка на файл синхронизации всей библии index.ont Он представляет собой последовательность: 01\01\01, 01\01\02, 01\01\03. и т.д. где первая цифра — книга, вторая — глава, третья стих).

      P.S. Помните, что у каждого перевода есть правообладатель. Если вы планируете распространять созданные вами модули, позаботьтесь, чтобы иметь письменное разрешение автора перевода или издательства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *