|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Теория*| храним форматируемый текст |
|
*Теория*| храним форматируемый текст
|
Ветеран Сообщения: 1180 |
Профиль | Отправить PM | Цитировать вопрос такой: как можно быстро и удобно держать в памяти строчку форматированного текста (для последующей многократной отрисовки на DC), Строчек много, желательно экономить память. Подскажите варианты, плз.. Примеры:
1. включать в строчку управляющие символы, напр.: void <u>foo</u>(int); 2. хранить отдельно текст и его форматирование с указателями на диапазон символов. 3. хранить текст как что-то вроде метафайла (примитивами) |
|
Отправлено: 13:33, 09-10-2006 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Я бы выбрал первый вариант хранения. Список возможных тегов конечен и весьма не велик. Один раз написать библиотеку для отображения и дальше можно спокойно пользоваться.
Для более полного ответа нужно знать для чего это будет использоваться и с какой частотой будет изменяться текст. |
------- Отправлено: 17:16, 09-10-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать pva
Pango (отрисовщик gtk) применяет 1 и 2. То есть на вход ему можно подать текст с разметкой а-ля html, а он уже создаст внутри список атрибутов вида "символ с индексом x - символ с индексом y - атрибут такой-то". Либо можно дать неформатированный текст и самому задать список атрибутов. Отрисовывает соответственно по этому списку. Форматирование внутри строки неудобно по той причине, что при каждой отрисовке всё равно придётся парсить текст в аналог списка атрибутов. Так зачем делать одну и ту же работу дважды? |
------- Отправлено: 19:35, 09-10-2006 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать pva
Хранить "на каком" уровне? Если Вы пишете, к примеру, "разукрашивальщик синтаксиса", то форматирование и текст хранятся отдельно. Но если Вы уже имеете такой компонент, а важно лишь хранить сам текст "вообще", то... XML-лизация рулит в последнее время. Кстати. Посмотрите, если будет время и желание, QSyntaxHightlighter (кажется так) в QT >3.1 |
Отправлено: 10:14, 10-10-2006 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цель: разукрасить (как в QT, Swing) текст на контролах. Например, в статус баре написать: Итого: <b>1 024,768</b> (цифра - жирным) или построить дерево классов/методов с подсветкой названий методов: void <b>function</b>(arg_type) - чтобы было лучше видно, причём использовать один и тот же подход в обоих случаях. По поводу частоты изменения текста, всё-таки думаю, что текст будет меняться не часто (т.е. это не редактор с подсветкой), но часто отрисовываться. Количество таких "строчек" может достигать 10^6. Больше - вряд ли.
// для пояснения - пример варианта №1 class Graphics { HDC fhandle; std::vector<struct format_t> fformats; public: void renderText(int x, int y, const std::wstring& s) { SetTextAlign(fhandle, TA_UPDATECP|TA_BASELINE); MoveToEx(fhandle, x, y, 0); const char* pc = s.c_str(); while(*pc) { if (pc[0]!=0x1b || pc[1]==0) { TextOut(fhandle, 0, 0, pc, 1); ++pc; } else { struct format_t& fmt(fformats.at(pc[1]-1)); SetTextColor(fhandle, fmt.color); SelectObject(fhandle, fmt.hfont); pc+=2; } } } } ... void ListBox::paint(Graphics& g) { // fitems[0] = "void \x1b\2foo\x1b\1(arg_type)" unsigned begin = firstVisibleItem(); unsigned end = lastVisibleItem(); end -= begin; for(unsigned a=0; a<end; ++a) { g.renderText(0, (1+a)*itemHeight(), fitems[begin + a]); } } |
|
Отправлено: 12:22, 10-10-2006 | #5 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать pva
Я имел в виду "посмотрите, как огранизован" :-) Коды открыты |
Отправлено: 12:26, 10-10-2006 | #6 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Извиняюсь, стормозил. Где можно коды посмотреть? А ещё я не понял, как контрол в Qt 4.0 узнаёт, что на экране рисовать? Например QTreeView: ссылается на QAbstractItemModel, а дальше - не понятно..
|
Отправлено: 12:51, 10-10-2006 | #7 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать >> Где можно коды посмотреть?
Можно скачать опен-сурс У них сейчас как раз 4.2 вышла. http://www.trolltech.com/developer/downloads/qt/windows Для линукса - рядом Там \src\qt3support\text\q3syntaxhighlighter*.* AFAIK >> А ещё я не понял, как контрол в Qt 4.0 узнаёт, что на экране рисовать? Ух, это в двух словах не скажешь. |
Отправлено: 13:17, 10-10-2006 | #8 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Спасибо, проверим
|
Отправлено: 14:07, 10-10-2006 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
*Теория* | Сокеты | XPurple | Программирование и базы данных | 1 | 25-09-2006 12:05 | |
*Теория* | Кодогенерация | Vlad Drakula | Программирование и базы данных | 6 | 28-08-2006 06:49 | |
*Теория* | Числа Фибоначчи | Grub | Программирование и базы данных | 8 | 28-07-2006 14:23 | |
*Теория* | Tree via c++ | pva | Программирование и базы данных | 2 | 04-05-2005 13:34 | |
ТЕОРИЯ | german r | Мобильные ОС, смартфоны и планшеты | 5 | 07-02-2003 09:42 |
|