Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Высвечивание кода вместо текста   Найти похожие ветки 

 
buka   (2006-10-06 08:57) [0]

Уважаемые знатоки!
Насколько я понимаю правильно, мой вопрос не совсем прост.
Я создаю базу данных на основе таблиц Access, которые связываю c DBRichEdit.
По схеме: RichEdit-DBRichEdit-таблица Eccess пытаюсь загнать данные (текст в формате rtf) в таблицу.
С файлами небольшого размера проблем нет, исключая сам момент записи в таблицу, но с этим я рано или поздно разберусь).
А вот с большими файлами (более 1МБ) возникают проблемы.
1. Уже на стадии открытия файла в RichEdit сначала высвечивается текст, но через 1-2 секунды- код? Я заметил, что этот момент совпадает с моментом образования добавочного файла таблицы. И что любопытно - при повторении операции, т.е. удаления текста из RichEdit и повторного открытия файла такая "бяка" не наблюдается. Текст в RichEdit читается хорошо в том виде в каком он наблюдался в исходном файле (сохраняется полностью форматирование).
2. Вторая "фишка" наблюдается когда этот текст копирую в DBRichEdit: текст высвечивается не весь, а лишь - небольшая часть его. (исходное форматирование текста сохраняется).
???????????????????????????????????????????
==========
И еще м.б. кто-нибудь подскажет: можно ли RichEdit(om) работать с файлами *.DOC ? (RTF - работает; TXT - работает, а вот *.DOC -не хочет)
С уважением


 
Stanislav ©   (2006-10-06 09:08) [1]

И еще м.б. кто-нибудь подскажет: можно ли RichEdit(om) работать с файлами *.DOC ? (RTF - работает; TXT - работает, а вот *.DOC -не хочет)

Нельзя.


 
Desdechado ©   (2006-10-06 10:55) [2]

для работы с DOC и прочими MS-офисными форматами есть специальные компоненты, но они работают толькопри наличи самого офиса на машине

> сначала высвечивается текст, но через 1-2 секунды- код
код чего - символов?

> момент совпадает с моментом образования добавочного файла таблицы
это что за зверь - добавочный файл таблицы?


 
buka   (2006-10-10 06:33) [3]

Доброго времени суток, уажаемые знатоки.
Уточняю.
1. Забудем на время "добавочный файл". Связь между его появлением и высвечиванием кода -предолагаю не более чем совпадение.
2. Точно: при загрузке большого текстового файла (около 2 МБ) в RichEdit и в DBRichEdit - сначала высвечивается текст, нормально читаемый, а затем его код, наверное -символов. Сначала идет что-типа (привожу по памяти) типа rtf1/ansi/ ... и потом набор других символов a0, a4 ... что-то вот такое.
Я обошел эту "бяку" в RichEdit двойной загрузкой текста, т.е.

RichEdit1.LoadFromFile (OpenDialog1.FileName;
RichEdit1.Clear;
RichEdit1.LoadFromFile (OpenDialog1.FileName;
...
Вот тогда- все нормально. "Светится" нормально читаемый текст большой по объему (все 4 части "Гражданского кодекса РФ", взятый из правовой системы "Гарант" и сохраненный в формате RTF).
Еще одна наблюдаемая особенность.
При первой загрузке текста это происходит быстро, а при повторной -видно что загружается файл большого объема.
Приведенный выше "фокус" по смыслу предназначения программы для DBRichEdit -не применим.
Там несколько другая, хотя и похожая "бяка".
1. При попытке скопировать текст из RichEdit в DBRichEdit -он "обрезается" , т.е. высвечивается не вся тысяча с лишним статей Гражданского кодекса, а всего лишь -49.
2. А высвечивание кода символов вместо нормального текста происходит в момент попытки сохранения записи (через DBNavigator) в таблицу Access.
=========
Может быть кто-либо подскажет "физику" того что наблюдается?


 
Виталий Панасенко   (2006-10-10 09:07) [4]

Попробуй присвоить значение RichEdit НЕ DBRichEdit, а полю НД, связанного с этим самым DBRichEdit...


 
Johnmen ©   (2006-10-10 09:15) [5]

Нету у РичЕдита метода LoadFromFile.
Так что где-то ты врёшь...:)))


 
sniknik ©   (2006-10-10 10:27) [6]

