Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Выбор компонентов


Автор: Dmi3ev 2.4.2009, 22:35
Мне необходимо выбрать компоненты для реализации проекта, сам посмотрел кое-что, но нуждаюсь в совете:
1) компонент, для отображения большого количества информации (текстовой), 500-1000 страниц, можно ли взять RichEdit за основу?
просто мне придется реализовывать там свои функции, а не хотелось бы потом все менять, хоть придется по большому счету и копипастить, но все же...
тут же возникает вопрос, когда я буду создавать компонент на основе RichEdit: как это делать??? в Бормане не сталкивался с этим... (в дельфи че-то делал)
2) графики решил строить в TChart, потянет ли большой объем???
3) настройки программы (окон, шрифтов и тд) решил хранить в ини... знаю что можно в реестре, но как не знаю, поэтому решил в ини...
4) еще нужно немного рисовать будет, сколько можно нарисовать с помощью Canvas, просто в OpenGl я недавно только начал что-то делать... поэтому... хз, лучше по старинке...
Для начала все...

Автор: Anikmar 2.4.2009, 22:43
По поводу 1-го вопроса - пару лет назад здесь на форуме проверяли TMemo и RichEdit на прочность. Как-то там все кисло получалось - обязательно поройтесь, поищите по форуму - может такой объем ричу и не слопать.
2 - не знаю
3 - Советую пока не заморачиваться и делать как удобнее
4 - Смотря что там за графика, однако.

Автор: Dmi3ev 2.4.2009, 22:46
Цитата

4 - Смотря что там за графика, однако. 

графика такая, что с помощью канваса рисовать можно, но где-то встречал, что много с помощью него много не нарисуешь... те неправильно так делать...

Добавлено @ 22:46
Anikmar, а компонент свой создавать как??? расскажите поподробней

Добавлено @ 22:48
Цитата

По поводу 1-го вопроса - пару лет назад здесь на форуме проверяли TMemo и RichEdit на прочность. Как-то там все кисло получалось - обязательно поройтесь, поищите по форуму - может такой объем ричу и не слопать.

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

Добавлено @ 22:55
http://www.citforum.ru/programming/cpp/ole_ax3.shtml
http://www.sysman.ru/index.php?showtopic=8423
тут смотрел, но че-то...

Автор: Лена 2.4.2009, 22:57
Может для работы с большими объемами текста использовать сервер автоматизации Word? Все необходимые компоненты для Word имеются в Builder по умолчанию. Word возмет на себя всю работу с текстом и уже из него получать нужные данные в программу. Правда, необходимо наличие Word на компьютерах пользователей.

Цитата(Dmi3ev @  2.4.2009,  22:46 Найти цитируемый пост)
а компонент свой создавать как??? расскажите поподробней

Написание компонентов очень подробно рассмотрено в этой книге: http://www.books.ru/shop/books/341882
может, есть где-то в  электроном виде.


Автор: Dmi3ev 2.4.2009, 23:04
Цитата

Может для работы с большими объемами текста использовать сервер автоматизации Word?

оно конечно можно, но пользователь должен делать только то что я ему позволю, а в ворде будет сложновато за ним следить, там многовато возможностей... при этом при работе с текстом мне нужны будут некоторые необычные функции, собственно из-за этого и хочу переделать стандартный компонент под себя...
проще реализовать это с помощью какого либо компонента... только какого???
Цитата

Написание компонентов очень подробно рассмотрено в этой книге: http://www.books.ru/shop/books/341882
может, есть где-то в  электроном виде.

спасибо, качну...

Автор: mrbrooks 3.4.2009, 07:54
1. RichEdit вещь кошерная. Особенно в 2009. Здесь он базируется на второй версии winapi контрола.
2. Зер гуд.
3. Для работы с реестом в Бормане есть классы. Использовать их не сложнее ini.
4. Зависит от того, что рисовать надо.

