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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.044 c
3-1160560049
MN
2006-10-11 13:47
2006.12.24
Как вывести список пользователей базы


2-1164702053
Mishenka
2006-11-28 11:20
2006.12.24
Повторный запуск программы


8-1145348353
Quattro
2006-04-18 12:19
2006.12.24
Эффект воды в 2D


15-1164876089
Anatoly Podgoretsky
2006-11-30 11:41
2006.12.24
Перепись


2-1165553803
Алексей С.
2006-12-08 07:56
2006.12.24
Удаление Run-Time элементов управления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский