Форум: "Базы";
Текущий архив: 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.047 c