Автор: THandle 3.4.2009, 08:05
Цитата(Dmi3ev @  2.4.2009,  23:35 Найти цитируемый пост)

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


http://forum.vingrad.ru/articles/topic-200341.html

Хотя я бы, наверное, использовал какой нить XML.

Цитата(Dmi3ev @  2.4.2009,  23:35 Найти цитируемый пост)
4) еще нужно немного рисовать будет, сколько можно нарисовать с помощью Canvas, просто в OpenGl я недавно только начал что-то делать... поэтому... хз, лучше по старинке...
Для начала все...


Ну, можно посмотреть компоненты http://www.google.ru/url?sa=t&source=web&ct=res&cd=3&url=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fgraphics32&ei=4JXVSdWlNNiNsAaZrZyVDw&usg=AFQjCNF_iEfD5Vad6XQNj5uvZV-pbCsmYA&sig2=dzuBNwIq4PzBDZ7aLSFk1Q.

Автор: Dmi3ev 3.4.2009, 08:37
Цитата

1. RichEdit вещь кошерная. Особенно в 2009. Здесь он базируется на второй версии winapi контрола.

а делать я буду на шестерке... покатит???

Добавлено через 22 секунды
THandle, спасибо, надо будет разобраться...

Автор: Anikmar 3.4.2009, 08:48
Цитата(Dmi3ev @  2.4.2009,  22:46 Найти цитируемый пост)
Anikmar, а компонент свой создавать как??? расскажите поподробней

ИМХО и еще раз ИМХО
В своей практике я создал только один простенький визульный компонент (в смысле не пробный, а тот, который затем использовал). Это некое подобие TDBEdit с несколькими добавленными наворотами. В общем провозился я с ним наверное дня два, если не больше и лично для себя сделал вывод: если я не собираюсь целенаправленно заниматься разработкой компонент - то это мне не нужно. Особенно, если проектом занимаешься на разных машинах.
Когда мне понадобилось расширить еще один визуальный компонент (DBGrid - мне нужно было его хорошо раскрасить, автоматически выравнивать ширину столбцов при изменении размера окна, выводить кнопочки в ячейках и т.п.) - я отказался от создания компонента и создал свой класс обертку, в который при инициализации передаю стандартный грид и он с ним делает что хочет.
В результате при переносе из шестерки в 2006 и позже в 2009 первый компонент пришлось пересобирать и устаналвиать, а вот класс обертка ничего не потребовал - откомпилил и все.

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

Само по себе создание компонента дело не сложное, но какое-то неудобное, что-ли. В общем не мое.

Но это лишь мое мнение - тут кто как сам знает. Мне лично не понравилось создавать компоненты, но это не значит, что их не надо создавать. Кому-то может и понравится. Так что попробуйте, поиграйтесь - может вам и пойдет.

Что касается невизуальных компонентов - то тут я считаю, что класс обертка получается намного быстрее. Конечно редактор свойств дело хорошее, но это если продавать компонент. Если использовать для себя - то проще обертку сделать и без всяких редакторов в дезайн-режиме обойтись. Это тоже ИМХО.

Добавлено через 2 минуты и 39 секунд
Цитата(mrbrooks @  3.4.2009,  07:54 Найти цитируемый пост)
1. RichEdit вещь кошерная. Особенно в 2009. Здесь он базируется на второй версии winapi контрола.

Если бы эта кошерная вещь еще правильно rtf обрабатывала...

Автор: Dmi3ev 3.4.2009, 08:57
Я тоже особо компонентов не создавал, но подумал, что если это сделать, то это будет на века, те как-то надежно, не потеряется, не сломается, не хз, что там еще... 
Цитата

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

да мне просто с текстом надо будет делать некоторые необычные вещи, поэтому либо писать что-то для работы с компонентом, либо компонент (что хотелось бы, как-то это больше мне нравится, может и зря)...

