Title: How to use the spell check functionality from word
uses Word2000;
function TForm1.IsSatzZeichen(c: CHAR): Boolean;
begin
case c of
'(': Result := True;
')': Result := True;
' ': Result := True;
'.': Result := True;
',': Result := True;
'!': Result := True;
'?': Result := True;
'-': Result := True;
':': Result := True;
';': Result := True;
#$D: Result := True;
#$A: Result := True;
else
Result := False;
end;
end;
procedure TForm1.CheckText(Memo: TMemo);
var
i: Integer;
MySelStart: INTEGER;
Token: string;
Line: string;
ReplaceStr: string;
WordList: TStrings;
varFalse: OleVariant;
begin
// L?uft Word?
if EXE_Running('WINWORD.EXE', False) then
begin
if mrYes = MessageDlg('Word ist ge?ffnet.' + #13 + #10 +
'F¨¹r die Rechtschreibpr¨¹fung muss Word beendet werden.' + #13 + #10 +
'' + #13 + #10 + 'Word abschiessen?', mtWarning, [mbYes, mbNo], 0) then
begin
KillTask('WINWORD.EXE');
end;
end
else
begin
// Startwerte
i := 1;
Line := Memo.Text;
WordList := TStringList.Create;
// Memo traviersieren und einzelne W?rter (Token) rausholen
while not (Line[i] = #0) do
begin
Token := '';
// Tokem zusammenstellen
while not IsSatzZeichen(Line[i]) do
begin
Token := Token + Line[i];
Inc(i);
end;
if Token '' then
begin
// Token speichern
WordList.Add(Token);
end;
if IsSatzZeichen(Line[i]) then
begin
// "Token" speichern
WordList.Add(Line[i]);
Inc(i);
end;
end;
// Verbindung zu Word aufbauen
WordApp.Disconnect;
WordDoc.Disconnect;
WordApp.Connect;
WordApp.Visible := False;
// Leeres Dokument erzeugen
WordDoc.ConnectTo(WordApp.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam));
MySelStart := 0;
// WordList traversieren und auf Rechschreibung pr¨¹fen
for i := 0 to WordList.Count - 1 do
begin
if not IsSatzzeichen(Wordlist[i][1]) then
begin
WordApp.Visible := False;
// WordDokumentinhalt l?schen
WordDoc.Range.Delete(EmptyParam, EmptyParam);
// Token in Word einf¨¹gen
WordDoc.Range.Set_Text(WordList[i]);
// Rechtschreibpr¨¹fung aufrufen
WordApp.Visible := False;
WordDoc.CheckSpelling;
WordApp.Visible := False;
// Resultat von der Rechtschreibpr¨¹fung holen und aufbereiten
ReplaceStr := WordDoc.Range.Get_Text;
WordApp.Visible := False;
ReplaceStr := ReplaceString(ReplaceStr, #$D, '');
// Neues Wort in Memo einf¨¹gen
Memo.SetFocus;
Memo.SelStart := MySelStart;
Memo.SelLength := Length(WordList[i]);
Memo.SelText := ReplaceStr;
WordList[i] := ReplaceStr;
end;
MySelStart := MySelStart + Length(WordList[i]);
end;
MessageDlg('Rechtschreibpr¨¹fung abgeschlossen.', mtInformation, [mbOK], 0);
// Verbindung zu Word abbrechen und Word schliessen ohne zu speichern
WordDoc.Disconnect;
WordApp.Disconnect;
varFalse := False;
WordApp.Quit(varFalse);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Rechtschreibpr¨¹fung durchf¨¹hren
CheckText(Memo1);
end;