> "физику" того что наблюдается?
"физика" скорее всего в том, что ты "заблудился в 3х соснах", вернее в одном свойстве... (чтото там с "плайн" текстом связано)

а решается это не описанием того что происходит, а описанием того как ты это делаеш, точно и правдиво([5]), и что происходит после описанного (а не абстрактно)... раз уж не можеш свою ошибку сам найти, дай ее найти другим, опиши "болезнь" а не последствия.  

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


 
buka   (2006-10-10 14:23) [7]

Спасибо.
Я пишу на работе. Коды все дома. завтра обязательно скопирую и выложу.
В любом случае спасибо за участие и Виталию Панасенко - персонально (буду пробовать).
Sicknik.
Завтра постараюсь выложить все (помню Вы всегда давали грамотные и точные советы; извините если что не так - давно не обращался за помощью).
С уважением


 
buka   (2006-10-11 07:45) [8]

Вот он мой полный код.

procedure Tfm_red.OpenButtonClick(Sender: TObject);
begin
   if OpenDialog1.Execute and FileExists(OpenDialog1.FileName)
  then
  begin
   RichEdit1.Lines.Clear;
  begin
         RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
         RichEdit1.Lines.Clear;
         RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
         RichEdit1.SetFocus;

  end;
end;
end;
==========
Как видите "двойная" загрузка.
Сделано так именно потому, что в случае "однократной" - текст на 0,5 сек. высвечивается нормально, а потом сразу визуально преобразуется в набор символов.
А в DBRichEdit - просто копирую через выпадающее меню.
Ну и дальше как я и объяснял.


 
sniknik ©   (2006-10-11 09:16) [9]

т.е. по коду тут базы и DBRichEdit ни при чем? проблема уже у показанного RichEdit1, он так отображает, и только некоторые файлы?
а DBRichEdit упомянут чтобы отвлечь внимание... как и остальное явно не связанное с кодом... понятно.

тнперь зайди в демосы (папка в дирикториии дельфей) там есть пример редактора на RichEdit (так и называется), не изменяя ничего скомпили его и запусти, открой проблемный файл... симптомы те же? да, значит проблема, надо разбираться, нет, сравнивай параметры у RichEdit-ов.


 
Johnmen ©   (2006-10-11 09:44) [10]

Это всё шаманизм...
А материально-атеистический взгляд говорит нам, что если PlainText, то "набор символов", т.е. файл "как есть", а если не PlainText, то всё Ок.


 
buka   (2006-10-11 09:47) [11]

Спасибо. Буду разбираться.
А RichEdit отображает все файлы БОЛЬШОГО объема.
С маленькими никаких проблем нет.


 
sniknik ©   (2006-10-11 10:49) [12]

> А RichEdit отображает все файлы БОЛЬШОГО объема.
> С маленькими никаких проблем нет.
а, опять откровение... т.е. получается что раз RichEdit отображает все большие файлы, а проблем нет с маленькими, то проблема как раз в том что он их отображает... а с маленькими получается проблем нет, потому их не отображает/не показывает...
странная концепция конечно... но,
простой выход, вместо RichEdit положи другой компанент, имедж например, с пустым фоном, который в принципе текста не отображает. будет не отображать одинаково.


 
buka   (2006-10-12 06:38) [13]

Может быть Вы меня не поняли?
Я хотел сказать, что высвечивание символов кода вместо текста происходит как раз-таки при загрузке текстов большого объема, а с текстами малого объема - проблем нет. Они высвечиваются как надо.
"Image"? Но мне-то надо работать с тестом дальше, т.е. брать какие-то его части, переносить в документ, находящийся в DBRichEdit (тем самым внося изменения в документ, хранимый в базе); или брать документ в целом и через DBRichEdit записывать в базу.
т.е. я пытаюсь разработать универсальный редактор с помощью которого можно вносить изменения, дополнения к нормативным актам, хранящимся в базе Access, или вносить новые документы в базу; осуществлять поиск по базе находя документ, который буду наблюдать в DBRichEdit.
Вот такую задачу поставил сам себе и "колупаюсь" разрешая появляющие проблемы и проблемки. А время для этого у меня -только выходные.
С уважением


 
ANB ©   (2006-10-12 10:23) [14]


