Delphi World - Wordbasic с параметрами из Delphi
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Wordbasic с параметрами из Delphi

Имевшая место дискуссия двух начинающих программистов-школьников. Повод - спор, кто больше операторов Бейсика назовет. Перебрали почти все им известные, долго думают. Первый (радостно): LINE!
Второй (спокойно): LINE INPUT!
Первый (с досадой): ГНИДА!
Второй (спокойно): ГНИДА INPUT!

Привожу некоторый Delphi код для работы с Word 95. Я протестировал его под Word 97 и, как оказалось, потребовалось внести некоторые исправления - он не захотел работать под ним, но что самое неприятное - после исправлений ошибок выяснилось, что Word 97 работает значительно медленнее, чем Word 95. SendKeys был применен от отчаяния.


function TAutoMerge.ProcessMerge(FSource, FData, FOutput: string):
  boolean;
var
  MSWord: Variant;
  i, NumDocs: integer;
  Found: boolean;
  s, LastOLECommand: string;
begin
  ProcessMerge := False;
  try
    LastOLECommand := 'Creating OLE Object.';
    MSWord := CreateOLEObject('Word.Basic');
    LastOLECommand := 'Show MS Word.';
    MSWord.AppShow;
    Application.ProcessMessages;

    LastOLECommand := 'Open document file >' + FSource + '<.';
    MSWord.FileOpen(Name := FSource, ConfirmConversions := 0,
      ReadOnly := 1, AddToMru := 0, PasswordDoc := '',
      PasswordDot := '', Revert := 0,
      WritePasswordDoc := '',
      WritePasswordDot := '');
    LastOLECommand := 'Screen updating = false.';
    MSWord.ToolsOptionsSpelling(AutomaticSpellChecking := 0);
    LastOLECommand := 'Set background printing to off.';
    MSWord.ToolsOptionsPrint(Background := 0);

    Application.ProcessMessages;
    LastOLECommand := 'Open Data file >' + FData + '<.';
    MSWord.MailMergeOpenDataSource(Name := FData, ConfirmConversions := 0,
      ReadOnly := 1, LinkToSource := 1,
      AddToMru := 0,
      PasswordDoc := '', PasswordDot := '',
      WritePasswordDoc := '', WritePasswordDot := '',
      Connection := '', SQLStatement := '',
      SQLStatement1 := '',
      Revert := 1);

    LastOLECommand := 'Start the Mail Merge.';
    MSWord.MailMerge(CheckErrors := 2, Destination := 1,
      MergeRecords := 0,
      From := '', to := '', Suppression := 0,
      MailSubject := '',
      MailAsAttachment := 0, MailAddress := '');

    LastOLECommand := 'Set up for SendKeys to select printer.';
    Application.ProcessMessages;
    MSWord.AppShow;
    s := '{home}%l{enter}{home}%n' + FOutput + '{tab}{enter}{home}{enter}';
    // sdd 1.1
    MSWord.SendKeys(s, -1);
    MSWord.MailMergeToPrinter;
    Application.ProcessMessages;

    ProcessMerge := True;
    LastOLECommand := 'All done with merge.';
  except
    on EOleException do
    begin
      inc(TotalOLEErrors);
      lblStatus.caption := LastOLECommand;
      if (TotalOLEErrors >= TOTALOLEERRORS_MAX) then
      begin
        s := 'Имеется по крайней мере одна ошибка OLE (' +
          IntToStr(TotalOLEErrors) +

        '), последней ошибкой было >' + LastOLECommand + '<.';
        ShowMessage(s);
      end;
    end
  end;
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования