Помощь - Поиск - Пользователи - Календарь
Полная версия: Подвисает при добавлении кода
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
cooler
procedure TForm4.Button2Click(Sender: TObject);
var FilePath: string;
begin
  Savedialog1.execute;
  FilePath:=ExtractFilePath(GetModuleName(HInstance)) + 'Report.doc';
  Word.Documents.Open(FilePath);
  FindAndReplace('$s1',floattostr(Q));
  FindAndReplace('$s2',floattostr(ggg));
  FindAndReplace('$s3',res);
end;


Вот процедура замещения части текста в готовом шаблоне *.doc
При добавлении кода виснет
Нужно чтобы Пользователь в SaveDialog написал имя файла и сохранился под этим именем уже измененный файл
Закрыть грамотно тоже надо документ и ворд, у меня получается пока только подвешивать smile.gif

P.S Объект Word и процедура FindAndReplace были использованы отсюда http://www.webdelphi.ru/2010/02/microsoft-word-v-delphi/
IUnknown
Что именно виснет у тебя?

// Создаешь объект Word где-то в программе
   W:=CreateOleObject('Word.Application');


function FindAndReplace(WordApp: Variant; Poisk, Zamena : string): Boolean;
begin
  WordApp.Selection.Start := 0;
  WordApp.Selection.End := 0;

  WordApp.Selection.Find.ClearFormatting;

  WordApp.Selection.Find.Forward := true;
  WordApp.Selection.Find.Wrap := 1; // wdFindContinue
  WordApp.Selection.Find.MatchCase := true;

  WordApp.Selection.Find.Text := poisk;
  WordApp.Selection.Find.Replacement.Text := zamena;

  WordApp.Selection.Find.Execute(Replace := 2); // wdReplaceAll

  result := true;
end;

procedure TForm1.ButtonFindReplaceClick(Sender: TObject);
var Doc: variant;
begin
   try
      Doc := W.Documents.Open(FileName:='F:\a.doc');
      if SaveDialog2.Execute() then
      begin
         FindAndReplace(W, 'XXX', ChangeTo.Text);
         Doc.saveas(SaveDialog1.FileName);
      end;
   finally
      Doc := Unassigned; // Документ закрываешь сразу
   end;
end;

// Закрываешь, когда становится не нужен
   W.Quit;
   W := Unassigned;

Ничего не виснет, как работало так и работает...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.