| 
   
    | ...die Rechtschreibprüfung von Word verwenden? |   
    | Autor: 
      Scrap |  | [ Tip ausdrucken ] |  |  |  
 
 
{Die Rechtschreibprüfung von Word kann für die eigene Zwecke verwendet werden.
 
 So funktionierts:
 1. Word mit einem leeren Dokument öffnen
 2. Wort, das zu überprüfen ist, an Word übergeben
 3. Rechtschreibprüfung von Word starten
 4. Ersetztes Wort wieder holen und im Memo wieder einsetzen
 
 Problematik:
 - Einige Wörter werden von Word ignoriert:
 - Wörter mit Zahlen
 - Wörter mit der Länge 1
 - Rechtschreibprüfung lässt sich nicht abbrechen
 - Wenn Word schon geöffnet ist, kann unter Umständen die Rechtschreibprüfung
 nicht gestartet werden (Fehlermeldung: RPC-Server nicht vorhanden)
 }
 
 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;
 
 
 
   
   
    | 
         
          | Bewerten Sie diesen Tipp: |  |  |