Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1266158692
FIL-23
2010-02-14 17:44
2010.08.27
Tchar и его графики


2-1265698658
И. Павел
2010-02-09 09:57
2010.08.27
Вылетает окно "Система выполнила недопустимую операцию..."


15-1268861402
Юрий
2010-03-18 00:30
2010.08.27
С днем рождения ! 18 марта 2010 четверг


15-1269466202
Юрий
2010-03-25 00:30
2010.08.27
С днем рождения ! 25 марта 2010 четверг


15-1264345015
test
2010-01-24 17:56
2010.08.27
Конец света.





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