Автор: mrbrooks 3.4.2009, 08:59
Цитата(Dmi3ev @  3.4.2009,  08:37 Найти цитируемый пост)
а делать я буду на шестерке... покатит???

хз  smile 

Цитата(Anikmar @  3.4.2009,  08:48 Найти цитируемый пост)
Если бы эта кошерная вещь еще правильно rtf обрабатывала... 

для RAD-системы все очень даже по-эротомански. Иначе пишем все на WinAPI  smile

Добавлено через 7 минут и 14 секунд
Цитата(Dmi3ev @  3.4.2009,  08:57 Найти цитируемый пост)
да мне просто с текстом надо будет делать некоторые необычные вещи, поэтому либо писать что-то для работы с компонентом, либо компонент (что хотелось бы, как-то это больше мне нравится, может и зря)... 

имхо - это самый верный выход

Автор: Dmi3ev 3.4.2009, 09:23
написал для пробы
Код

RichEdit1->Lines->LoadFromFile("D:\\uk.rtf");

и программа повисла (не отвечает)... может еще что-то надо для таких объемов (порядка 350 страниц в ворде)???
а в 2009 такое проканает???

Автор: mrbrooks 3.4.2009, 09:30
Dmi3ev, для работы с rtf друг мой в RichEdit , его свойство PlainText д.б. = true

Автор: Anikmar 3.4.2009, 09:32
Цитата(Dmi3ev @  3.4.2009,  08:57 Найти цитируемый пост)
да мне просто с текстом надо будет делать некоторые необычные вещи, поэтому либо писать что-то для работы с компонентом, либо компонент (что хотелось бы, как-то это больше мне нравится, может и зря)... 

Попробуйте.
По большому счету - собственный компонент это тот же класс, с добавлеными возможностями по дезайн-режиму (соответственно  с сериализацией). Если свойств, которые настраиваются в дезайне и меняются достаточно часто, много - то скорее всего компонент будет удобнее. А вот сколько времени у вас на него уйдет - это не прогнозируемо. Возможно вы гораздо бустрее меня вникнете в суть и нашлепаете его за неделю.


Цитата(mrbrooks @  3.4.2009,  08:59 Найти цитируемый пост)
для RAD-системы все очень даже по-эротомански. Иначе пишем все на WinAPI  

Недавно обсуждалось как в рич вставить разрыв страницы. Как раз WinAPI понадобилась.

Автор: Dmi3ev 3.4.2009, 09:36
Цитата

Dmi3ev, для работы с rtf друг мой в RichEdit , его свойство PlainText д.б. = true 

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

Автор: mrbrooks 3.4.2009, 09:37
Dmi3ev, можешь выложить этот *.rtf сюды?

Автор: Dmi3ev 3.4.2009, 09:45
вот! я его получил таким путем:
открыл документ ворд, нажал сохранить как и сохранил вот так...

Автор: mrbrooks 3.4.2009, 09:46
Цитата(Dmi3ev @  3.4.2009,  09:45 Найти цитируемый пост)
вот! я его получил таким путем:
открыл документ ворд, нажал сохранить как и сохранил вот так... 

оно понятно. тут главное что бы один документ был. ща заценю.

Добавлено через 2 минуты и 58 секунд
Цитата(Dmi3ev @  3.4.2009,  09:45 Найти цитируемый пост)
вот! я его получил таким путем:
открыл документ ворд, нажал сохранить как и сохранил вот так... 

оно понятно. тут главное что бы один документ был. ща заценю.

Добавлено через 6 минут и 38 секунд
Dmi3ev, плохой тебе совет я дал с PlainText. Не используй его.
Дело в том что твой файл тянет на 4 метра. Тут и Ворд заклинит. Мое предложение - использовать TFileStream и повесить на гуй индикатор загрузки.

Добавлено через 11 минут и 51 секунду
И поток присобачить не мешает

