Delphi的拼写检查组件

时间:2009-04-04 14:56:15

标签: delphi spell-checking

我们为社区开发的Twitter客户端的一个要求是拼写检查组件。您在应用程序中使用了哪些拼写检查组件/系统以及使用它的经验是什么?

8 个答案:

答案 0 :(得分:11)

Addict Component Suite是Delphi中最完整的一个,但它不是免费的。

但我认为你正在为你的twitter实用程序寻找免费软件,我使用LS Speller进行免费项目并且对我很好,它基于ISpell,所以你可以用更新的dictories来更新它。

但是还没有D2009更新,似乎没有积极开发。

使用MS Word built in dictionary的另一种选择。

答案 1 :(得分:5)

Windows附带拼写检查API(Windows 8)。

TWindow8SpellChecker = class(TCustomSpellChecker)
private
    FSpellChecker: ISpellChecker;
public
    constructor Create(LanguageTag: UnicodeString='en-US');

    procedure Check(const text: UnicodeString; const Errors: TList); override; //gives a list of TSpellingError objects
    function Suggest(const word: UnicodeString; const Suggestions: TStrings): Boolean; override;
end;

实施:

constructor TWindow8SpellChecker.Create(LanguageTag: UnicodeString='en-US');
var
    factory: ISpellCheckerFactory;
begin
    inherited Create;

    factory := CoSpellCheckerFactory.Create;
    OleCheck(factory.CreateSpellChecker(LanguageTag, {out}FSpellChecker));
end;

procedure TWindow8SpellChecker.Check(const text: UnicodeString; const Errors: TList);
var
    enumErrors: IEnumSpellingError;
    error: ISpellingError;
    spellingError: TSpellingError;
begin
    if text = '' then
        Exit;

    OleCheck(FSpellChecker.Check(text, {out}enumErrors));

    while (enumErrors.Next({out}error) = S_OK) do
    begin
        spellingError := TSpellingError.Create(
                error.StartIndex,
                error.Length,
                error.CorrectiveAction,
                error.Replacement);
        Errors.Add(spellingError);
    end;
end;

function TWindow8SpellChecker.Suggest(const word: UnicodeString; const Suggestions: TStrings): Boolean;
var
    hr: HRESULT;
    enumSuggestions: IEnumString;
    ws: PWideChar;
    fetched: LongInt;
begin
    if (word = '') then
    begin
        Result := False;
        Exit;
    end;

    hr := FSpellChecker.Suggest(word, {out}enumSuggestions);
    OleCheck(hr);

    Result := (hr = S_OK); //returns S_FALSE if the word is spelled correctly

    ws := '';
    while enumSuggestions.Next(1, {out}ws, {out}@fetched) = S_OK do
    begin
        if fetched < 1 then
            Continue;

        Suggestions.Add(ws);

        CoTaskMemFree(ws);
    end;
end;

TSpellingError 对象是一个包含四个值的简单包装器:

TSpellingError = class(TObject)
protected
    FStartIndex: ULONG;
    FLength: ULONG;
    FCorrectiveAction: CORRECTIVE_ACTION;
    FReplacement: UnicodeString;
public
    constructor Create(StartIndex, Length: ULONG; CorrectiveAction: CORRECTIVE_ACTION; Replacement: UnicodeString);
    property StartIndex: ULONG read FStartIndex;
    property Length: ULONG read FLength;
    property CorrectiveAction: CORRECTIVE_ACTION read FCorrectiveAction;
    property Replacement: UnicodeString read FReplacement;
end;

答案 2 :(得分:2)

在博客评论中肯肯建议LS Spell使用ISpell词典。它适用于Delphi 5,6和7,因此只要它没有明确使用其他字符串类型就可以正常工作。

答案 3 :(得分:2)

我一直在使用Addict并且对它非常满意。我主要将它与WPTools一起用于邮件合并&amp;发送电子邮件。

答案 4 :(得分:1)

您可以使用Aspell(Win32版本:http://aspell.net/win32/)。

在Delphi项目中,您可以使用命令行管道界面:aspell pipe

C:\Programme\Aspell\bin>aspell pipe
@(#) International Ispell Version 3.1.20 (but really Aspell 0.50.3)

hello
*

world
*

helllo
& helllo 18 0: hello, Helli, hell lo, hell-lo, hell, Heall, hallo, he'll, hullo,  Heller, heller, hellos, Jello, jello, Halli, Holli, hallow, hollow

wourld
& wourld 12 0: world, would, wold, whorled, wield, weld, wild, wooled, whirled, worlds, woulds, word

答案 5 :(得分:1)

我在我的Delphi应用程序中使用TRichView组件作为我的“文本编辑器”。

它支持许多与Delphi一起使用的拼写检查程序。您可能想要比较它支持的那些:

http://www.trichview.com/features/spellcheck.html

答案 6 :(得分:1)

DevExpress VCL也有一个拼写检查器,虽然我只玩过一点。我还拥有我在软件项目中使用的Addict。

答案 7 :(得分:0)

如果您可以保证您的客户端始终安装了MS Word,我建议您使用OLE自动化建立MS Word内置的拼写检查程序。