Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2010, 08:54   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию По быстрому перекинуть форматирование текста

В общем пишу подсветку синтаксиса через RichEdit (ну практически через заднее отверстие), поскольку SynEdit меня не устроил, а остальные нужно изучать и там везде свои заморочки.
Пошел на военную хитрость при открытии файла - я открываю его в невидимом RichEdit'е, раскрашиваю (здесь главная фишка в том, что раскраска в невидимом компоненте немного быстрей, чем в видимом, а для такого тормоза как RichEdit это очень важно). Теперь мне надо перекинуть весь текст с форматированием из невидимого RichEdit'а в редактор для программиста.

Нашел, подсмотрел в DRKB

Цитата:
MemoryStream:=TMemoryStream.Create;

try
RichEdit2.Lines.SaveToStream(Memory Stream);
MemoryStream.Seek(0,soFromBeginning );
RichEdit1.Lines.LoadFromStream(Memo ryStream);
finally
MemoryStream.Free;
end;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.01.2010 в 09:06.
Utkin вне форума Ответить с цитированием
Старый 27.01.2010, 09:09   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,671
По умолчанию

Вот так?

Код:
richedit1.Visible:=true;
Если нужно скопировать с форматированием. то удобно через файл.

Код:
richedit1.PlainText:=false;
richedit1.Lines.SaveToFile('c:/ddd.doc');
richedit2.Lines.LoadFromFile('c:/ddd.doc');
Alar вне форума Ответить с цитированием
Старый 27.01.2010, 09:22   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Тут оказалось все не так просто. Собственно я уже думал и через файл и через буфер обмена. Но проблема теперь в другом - раскраска на невидимом компоненте происходит не так как на видимом. Сейчас сравниваю свойства обоих компонентов.

Собственно даже не это страшно. Попробовал подсвечивать другой видимый RichEdit (не тот, что до этого) - правильная подсветка осуществляется только в первом. Хотя код построен так, что не зависит от компонента в котором будет осуществляться подсветка.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.01.2010 в 09:25.
Utkin вне форума Ответить с цитированием
Старый 27.01.2010, 10:45   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Может все-таки написать свой Edit? Да, потратися больше времени (для умельца хватит суток), но во-первых если продумать, то будет быстрее, во-вторых удобнее, в третьих свои спец функи можно там всунуть.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.01.2010, 10:55   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Может все-таки написать свой Edit? Да, потратися больше времени (для умельца хватит суток), но во-первых если продумать, то будет быстрее, во-вторых удобнее, в третьих свои спец функи можно там всунуть.
У меня задача написать из того, что есть. Как можно меньше сторонних компонентов. Был момент, когда я согласился на SynEdit, но порылся в нем (в Лазарусе) - не совсем то, что мне надо. Сейчас объясню. Как устроена обычная подсветка?
Она находит ключевые символьные обозначения (например ключевые слова языка) и применяет к ним свое форматирование. Это все уже очень устарело. Этим грешит даже сам Делфи.
Например напиши в нем
Код:
end.     end end;
Делфи выделит все Энды, как само собой разумеющееся, но ведь это в корне неверно. Ибо такая строка не имеет право на существование в таком виде. В моем варианте строки содержащие синтаксические ошибки будут выделяться красным. Прога будет немного парсить код и такого не допустит.
Меня вообще поначалу это злило. Я пришел после Бейсика и всегда забывал ставить точку с запятой в конце. Вот забудешь и потом долго не въедешь почему Делфи указывает на нормальную конструкцию и говорит, что там все не правильно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.01.2010, 11:03   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Я пришел после Бейсика
Аналогично, но сразу привык...
Цитата:
Как можно меньше сторонних компонентов
Но этож вроде будет Ваш... Или как вариант написать класс, который будет обрабатывать текст, а выводить через что-то типа [.text]
Цитата:
в Лазарусе
Пишете в нем?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.01.2010, 13:16   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Аналогично, но сразу привык...
А я не хочу, чтобы после моих недоделок люди привыкали.
Цитата:
Но этож вроде будет Ваш... Или как вариант написать класс, который будет обрабатывать текст, а выводить через что-то типа [.text]
Я думаю над этом.
Цитата:
Пишете в нем?
Нет, в нем я разглядывал SynEdit, просто он у меня там предустановленный в палитру идет, не надо ничего дополнительно скачивать.
Но в будущем подумываю, о том, чтобы через него все это дело перетащить в линукс.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.01.2010, 13:26   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

С мемо это делается очень просто Text -> Text. Я так змейку текстовую делал, один мемо - буфер, другой - на экран. Добился что даже мерцания не было. Но подозреваю что RichEdit штука сложная, и текст c форматированием так просто не перекинешь одной строкой (я имею ввиду не строку кода, а переменную string). Может быть можно как-то покопаться внутри его и целиком кусок памяти копировать, кстати Assign не пробовали?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 27.01.2010, 13:37   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Assign пробовал, но у меня выходит копировать только текст без форматирования.
Ну в целом я добился чего хотел - через потоки (см. пост 1). Также и работаю - подсвечиваю код в тени, а потом отображаю для программера. Скорости добился за счет того, что подсвечиваю не все, а только тот фрагмент, который будет в данный момент отображаться перед глазами. Но постоянно вылазиют какие-то бяки, объяснить которые можно пятнами на Солнце.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирование текста Tomoyo HTML и CSS 2 18.07.2013 19:33
Форматирование текста Sergey2 Общие вопросы Delphi 10 23.09.2009 08:04
Форматирование текста. Altera Общие вопросы Delphi 3 11.05.2009 23:29
Форматирование текста MAcK Общие вопросы Delphi 3 03.04.2008 11:38
Форматирование текста rusif Помощь студентам 1 17.12.2007 22:28