Автор: Dmi3ev 3.4.2009, 11:35
я че-то делаю как олень))) но не в этом суть)))
возникли проблемы, если пишу так:
Код

        char buf[256];
        TFileStream *fi=new TFileStream("D:\\uk.txt", Sysutils::fmOpenRead);
        fi->Seek(0, soFromBeginning);
        while ((fi->Position)<(fi->Size))
        {
                fi->ReadBuffer(buf, sizeof(buf));
                ShowMessage(buf);
                RichEdit1->Lines->Add(buf);
                Label1->Caption=IntToStr(fi->Position)+"/"+IntToStr(fi->Size);
        }

то все относительно хорошо (текст добавляется, лейбл обновляется), но в конце возникает ошибка ereaderror stream error, да бог с ней (http://www.freepascal.org/docs-html/rtl/classes/ereaderror.html), суть не в этом... так вот а если закомментить строку:
Код

                ShowMessage(buf);

то ничего не обновляется, поэтому каждый раз в цикле (в конце) пишу (пока это единственный выход, который придумал, который прост):
Код

                Form1->Refresh();

ЗЫ как узнать, что конец уже, дальше грузить не надо... понимаю, что (fi->Position)<(fi->Size) глуповатое условие...

Автор: THandle 3.4.2009, 11:58
Dmi3ev, я бы такие большие файлы не стал бы сразу грузить и отображать. Можно было бы хранить все это в каком то куске памяти(типа TStream), и по мере надобности подгружать это в RichEdit... Можно даже попробовать подгрузку осуществлять с помощью доп. потока.

Цитата(Dmi3ev @  3.4.2009,  12:35 Найти цитируемый пост)
ЗЫ как узнать, что конец уже, дальше грузить не надо... понимаю, что (fi->Position)<(fi->Size) глуповатое условие...


Не вижу тут ничего глупого smile

Кстати IntToStr в подобном цикле будут очень сильно тормозить программу.

Автор: mrbrooks 3.4.2009, 12:20
Цитата(Dmi3ev @  3.4.2009,  11:35 Найти цитируемый пост)
ЗЫ как узнать, что конец уже, дальше грузить не надо... понимаю, что (fi->Position)<(fi->Size) глуповатое условие...


типа этого.

Код

        char buf[256];
        int nRead;
        TFileStream *fi=new TFileStream("D:\\uk.txt", Sysutils::fmOpenRead); //здесь бы я использовал std::auto_ptr
        fi->Seek(0, soFromBeginning);
       do
        {
                nRead = fi->Read(buf, sizeof(buf));
                RichEdit1->Lines->Add(buf);
                Label1->Caption=IntToStr(fi->Position)+"/"+IntToStr(fi->Size);  //зачем это - вломи ProgressBar
                Application->ProcessMessages();
        }
        while(nRead);

Автор: xvr 3.4.2009, 17:10
Конструкция
Код

                fi->ReadBuffer(buf, sizeof(buf));
                RichEdit1->Lines->Add(buf);
порубит загружаемый файл в капусту  smile RichEdit1->Lines->Add добавляет строки, а ReadBuffer читает куски из файла, не обращая внимания на границы строк.

Автор: Dmi3ev 3.4.2009, 21:27
Цитата

порубит загружаемый файл в капусту  smile RichEdit1->Lines->Add добавляет строки, а ReadBuffer читает куски из файла, не обращая внимания на границы строк.

я это понимаю, но пока задача хоть как-то это загрузить, а далее буду все расчитывать и предусматривать
Цитата

Кстати IntToStr в подобном цикле будут очень сильно тормозить программу. 

тоже учту потом, сделал это для себя... пока... чтобы визуально наблюдать процесс...
Цитата

//зачем это - вломи ProgressBar

пока это не принципиально... важна сама загрузка... 
задача стоит в том, чтобы загрузить текст большого объема, и при этом чтобы не екнулось все...

Автор: xvr 3.4.2009, 21:40
Цитата(Dmi3ev @ 3.4.2009,  21:27)
задача стоит в том, чтобы загрузить текст большого объема, и при этом чтобы не екнулось все...

Поставь эксперимент - открой свой 'файл большого объема' в WordPad'е Там как раз RichEdit20W

Автор: Dmi3ev 3.4.2009, 22:01
Цитата

порубит загружаемый файл в капусту  smile RichEdit1->Lines->Add добавляет строки, а ReadBuffer читает куски из файла, не обращая внимания на границы строк.

теперь вот это надо действительно победить, как можно сделать что-то типа, только более быстрое...
Код

RichEdit1->Text=RichEdit1->Text+buf;

потому как так будет тормозить ужасно... хотя думаю, сработает...

Автор: Anikmar 3.4.2009, 23:00
Цитата(Dmi3ev @  3.4.2009,  22:01 Найти цитируемый пост)
потому как так будет тормозить ужасно... хотя думаю, сработает... 

А чего не ->Lines->Add ? Зачем сто раз такие объемы гонять?

Автор: xvr 3.4.2009, 23:11
Цитата(Dmi3ev @ 3.4.2009,  22:01)
теперь вот это надо действительно победить, как можно сделать что-то типа, только более быстрое...
Код

RichEdit1->Text=RichEdit1->Text+buf;

потому как так будет тормозить ужасно... хотя думаю, сработает...

Будет тормозить. Что бы не тормозило надо сделать так -
Код

int pos=0;

RichEdit1->SelStart=pos; 
RichEdit1->SelLegth=0; 
RichEdit1->SelText=String(buf,nRead);
pos+=nRead;
Еще более ускорить можно перейдя на нижний уровень работы с RichEdit и отсылать ему текст непосредственно, вместо присваивания SelText. Это сэкономит формирование сроки (заказ памяти, копирование, удаление памяти)

PS. RichEdit собственно справляется, проверил?

Автор: Dmi3ev 4.4.2009, 07:24
Цитата



Anikmar, ты не в теме...

xvr, спасибо, но думаю, того, что ты предложил хватит пока...
Цитата

PS. RichEdit собственно справляется, проверил?

Да, тянет, еще как! Пока только на тхт проверял, но работает довольно быстро... 
 

Автор: Anikmar 4.4.2009, 09:54
Цитата(Dmi3ev @  4.4.2009,  07:24 Найти цитируемый пост)
Anikmar, ты не в теме...

Не понял?

Автор: xvr 4.4.2009, 09:59
Цитата(Anikmar @ 4.4.2009,  09:54)
Цитата(Dmi3ev @  4.4.2009,  07:24 Найти цитируемый пост)
Anikmar, ты не в теме...

Не понял?

См. http://forum.vingrad.ru/index.php?showtopic=254012&view=findpost&p=1832281 и http://forum.vingrad.ru/index.php?showtopic=254012&view=findpost&p=1832716. Теперь понял?  smile 

Автор: Anikmar 4.4.2009, 11:06
Цитата(xvr @  4.4.2009,  09:59 Найти цитируемый пост)
См. сюда и сюда. Теперь понял?   

Краткость не всегда сестра таланта. Я имел  виду, что метод Add неплох - надо  только буфер парсить перед добавлением, чтобы построчно добавлять. Но теперь знаю, что и это не вариант:
Ворд открыл этот файл за 1 минуту
Вордпад - 22 секунды
RichEdit - не знаю, до сих пор открывает (минут 10 прошло) - причем подвесил комп минут на 5 так, что даже NumLock не срабатывал. (Открываю тупо LoadFromFile)

Из этого вывожу свое ИМХО:
Использовать RichEdit для таких громадных файло не получится. Как они там это внутри делают не знаю, - можно поковырять исходник рича и переделать его по-своему, но все-таки не то.
Второе ИМХО:
Хотелось бы подробнее узнать постановку задачи. Чует мое сердце, что тут все можно быстрее организовать - небольшая промывка мозгов пользователям и перестройка подхода к системе.

Автор: xvr 4.4.2009, 12:08
Цитата(Anikmar @ 4.4.2009,  11:06)
Цитата(xvr @  4.4.2009,  09:59 Найти цитируемый пост)
См. сюда и сюда. Теперь понял?   

Краткость не всегда сестра таланта. Я имел  виду, что метод Add неплох - надо  только буфер парсить перед добавлением, чтобы построчно добавлять. Но теперь знаю, что и это не вариант:
Ворд открыл этот файл за 1 минуту
Вордпад - 22 секунды
RichEdit - не знаю, до сих пор открывает (минут 10 прошло) - причем подвесил комп минут на 5 так, что даже NumLock не срабатывал. (Открываю тупо LoadFromFile)

RichEdit нужен правильный - 2.0 и Unicode. WordPad использует именно его

Цитата

Из этого вывожу свое ИМХО:
Использовать RichEdit для таких громадных файло не получится. Как они там это внутри делают не знаю, - можно поковырять исходник рича и переделать его по-своему, но все-таки не то.
Нету у него исходника - используется стандартный виндовый RichEdit контрол. 2006 CG использует версию 1.0, причем Ansi. 2009го у меня нет - посмотреть не могу  smile Если там 2.0W - то все срастется

Цитата

Второе ИМХО:
Хотелось бы подробнее узнать постановку задачи. Чует мое сердце, что тут все можно быстрее организовать - небольшая промывка мозгов пользователям и перестройка подхода к системе.
С этим согласен  smile 
Вообще идея показывать пользователю документ на тысячи страниц, list box'ы с сотнями тысяч элементов, картинки с тысячами элементов на них и пр. гигантоманские планы могут быть на ура встречены только закоренелыми мазохистами в 3м поколении  smile
Сделать такой интерфейс можно, но подумайте о своих пользователях - им же придется часами сидеть перед экраном, что бы среди всей этой кучи хлама найти крупицу информации, которая их интересует. Иголку в стоге сена найти будет проще  smile 

Автор: Anikmar 4.4.2009, 12:39
Цитата(xvr @  4.4.2009,  12:08 Найти цитируемый пост)
Нету у него исходника - используется стандартный виндовый RichEdit контрол. 2006 CG использует версию 1.0, причем Ansi. 2009го у меня нет - посмотреть не могу   Если там 2.0W - то все срастется

Я проверял на 2009. А как узнать версию?

Цитата(xvr @  4.4.2009,  12:08 Найти цитируемый пост)
Вообще идея показывать пользователю документ на тысячи страниц, list box'ы с сотнями тысяч элементов, картинки с тысячами элементов на них и пр. гигантоманские планы могут быть на ура встречены только закоренелыми мазохистами в 3м поколении  
Сделать такой интерфейс можно, но подумайте о своих пользователях - им же придется часами сидеть перед экраном, что бы среди всей этой кучи хлама найти крупицу информации, которая их интересует. Иголку в стоге сена найти будет проще    

Целиком и полностью согласен.

Автор: Dmi3ev 4.4.2009, 15:35
Цитата

Вообще идея показывать пользователю документ на тысячи страниц, list box'ы с сотнями тысяч элементов, картинки с тысячами элементов на них и пр. гигантоманские планы могут быть на ура встречены только закоренелыми мазохистами в 3м поколении

именно для таких и должна быть возможность загрузки всего файла целиком...
Цитата

Сделать такой интерфейс можно, но подумайте о своих пользователях - им же придется часами сидеть перед экраном, что бы среди всей этой кучи хлама найти крупицу информации, которая их интересует. Иголку в стоге сена найти будет проще

как раз поиск - главная идея...

Anikmar правильно сказал, расскажу немного о задаче.
Задача собственно такова:
если кто сталкивался (а я думаю таких много) с Гарантом и Консультантом, то мне нужно что-то вроде этого сделать (менее масштабно, да и алгоритмы поиска попроще будут само собой), но в области (это уже не суть важно, оставлю в секрете  smile ), которую они не затронули...
расскажу подробнее с точки зрения пользователя:
1) запустил прогу
2) ввел интересующий его запрос
3) ему вывелись результаты (список документов, где встречается текст запроса, или что-то похожее на него)
4) после этого пользователь выбирает документ из списка (или его часть, главу, статью и тд, смотря какого типа документ, смотря какой запрос)
и тут возможны варианты, если пользователь-обычный, то он посмотрит часть документа и успокоится (получив необходимую информацию продолжит работу), а если он из партии юных мазохистов, то ему тоже будет чем заняться (а такие есть и их не один и не два)... именно для них будет возможность загрузки всего файла... + в нем будет сделана подсветка текста, который удовлетворяет запросу...
5) пользователь сделал закладку, чтобы в следующий раз не искать, вышел...
Про остальные задумки не буду рассказывать, потому как пока реализовано немного... Дойдет дело, расскажу...
Цитата

