2015-09-03 1 views
1

Я собираюсь узнать, как подключить MsWord к Delphi. Маленькая ... очень маленькая ... программа, которую я написал, работает, но я не получаю предложения после точки объекта.Как я могу получить предложения по функциям и свойствам после точки варианта в Delphi XE7?

Мой код (я скопировал все, что я думал, что может быть полезно): «Слово»

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 
    Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ComObj, ComCtrls, Vcl.StdCtrls; 

var 
    Form1: TForm1; 
    word, doc : Variant; 

implementation 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    try 
    word := CreateOleObject('Word.Application'); 
    word.Visible := true; 
    doc := word.Documents.Add(); 
    word.Selection.Font.Name := ('Arial'); 
    doc.Range.Text := 'The answer is 42.'; 
    //doc.Save; 
    except 
    ShowMessage('Microsoft Word couldn''t start'); 
    end; 
end; 

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

Спасибо заранее,

Lea

ответ

6

При использовании OLE-автоматизации с помощью функции CreateOleObject, Delphi не имеют никаких данных о методах объекта или свойства, поэтому он не может ссылаться код завершения. Когда ваш код компилируется, он просто создает вызовы вызова IDispatch, поэтому технически вы можете написать любое несуществующее имя метода (например, doc.SomeSillyNonExistentFunction), и оно будет успешно скомпилировано и завершится ошибкой только во время выполнения. Это называется поздним связыванием - функция существования и проверка параметров выполняется во время выполнения вместо времени компиляции. Чтобы получить доступ к данным типа, вам необходимо импортировать библиотеку офисного типа или использовать компоненты Delphi office automation VCL, что почти так же.

Upd: Чтобы установить компоненты офиса VCL использовать меню Components->Install package и включить пакет Microsoft Office sample Automation server Wrapper components. Он добавит новую вкладку в палитру компонентов. Если такого пакета нет (у меня есть XE1 и я не могу проверить), используйте меню Components->Import component, выберите Import a Type Library, а затем найдите в списке библиотеку Office Word/Excel/etc.

+0

Теоретически возможно было бы написать расширение IDE для реализации пользовательского 'IOTACodeInsightManager', используя информацию о библиотеке типов для данного ProgID (проанализированного из исходного кода или введенного пользователем), если он зарегистрирован в системе. –

Смежные вопросы