Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.02.15;
Скачать: [xml.tar.bz2];

Вниз

Компонент RichEdit   Найти похожие ветки 

 
NNK_RTR ©   (2014-01-10 13:32) [0]

Занимаюсь переводом встроенной в ollydbg 2.00 справки. В качестве словарика используется RichEdit (чтобы отображать форматированный текст). в процессе перевода в RichEdit (программно) методом Add вставляются разделители фрагментов (nnn и qqq), а между ними, методом PasteFromClipboard, сам фрагмент:

nn:=Form1.RichEdit2.Lines.Add("nnn")+1;//номер первой строки фрагмента
 Form1.RichEdit2.SelStart:= Length(Form1.RichEdit2.Text)-1;//
 Form1.RichEdit2.PasteFromClipboard; //
 Form1.RichEdit2.Lines.Add("qqq");//добавим разделитель


Все происходит нормально. Но при сохранении и последующем открытии документа (словарика), некоторые разделители "nnn" и "qqq", самопроизвольно сдвигаются влево (на один или несколько пробелов). Причем, какой именно сдвинется (или какие) - непредсказуемо. Может сдвинуться любой. (если открыть в Word, то если сдвинуто на один пробел, то Word этого не видит, на два - видит). Написал специальную программку, которая может только открывать и сохранять словарик (методами LoadToFile и SaveToFile), происходит тоже самое. Даже глазами видно, как разделитель сдвигается. Я не нашел никакой системы, почему сдвигается конкретный разделитель. Может сдвинуться (или не сдвинуться) любой. Их больше 2000. Пользуюсь DELPHI 10 в системе WINDOWS 7.

С уважением, Николай.


 
MBo ©   (2014-01-10 14:33) [1]

Как указанные фрагменты могут сдвигаться влево, если Lines.Add добавляет их с новой строки?


 
Германн ©   (2014-01-10 14:44) [2]


> между ними, методом PasteFromClipboard, сам фрагмент

Сам фрагмент откуда берется? И как он отформатирован?


 
NNK_RTR ©   (2014-01-10 16:07) [3]

Если коротко.
Сначала в ollydbg был дописан код, который перехватывает фрагменты встроенной справки по мере их поступления, составляет из них строку, вставляя между фрагментами разделители (<>) и передает строку в буф. обмена.
Программа, о которой идет речь, исследует буф. обмена, разделяет строку на фрагменты и предлагает их для перевода.
Перевод осуществляется в RichEdit1 вручную (и форматируется вручную), потом, переведенный фрагмент копируется и вставляется в RichEdit2 (через буфер обмена), в котором и сохраняется (потом используется для компиляции текста переведенной справки). Фрагменты могут состоять из нескольких строк, чтобы разделить фрагменты друг от друга используются разделители (nnn и qqq). Они правильно добавляются с новой строки, а сдвигаются самопроизвольно в процессе сохранения и (или) загрузки. Собственно в этом и состоит вопрос:
"Как указанные фрагменты могут сдвигаться влево, если Lines.Add добавляет их с новой строки?"
В приведенном мной коде существует вроде бы необязательная строка:
Form1.RichEdit2.SelStart:= Length(Form1.RichEdit2.Text)-1;//
Поскольку Lines.Add не только добавляет строку, но и (видимо) переводит на новую, по крайней мере, сначала я обходился без этой строки. Но потом обнаружил, что иногда метод PasteFromClipboard вставляет фрагмент на той же строке, что и разделитель. Меня тогда еще удивило такое своеволие. Не стал вникать, просто добавил вышеуказанную строку. Сначала все было нормально, но потом, опять таки не всегда, следующее добавление признака начала фрагмента (nnn), добавляло его не с новой строки!, а в строку с признаком конца фрагмента (получалось qqqnnn). Я добавил еще строку, целиком фрагмент кода:
//добавим измененный фрагмент в конец перевода
  nn:=Form1.RichEdit2.Lines.Add("nnn")+1;//номер первой строки фрагмента
  Form1.RichEdit2.SelStart:= Length(Form1.RichEdit2.Text)-1;////////
  Form1.RichEdit2.PasteFromClipboard; //
  Form1.RichEdit2.Lines.Add("qqq");//добавим разделитель
  // в некоторых случаях, почему-то, нужно добавлять новую строку
  if (Length(Form1.RichEdit2.Text)- Form1.RichEdit2.Lines.Count)<Form1.RichEdit2.SelStart then Form1.RichEdit2.Lines.Add("");

И посчитал, что справился с проблемой, но тут возникла следующая...
Провозился, пытался сам понять, недели 2-3, и решил обратиться за помощью к спецам. Обидно просто, справка переведена, в принципе все работает, и если не предоставлять возможности пользователю редактировать или переводить не переведенные фрагменты, то можно и опубликовать. Но это будет неправильно. (Зачастую, текст справки зависит от операндов команды, а перебрать все их варианты невозможно)

С уважением, Николай.


 
Германн ©   (2014-01-10 16:30) [4]

Имхо надо разбираться с исходным форматированием тех самых фрагментов. В частности смотреть на количество и "качество" переводов строки.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.02.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1405339413
KSergey
2014-07-14 16:03
2015.02.15
Проблема: неожиданная реакция на клик мыши в открывшемся окне


15-1405114611
alexdn
2014-07-12 01:36
2015.02.15
Перевод программы


2-1388863635
ghostdelvonte
2014-01-04 23:27
2015.02.15
Стрелки


15-1405172152
Пит
2014-07-12 17:35
2015.02.15
Лучшее средство разработки для WEB


15-1405400323
brother
2014-07-15 08:58
2015.02.15
Лицензирование WinXP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский