Delphi - Helyesírás ellenőrzés saját alkalmazásunkban

forráskód letöltése
Mellékelt példában egy olyan komponenst készítünk, mely segítségével egy tetszőleges szöveg helyesírását ellenőrizhetjük le. Az ellenőrzéshez a Word helyesírás ellenőrzőjét használjuk fel úgy, hogy a felhasználó számára a Word láthatatlan marad. Ha az adott szövegben egy-egy szó hibásnak bizonyul, akkor kapunk egy listát azokról a szavakról, hogy a Word mit ajánl helyette. Ekkor felhasználói beavatkozás mellett kicserélhetjük a hibás szót egy jóra. A mellékelt példaprogram megnyitása előtt a SpellChecker.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Mivel a komponens a Word helyesírás ellenőrzőjét használja, így nem árt, ha az adott gépre telepítve van a Word a magyar nyelvű helyesírás ellenőrzővel együtt.

A komponens használatához az Execute függvényt kell meghívnunk. Paraméterként adjuk át azt a sztringet, melynek a helyesírás ellenőrzését el kell végezni. A függvény visszatérési értéke ez a paraméterként kapott sztring lesz, viszont ha volt benne hiba és az javításra került, akkor már ezt a javított verziót kapjuk vissza.

Amikor hibás szót talál a komponens a szövegben, akkor jön létre az OnError esemény. Az eseménykezelő eljárásban kapunk egy Word nevű paramétert, melyben a hibás szó található. A Replace nevű paraméterben pedig megadhatjuk azt a sztringet, amelyre ezt a hibás szót kicserélhetjük. Ebben segítségünkre lehet a komponens Suggestions property-e, mely TStringList típusú. Az OnError futása alatt ebben a property-ben az aktuális hibás szóhoz tartozó helyes szavak listája található.

Nézzük most a komponens megvalósítását. Első lépésként a konstruktornál létrehozunk egy Word objektumot.
constructor TSpellChecker.Create(AOwner: TComponent);
begin
  inherited;
  FSuggestions:=TStringList.Create;
  try
    FWordApplication:=CreateOleObject('Word.Application');
    FWordApplication.Documents.Add;
    FOk:=true;
  except
    FOk:=false;
  end;
end;
Amikor az Execute kerül meghívásra, akkor egy ciklussal karakterenként végignézzük a paraméterében kapott sztringet. Amikor a cikluson belül eljutunk egy szó végéig, akkor kerül sor az adott szó helyesírásának ellenőrzésére. Ehhez a CheckWord belső függvényt hívjuk meg, paraméterként átadva az ellenőrizendő szót. Visszatérési értékként igaz értéket kapunk, ha a szó helyesen van leírva. Ebben az esetben ezt a szót is hozzáadjuk az Execute visszatérési értékéhez, mely majdan a teljes leellenőrzött szöveget fogja tartalmazni. Ha a CheckWord hamis értékkel tér vissza, akkor hozzuk létre az OnError eseményt. Itt a replace nevű paraméterbe kapjuk vissza azt a szót, melyre cserélnünk kell a hibásat. Ha ennek értéke viszont null sztring, akkor a felhasználó elutasította a cserét, így az eredményhez a Word által hibásnak ítélt szót adjuk hozzá a végeredményhez.

Nézzük mi is történik a CheckWord függvényben. Első lépésként törüljük a Suggestions property tartalmát, mivel itt az előző hibás szó cseréjére felkínált szavak lehetnek. Ezek után felhasználva a létrehozott kapcsolatot a Word-el, meghívjuk annak CheckSpelling nevű függvényét átadva neki a paraméterként kapott szót ellenőrzésre. Ha hamis értéket kapunk, akkor a szó hibás. Ebben az esetben a GetSpellingSuggestions függvénnyel lekérjük, hogy mit javasol a hibás szó helyett a Word. Ehhez egy SpellingSuggestions típusú objektumot kapunk. Ennek Count property-éből tudhatjuk meg, hogy hány javasolt szót ajánl a Word. Egy ciklus segítségével feltöltjük a Suggestions property-nket úgy, hogy az egyes javaslatokat a SpellingSuggestions osztály Item függvényével lekérdezzük.
function TSpellChecker.CheckWord(s: string): boolean;
var
  i: integer;
begin
  FSuggestions.Clear;
  result:=FWordApplication.CheckSpelling(s);
  if not result then begin
    FSpellingSuggestions:=FWordApplication.
        GetSpellingSuggestions(s);
    for i:=1 to FSpellingSuggestions.Count do begin
      FSuggestions.Add(FSpellingSuggestions.Item(i));
    end;
  end;
end;