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

Вниз

Интерактивный генератор текстов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.05 c
15-1266485663
Guresff
2010-02-18 12:34
2010.08.27
Как организовать прием платежей на сайте?


2-1271319504
Б
2010-04-15 12:18
2010.08.27
Не срабатывает SetWaitableTimer.


15-1275549850
Медвежонок Пятачок
2010-06-03 11:24
2010.08.27
не будь похожим, а то проиграешь


2-1275392674
defen
2010-06-01 15:44
2010.08.27
приоритет службы


15-1264250963
xayam
2010-01-23 15:49
2010.08.27
К разработчикам клиентов форума