- Помогите! У меня Word при печати вместо букв квадратики выводит! Help! Help! Что мне делать? Посоветуйте!
- А ты в квадратики нужные буквы вписывай...
unit oleword;
// Необходима форма и компоненты Memo и Edit на ней.// Написано для MSWord 8.// Также необходимо создать тестовый документ d:\test.docinterfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OLEAuto, ShellAPI, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }
MSWord: Variant;
// WordVersion: Byte;end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
Test, Test1: Integer;
AString: Variant;
begin
MSWord := CreateOLEObject('Word.Application'); //Word 8
MSWord.Documents.Open(FileName := 'd:\test.doc', ReadOnly := True);
MSWord.Visible := 1; //Закомментарьте, если вы нехотите показывать файл;
Test := MSWord.FontNames.Count;
for Test1 := 1 to Test dobegin
AString := MSWord.FontNames.Item(Test1);
Memo1.Lines.Add(AString);
end;
MSWord.ActiveDocument.Range(Start := 0,
end := 0);
MSWord.ActiveDocument.Range.InsertAfter(Text := 'Заголовок');
MSWord.ActiveDocument.Range.InsertParagraphAfter;
MSWord.ActiveDocument.Range.Font.Name := 'Arial';
MSWord.ActiveDocument.Range.Font.Size := 24;
AString := MSWord.ActiveDocument.Range.Font.Name;
Edit1.Text := AString;
end;
end.
Перевод контента на русский язык:
Похоже, вы пытаетесь создать приложение Delphi, которое взаимодействует с Microsoft Word (версия 8). Проблема в том, что символы заменены квадратами вместо фактического текста.
Чтобы помочь вам решить эту проблему, я предоставлю некоторые советы и инсайды вашего кода:
Проверьте установку Word: Убедитесь, что MS Word 8 правильно установлен на вашем компьютере. Проверьте, не является ли это коррупцией или устаревшей версией.
Проблемы с шрифтами: Переменная AString присваивается имя шрифта из Word, но может не быть правильно интерпретировано Delphi. Попробуйте использовать Edit1.Text := AString + #13 + ' ' (конкатенируйте с новой строкой и пробелом) для проверки.
Создание OLEObject: Проверьте, создается ли OLEObject успешно с помощью CreateOLEObject('Word.Application'). Если это не удается, вам может потребоваться изменение кода или проверка установки Word.
Имена шрифтов: Имя шрифта, присваиваемое MSWord.ActiveDocument.Range.Font.Name, может не быть распознано Delphi. Попробуйте установить известное имя шрифта, например, 'Arial' вместо динамического значения из Word.
Кодировка текста: Возможно, текст кодируется неправильно. Вы можете попробовать добавить AString := MSWord.ActiveDocument.Range.Text; Memo1.Lines.Add(AString); для проверки.
В отношении самого кода, здесь есть некоторые минорные предложения:
Переменная Test не используется в коде, кроме счета имен шрифтов. Рассмотрите удаление ее или использование более описательного имени.
Вы можете объединить два заявления MSWord.ActiveDocument.Range в одно: MSWord.ActiveDocument.Range(Start := 0, End := 0).InsertAfter('Заголовок').ParagraphBreak.
Свойства Font.Name и Font.Size устанавливаются отдельно. Вы могли бы объединить их в одиночное заявление: MSWord.ActiveDocument.Range.Font.Name := 'Arial'; MSWord.ActiveDocument.Range.Font.Size := 24;
Вот обновленная версия вашего кода, которая включает эти предложения:
procedureTForm1.Button1Click(Sender:TObject);varAString:Variant;beginMSWord:=CreateOLEObject('Word.Application');// Word 8MSWord.Documents.Open(FileName:='d:\test.doc',ReadOnly:=True);MSWord.Visible:=1;// Комментируйте, если не хотите отображать файл;fori:=1toMSWord.FontNames.CountdobeginAString:=MSWord.FontNames.Item(i);Memo1.Lines.Add(AString+#13+' ');end;MSWord.ActiveDocument.Range(Start:=0,End:=0).InsertAfter('Заголовок').ParagraphBreak;MSWord.ActiveDocument.Range.Font.Name:='Arial';MSWord.ActiveDocument.Range.Font.Size:=24;AString:=MSWord.ActiveDocument.Range.Text;Edit1.Text:=AString;end;
Если ни одна из этих предложений не поможет, пожалуйста, предоставьте более информации о вашей версии Delphi и точном сообщении об ошибке.
Артикул описывает решение проблемы вывода квадратов вместо букв в Word, используя язык программирования Delphi и компонент OLEAuto для взаимодействия с Microsoft Word.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.