Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизИнтерактивный генератор текстов Найти похожие ветки
← →
timekiller © (2010-03-12 15:36) [0]Сутки добрые, Уважаемые знатоки!
Помогите разобраться со следующим:
Есть некий алгоритм генерации текста в поле Memo из множества других полей TEdit по определенному шаблону, тоесть обскакиваем каждый TEdit, ищем его тег в шаблоне (на мотив phpBB [::тег::] и заменяем его на текст из TEdit, таким образом конструируется текст в TMEmo...
Генератор стоит на таймере, который сбивается поновой на OnChange каждого TEdit, таким образом генерация происходит по нажатию последнего символа и ожиданием в секунду.
Текст мерцает при изменении одного из TEdit, тоесть реконструируется в TMemo каждый раз по новой, начиная с загрузки шаблона для текста и тд...
Проблема нагрянула такая: С развитием прог продукта, образовалось, допустим, уже тысяча компонентов Tedit, при которых текст теперь генерируется слишком долго, невыносимо долго...
Подскажите подход к данной проблеме, возможно кто-то сталкивался с подобным?
Каким образом можно организовать процесс одновременного изменения текста в TEdit и на его потенциально заменяемом месте в TMemo?
← →
Игорь Шевченко © (2010-03-12 16:06) [1]как в excel - по кнопке !
← →
timekiller © (2010-03-12 16:11) [2]Факт в том что кнопка срабатывает сама по себе...
Никаких помех в обычной работе это не вызывает, отрабатывает processMesages
Проблема в том что текст строится долго и перестраивается каждый раз..
Хорошо, даже если бы и была кнопка, то как уйти от перестройки всего текста?
← →
Медвежонок Пятачок © (2010-03-12 16:19) [3]Проблема в том что текст строится долго
Это оптический обман.
Текст как раз строится быстро.
Долго другое.
← →
timekiller © (2010-03-12 16:39) [4]Долго за ним наблюдать...
← →
Медвежонок Пятачок © (2010-03-12 16:41) [5]долго наблюдать - закрой глаза и поспи.
ps зачем здесь мемо (который заточен на ручной ввод)?
причем ручной ввод здесь невозможен, так как любое шевеление в едитах затрет ручной ввод.
← →
KSergey © (2010-03-12 16:42) [6]
Memo1.Lines.BeginUpdate;
try
... тут генерим текст ...
finally
Memo1.Lines.EndUpdate;
end;
К стати, если едитов и равда тыща - лучше не напрямую с Memo1.Lines работать для замены, а загружать шаблон в переменную string, там заменять шаблоны - и только потом Memo1.Lines := str;
Тогда и BeginUpdate/EndUpdate не обязательна.
← →
timekiller © (2010-03-12 16:47) [7]BeginUpdate только создает иллюзию и вводит в панику юзверя :)))
Делаю через шаблоны, и правда :)
Сейчас допёр понемногу до обновляемой позиции TEdit в TMemo, возможно по ней можно словно отзеркалить содержимое TEdit в его законном месте на OnChange
← →
timekiller © (2010-03-12 16:48) [8]
> причем ручной ввод здесь невозможен, так как любое шевеление
> в едитах затрет ручной ввод.
Забыл сказать что текстовое поле ReadOnly =))
← →
Медвежонок Пятачок © (2010-03-12 16:55) [9]Забыл сказать что текстовое поле ReadOnly =))
тем более зачем здесь мемо?
рисуй текст на канве.
← →
timekiller © (2010-03-12 17:10) [10]Memo для того чтобы не пугать пользователя, использовать привычное Юзабилити... да и возможность копирования текста надо бы сохранить ;)
← →
Медвежонок Пятачок © (2010-03-12 17:18) [11]строка есть. всегда.
куда денется возможность ее копирования?
← →
timekiller © (2010-03-12 17:20) [12]Ну пусть пусть...
А канва - это, на сколько я понял, ускорение всего алгоритма?
← →
Медвежонок Пятачок © (2010-03-12 17:23) [13]алгоритм здесь не при чем.
тебе же сказали, что тормоза не в формировании строки.
тормоза в отрисовке мемо
← →
timekiller © (2010-03-12 17:30) [14]Ок, Медвежонок
Всем огромное спасибо ;)
← →
KSergey © (2010-03-12 17:47) [15]> Медвежонок Пятачок © (12.03.10 16:55) [9]
> рисуй текст на канве.
Приколист? Типа все сделаем ручками? Зачем??
> timekiller © (12.03.10 16:47) [7]
> BeginUpdate только создает иллюзию и вводит в панику юзверя
Чего??! какую иллюзию?? Чего этот метод делает - знаем?
← →
timekiller © (2010-03-12 18:09) [16]хым =) Ценю я ваш сарказм, повеселило, но не суть
Мысль о канве, с учетом того что с ней пока не сталкивался, идет такая, что надо отрисовывать пиксел за пикселом, расчитывать буквы, линии и тд...
Бегинапдейт - откладывает необходимость перерисовки, это плюс, иллюзия для пользователя в том что программа подвисла и думает
← →
Медвежонок Пятачок © (2010-03-12 18:25) [17]идет такая, что надо отрисовывать пиксел за пикселом
а мемо отрисовывает текст не пиксел за пикселом?
:)
← →
Медвежонок Пятачок © (2010-03-12 18:28) [18]Приколист? Типа все сделаем ручками? Зачем??
я просто за то, чтобы контролы использовались по назначению, а не просто потому что мемо белое и прямоугольное.
чем канвас.текстаут хуже мемо.лайнс?
← →
Fenik © (2010-03-12 20:59) [19]> чем канвас.текстаут хуже мемо.лайнс?
Неудобно для программиста - куча лишнего кода, особенно если будет прокрутка.
Неудобно для пользователся - нельзя выделить и скопировать.
← →
Fenik © (2010-03-12 21:01) [20]> уже тысяча компонентов Tedit
Убить такую программу.
← →
Leonid Troyanovsky © (2010-03-12 21:12) [21]
> Fenik © (12.03.10 20:59) [19]
> > чем канвас.текстаут хуже мемо.лайнс?
> Неудобно для программиста - куча лишнего кода, особенно
> если будет прокрутка.
> Неудобно для пользователся - нельзя выделить и скопировать.
Отмазка, IMHO.
> Fenik © (12.03.10 21:01) [20]
> Убить такую программу.
программиста.
--
Regards, LVT.
← →
Медвежонок Пятачок © (2010-03-12 21:49) [22]Неудобно для пользователся - нельзя выделить и скопировать.
<Цитата>
скопировать так же легко как и в случае с мемо.
и даже выделять ничего не надо.
← →
Германн © (2010-03-13 01:53) [23]
> Интерактивный генератор текстов [D7, 95/98, XP]
>
> timekiller © (12.03.10 15:36)
Плюнуть. И начать новый проект заново.
Желательно составить новое ТЗ.
← →
KSergey © (2010-03-13 13:55) [24]> Медвежонок Пятачок © (12.03.10 18:28) [18]
> чем канвас.текстаут хуже мемо.лайнс?
Тем, что TLabel - тупо удобнее. Хотя и делает ровно тот же канвас.текстаут
Ну я к тому, что кроме варианта мемо и ручками - есть другие, готовые.
← →
KSergey © (2010-03-13 13:58) [25]> timekiller © (12.03.10 18:09) [16]
> Бегинапдейт - откладывает необходимость перерисовки, это
> плюс, иллюзия для пользователя в том что программа подвисла и думает
Вы значение слова "иллюзия" вообще знаете? Почитайте в словаре.
Программа на самом деле зависла и на самом деле думает, и никакой иллюзии тут нет.
Если она думает 2 часа и вас это не устраивает - меняйте алгоритм в корне. Выше уже говорилось про отдельную string-переменную, наверняка это будет быстрее.
← →
lady (2010-03-14 06:06) [26]скрывай форму по началу и показывай по окончанию.!
← →
Не занят (2010-03-14 07:27) [27]
> Проблема нагрянула такая: С развитием прог продукта, образовалось,
> допустим, уже тысяча компонентов Tedit, при которых текст
> теперь генерируется слишком долго, невыносимо долго...
Не верю. Даже если нужно сделать тысячу подстановок в большой строке (в сотни мегабайт) - это можно уместить в десятки милисекунд. Оптимизируй свою генерацию.
1. Для начала (если вдруг там ты дергаешь Memo.Text все время) всю генерацию текста делай в отдельную строковую переменную, и только потом загоняй результат в мемо.
2. Если все равно медленно, то основное время, скорее всего уходит на множественные перевыделения памяти для вновь формируемой строки. Это можно победить с помощью предварительного выделения памяти под результирующую строку с запасом.
← →
Не занят (2010-03-14 07:27) [28]
> Медвежонок Пятачок © (12.03.10 21:49) [22]
> Неудобно для пользователся - нельзя выделить и скопировать.
>
>
> <Цитата>
>
> скопировать так же легко как и в случае с мемо.
> и даже выделять ничего не надо.
>
>
А я хочу одно предложение выделить.
← →
Не занят (2010-03-14 07:32) [29]
> ps зачем здесь мемо (который заточен на ручной ввод)?
Для каких случаев, по твоему, у Мемо сделали свойство ReadOnly?
← →
Ega23 © (2010-03-14 10:33) [30]СЕО-оптимизатор. Или как оно там правильно называется? Вобщем, генерация бредо-текста для поднятия в топах поисковиков.
← →
Anatoly Podgoretsky © (2010-03-14 12:11) [31]> Ega23 (14.03.2010 10:33:30) [30]
Правильно оно называется спаммер, без всяких SEO
← →
timekiller © (2010-03-15 10:16) [32]Огромное спасибо за рассуждения и наводки!
За выходные я выдумал некий массив координат текстов из TEdit с погрешностью смещения, каждый для определенного генерируемого TMemo :)
Эффект "отзеркаливания" текста получился
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.07 c