|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » *Теория*| храним форматируемый текст |
|
|
*Теория*| храним форматируемый текст
|
|
Ветеран Сообщения: 1180 |
вопрос такой: как можно быстро и удобно держать в памяти строчку форматированного текста (для последующей многократной отрисовки на 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 | |
|