2012-04-12 3 views
0

Это расшифровка lib на Synopse delphi open source.Как использовать эту библиотеку Hyphenation в delphi?

Демонстрация представляет собой консольное приложение. Я не знаю, как его использовать в графическом приложении.

Ниже мой тест, но не работает. В нем не отображается слово с дефис (или сепаратор). Lib может быть downloaded here:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, hyphen, StdCtrls; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 
    private 
    procedure testhyphenator; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TForm1 } 

procedure TForm1.testhyphenator; 
var 
    h: THyphen; 
    s: string; 
    F, L: Integer; 
begin 
    s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call? 
    if FileExists(s) then 
    begin 
    F := FileOpen(s, fmOpenRead); 
    L := FileSeek(F, 0, soFromEnd); 
    if L > 0 then 
    begin 
     SetLength(s, L); 
     FileSeek(F, 0, soFromBeginning); 
     FileRead(F, s[1], L);  
    end; 
    FileClose(F); 
    end; 
    h := THyphen.Create(s); 
    h.Execute('pronunciation'); //is this correct? 
    ShowMessage(h.filllist); //not display hyphenated word 
end; 

Он не отображает дефис слово. В демо, я тоже запутался о конструкторе:

H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa'); 
writeln('"',H.Execute('SchiffahrT'),'"'); writeln(H.FillList); 
... 

Автор также прилагается файл OBJ. Если я хочу скомпилировать его в один exe, как это сделать?

Не могли бы вы помочь мне понять, как правильно его использовать?

Большое спасибо.

+1

Не могли бы вы уточнить? * Не работает * - это худшее описание проблемы, которую вы можете использовать. И на ваш вопрос * как связать файл * .obj * используйте файл '{$ LINK.obj '} 'в вашем устройстве. – TLama

+0

@TLama, Спасибо за ответ. См. Править. Я имею в виду, что он не отображает дефисное слово. – Warren

+0

1) Удалось ли вам скомпилировать исходную версию консольного приложения на вашем поле? 2) Какова ваша версия Delphi? – menjaraz

ответ

2

Отказ от ответственности: Я использовал не столь последнее распределение Hyphen, возможно, оно не синхронизируется с latest version.

Вот мои пункты:

Составление распределения

  • Я скомпилированный под Delphi 7, и это OK.

hyphen.rc Файл

  • Там нет hyph_en_EN.dic файла в дистрибутиве. Если вы собираетесь перестроить hyphen.res, вам может понадобиться исправить дефис.гс используя:

дефис Текст HYPH_EN_US.dic

  • Я не проверил hyphen.res файл в распределении кастрированный баран содержит hyph_en_EN.dic и/или hyph_en_US.dic.

* .dic Файлы доступны в моем дистрибутиве

  • hyph_it_IT.dic
  • hyph_es_ES.dic
  • hyph_fr_FR.dic
  • hyp_en_US.dic
  • hyp_de_DE.dic

Ответы на вопросы комментарии в вашем фрагменте

s := 'hyph_en_US.txt'; //this is from the folder, is that correct to call? 

Нет! Правильное расширение файла: .dic. Вы должны написать вместо:

s := 'hyph_en_US.dic; 

Ниже Ok (вы можете обратиться к определению класса THyphen):

Execute('pronunciation'); // is this correct? 

Ниже Ok (но это не работает, потому что h в виде THyphen экземпляр не был инициализирован):

ShowMessage(h.filllist); //not display hyphenated word 

Ваше беспокойство по поводу конструктора

H := THyphen.create('ISO8859-1'#10'f1f'#10'if3fa/ff=f,2,2'#10'tenerif5fa'); 

Это только один из правильных способов настройки THyphen (см. Еще раз определение класса THyphen).

Например:

H := THyphen.create('EN'); 

обуздывать дефис в GUI приложение с помощью Delphi 2007

  • Я могу сказать, что это нормально, так долго, как THyphen экземпляр правильно построен (Не забудьте включить hyphen.res ресурс файла с кодом {$R hyphen.res}, файл hyphen.obj уже установлен в блок hyphen.pas).

Последнее, но не менее

  • Не стесняйтесь связаться с Arnaud Bouchez великим человеком за Synopse. Он является членом Stackoverflow и всегда готов помочь наверняка, а также топ .
+0

Большое спасибо за подробное объяснение. Я проверил ваш код, теперь все в порядке. Процедура генерирует возможные точки разрыва в виде дефиса. «произношение» генерирует pro = nun = ci = ation. Может ли он использоваться в качестве обнаружения слога. Если да, то как я могу изменить этот файл dic для разделения «ation» на «a = tion» и, наконец, pro = nun = ci = a = tion? Или вы можете направить меня на ресурс для дальнейшего изучения? Еще раз спасибо. – Warren

+0

Добро пожаловать. Я должен признаться вам: я ничего не знаю о переносе, я просто углубился в исходный код и старался как можно больше, чтобы решить ваши проблемы. Я предлагаю вам опубликовать еще одну запись и попытался привлечь внимание автора дефиса, который я привел. – menjaraz

1

У меня нет моей установки Delphi, поэтому поймите, что вам может понадобиться немного подкорректировать ее.

Посмотрев на дефис, я считаю, что вы используете его неправильно. Параметром конструктора является язык или набор символов.

h := THyphen.Create('UTF-8'); 

или (в зависимости от вашего имени файла, я думаю, что вам нужно это следующий)

h := THyphen.Create('EN'); 

Затем «Выполнить» используется для создания дефисов строки, переданной в. «Выполнить» это функция, которая возвращает новую строку. Вы называете это, но ничего не делаете с результатом.

NewStr := h.Execute('correct'); 

«NewStr» теперь должен быть равен «правильному».

Если я правильно прочитал код, функция и процедура «FillList» вернет список всех возможных возможностей переносов для последнего слова, которое было выполнено Execute'd.

+0

Большое спасибо. Вы правы, я не использую его правильно. Я проверил ваш код, Filllist генерирует список, каждая строка указывает один разделитель. Но я не могу разделить принятый ответ. – Warren

+0

Нет проблем. Рад, что смог помочь. Более важно, чтобы вы получили то, что вам нужно, чем получить точки решения. Кроме того, menjaraz смог скомпилировать и протестировать вас. ;) – JerseyMike

Смежные вопросы