> buka   (12.10.06 06:38) [13]

Возьми RXRichEdit. Его не клинит.
ЗЫ. Кстати, сам наблюдал похожую картину - вывожу в RichEdit лог (чтобы был цветным, потом смотреть удобнее). Пока лог маленький - все ОК. Запускаешь что-нибудь большое и толстое, где лог большой - в какой то момент его клинит и он показывает код RTF. Причем верный. Я сохранил его плайном, переименовал, загрузил как RTF - показался. Починилось использованием RX.


 
sniknik ©   (2006-10-12 12:13) [15]

> Возьми RXRichEdit. Его не клинит.
RichEdit тоже не клинит.

> ЗЫ. Кстати, сам наблюдал похожую картину
ну и что? я тоже наблюдал похожую картину, и не раз (не только с этим), и всегда оказывалось, что "сам дурак", чегото не установил в параметрах, чегото не учел/не знал... и т.д. это не повод кидаться искать "неглючные" компаненты, это повод научится лучше разбираться самому...

по проблеме... посмотрел исходник ричедита (ну раз уже 2е таких, что видело то возможно не обманывают...)
вариант с "плайном" возможен, вот сдесь
procedure TRichEditStrings.LoadFromStream(Stream: TStream);
.....
   SendMessage(RichEdit.Handle, EM_STREAMIN, TextType, Longint(@EditStream));
   if (TextType = SF_RTF) and (EditStream.dwError <> 0) then //при ошибке ....
   begin
     Stream.Position := Position;
     if PlainText then TextType := SF_RTF //смена типа
     else TextType := SF_TEXT;
     SendMessage(RichEdit.Handle, EM_STREAMIN, TextType, Longint(@EditStream)); //открытие с новым, как плайн
     if EditStream.dwError <> 0 then  //неполучилось, значит ресурсов не хватает даже на минимум
       raise EOutOfResources.Create(sRichEditLoadFail); //ексепт
   end;
 finally
   if FConverter = nil then Converter.Free;
 end;
end;


т.е. это + описание дает вывод, при первой загрузке нехватка памяти/еще чегото для загрузки всего текста... но эта же первая загрузка их выделяет. и вторая проходит нормально. чего же это может быть? ответ тут же в коде, сразу же после загрузки из стрима в загрузки из файла (загрузка из файла делеется через стрим) стоит RichEdit.DoSetMaxLength($7FFFFFF0);...
как интересно... а вы позаботились обустановке MaxLength у себя? или для того чтобы правильно установить параметры компанента нужно его заменить на другой... в котором другие люди за тебя об этом позаботятся...

итого решение.
вместо
        RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
        RichEdit1.Lines.Clear;
        RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
        RichEdit1.SetFocus;
делай
       RichEdit1.MaxLength:= 2147483632; //или лучше в дизайне тоже самое
       RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);


 
buka   (2006-10-12 14:54) [16]

ой! Я и не ожидал.
Причем ANB объяснил проблему конечно толковее чем я.
Спасибо ОГРОМНЕЙШЕЕ!
С неизменным уважением


 
buka   (2006-10-13 07:00) [17]

Sniknik!
Блестяще!!!!!
(Не дождавшись воскресенья - проверил).
Все сработало, в т.ч. и устранено "обрезание" длинных текстов в DBRichEdit.
Проблема была именно в MaxLength.
=========
Поразила -ваша блестящая логика при решении задачи.
С уважением



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

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.037 c
2-1165250749
novex
2006-12-04 19:45
2006.12.24
Вычисления А в степени Х


15-1164858694
Slider007
2006-11-30 06:51
2006.12.24
С днем рождения ! 30 ноября


4-1155890752
Krants
2006-08-18 12:45
2006.12.24
Расширить DBLookupComboBox


15-1165239877
Завтра
2006-12-04 16:44
2006.12.24
Российские Национальные проекты


2-1165586940
azl
2006-12-08 17:09
2006.12.24
TreeView