Использовать RichEdit для таких громадных файло не получится. Как они там это внутри делают не знаю, - можно поковырять исходник рича и переделать его по-своему, но все-таки не то.

Таким макаром, как мы делаем можно грузить и не такие файлы, грузится порядка 2 сек у меня... я про uk.txt.
поэтому мне такую опцию надо предложить, да и вообще полезно будет уметь такое делать с Ричем...

xvr, пока не было еще возможности проверить твой вариант, вечером отпишусь...

Anikmar, извини, если обидел вот этим
Цитата

Ты не в теме...

не хотел обидеть... ни в коем случае)))

Автор: Anikmar 4.4.2009, 15:57
Цитата(Dmi3ev @  4.4.2009,  15:35 Найти цитируемый пост)
не хотел обидеть... ни в коем случае))) 

И не думал обижаться  smile 

Я почему-то сразу о гаранте и подумал. Мне кажется надо БД как в гаранте. Раскинуть документы по статьям/собственно документам, сделать нормальную индексацию для поиска.

Загрузить в рич большой текст можно - работать с ним неудобно. Тут полноценный гипертекст нужен. С перекрестными ссылками на смежные документы и т.п.

Задача сложная, объемная, но решаемая. Сложнее мне видится ее потом сопровождать - вносить необходимые поправки изменения и т.п. В гаранте над этим целый отдел трудится.

