| 
      ...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: 
		  
		   | 
         
       
     | 
   
 
                      
                       |