Автор: xvr 4.4.2009, 16:03
Цитата(Anikmar @ 4.4.2009,  12:39)
Цитата(xvr @  4.4.2009,  12:08 Найти цитируемый пост)
Нету у него исходника - используется стандартный виндовый RichEdit контрол. 2006 CG использует версию 1.0, причем Ansi. 2009го у меня нет - посмотреть не могу   Если там 2.0W - то все срастется

Я проверял на 2009. А как узнать версию?

Варианта 2:
  •  Посмотреть в исходниках (в 2006 - source/Win32/vcl/ComCtrls.pas)
  •  Сделать форму с ним, запустить, с помощью Spy++ (VS) или WinSight (BCB) посмотреть класс окна

Добавлено через 12 минут и 21 секунду
Цитата(Dmi3ev @ 4.4.2009,  15:35)
расскажу подробнее с точки зрения пользователя:
1) запустил прогу
2) ввел интересующий его запрос
3) ему вывелись результаты (список документов, где встречается текст запроса, или что-то похожее на него)
4) после этого пользователь выбирает документ из списка (или его часть, главу, статью и тд, смотря какого типа документ, смотря какой запрос)
и тут возможны варианты, если пользователь-обычный, то он посмотрит часть документа и успокоится (получив необходимую информацию продолжит работу), а если он из партии юных мазохистов, то ему тоже будет чем заняться (а такие есть и их не один и не два)... именно для них будет возможность загрузки всего файла... + в нем будет сделана подсветка текста, который удовлетворяет запросу...

А там отдельный файл достигает нескольких тысяч страниц? Если нет, то и проблемы нет - не надо все результаты запроса показывать в виде одного текста. Нужна удобная система гипертекстовых ссылок, причем все должно показываться на одном экране (никаких открывающихся окон и пр)

Автор: Dmi3ev 4.4.2009, 16:29
Цитата

А там отдельный файл достигает нескольких тысяч страниц?

почему, я в самом начале темы сказал, 500-1000, в файле, который я выложил порядка 350 страниц... да и больше не будет похоже, те 350 - максимум...
Цитата

Если нет, то и проблемы нет - не надо все результаты запроса показывать в виде одного текста.

все результаты не буду, но если пользователь зашел в один из них (выбрал из списка результатов главу, часть, статью, неважно, те какую-то небольшую составляющую большого документа (350 страниц )), надо чтобы была возможность посмотреть документ целиком (может этим будут пользоваться единицы, но так надо)...
Тем более, появился спортивный интерес так сделать, я думал, что воспользуюсь LoadFromFile и долов-то, ан нет... Теперь знаю, что не так-то все просто))) Уже даже мне хочется такую штуку вбабахать в программе)))

Автор: Dmi3ev 4.4.2009, 17:06
пока вот в таком виде, боевом, но уже работоспособном:
Код

        RichEdit1->Clear();
        int cPos=0;
        char buf[256];
        int nRead;
        TFileStream *fi=new TFileStream("D:\\uk.txt", Sysutils::fmOpenRead);

        ProgressBar1->Max=fi->Size;
        ProgressBar1->Visible=true;
        ProgressBar1->Position=ProgressBar1->Min;

        fi->Seek(0, soFromBeginning);
        do
        {
                nRead = fi->Read(buf, sizeof(buf));
                RichEdit1->SelStart=cPos;
                RichEdit1->SelLength=0;
                RichEdit1->SelText=String(buf,nRead);
                cPos+=nRead;
                ProgressBar1->Position=fi->Position;
                Application->ProcessMessages();
        }
        while(nRead);

        ProgressBar1->Visible=false;

        delete fi;

ProgressBar специально для mrbrooks, больше ни для кого и ни для чего smile Ему так хотелось, чтобы я вломил, и я вломил  smile 
Всем спасибо, тему пока не закрываю, еще не всё smile 

Автор: Gradov 5.4.2009, 11:15
Цитата(Anikmar @  4.4.2009,  11:06 Найти цитируемый пост)
Использовать RichEdit для таких громадных файло не получится. Как они там это внутри делают не знаю, - можно поковырять исходник рича и переделать его по-своему, но все-таки не то.


Цитата(Dmi3ev @  4.4.2009,  16:29 Найти цитируемый пост)
я думал, что воспользуюсь LoadFromFile и долов-то, ан нет... Теперь знаю, что не так-то все просто))) Уже даже мне хочется такую штуку вбабахать в программе)))


Если со скоростью TRichEdit проблемы можно попробовать ActiveX компонент TRichTextBox, у него есть свой-во FileName. Забиваешь туда имя своего файла и все. Твой 4-х гигабайтный rtf-файл 2 сек. открывает. Также как, например File Lister в Total Commander по F3. 

Автор: mrbrooks 6.4.2009, 07:53
Цитата(Anikmar @  4.4.2009,  12:39 Найти цитируемый пост)
Я проверял на 2009. А как узнать версию?

В хелпе написано. 

Цитата(Dmi3ev @  4.4.2009,  17:06 Найти цитируемый пост)
ProgressBar специально для mrbrooks, больше ни для кого и ни для чего smile Ему так хотелось, чтобы я вломил, и я вломил  smile 

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)