Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В самодельном GUI реализовать поле TextField, при ограниченном наборе функций 
:(
    Опции темы
Archon7th
Дата 3.6.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 22.4.2005
Где: Витебск Белорусия

Репутация: нет
Всего: нет



есть GUI на BlitzBasic3D
и ограниченный набор функция имеющийся в самом движке
практически только  Text позволяющий рисовать в любой точке экрана одиночную текстовую строку
и TextWidth позволяющий определить сколько пикселей в длинну потребуется для отображения текста при текущих настройках фонта

как оптимально сделать разбиение на строки с учетом того что еще мне нужно не просто возможность писать текст, но и возможность вклинивать в тест обьекты типо ссылок
одним словом полное соответсвие html`ному <div></div>

сейчас я прекрастно могу вклинивать как угодно обьекты, но как бы их еще обтикать при этом текстом, это было бы как вариант
--------------------
CPU not found. Running software emulation.
PM MAIL ICQ   Вверх
Archon7th
Дата 9.6.2009, 08:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 22.4.2005
Где: Витебск Белорусия

Репутация: нет
Всего: нет



ниужели нет никаких идей? .... хотя бы просто методика .... с какой стороны подойти к проблеме и что важно учитывать?
--------------------
CPU not found. Running software emulation.
PM MAIL ICQ   Вверх
maxdiver
Дата 9.6.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Т.е. есть область окна (прямоугольник), из которой удалены некоторые "запрещённые" области (прямоугольники с divами), и нужно вывести текст, чтобы он не попадал на запрещённые области? Ну тут сложно говорить про оптимальность, наверно просто надо "жадно" пытаться втиснуть как можно больше слов в каждую строку?

Теперь как реализовывать. Ну видится примерно такой алгоритм. Пусть у нас есть y-координата текущей строки, x сначала = 0. Даже не одна y-координата, а две y1 и y2 (y1 = y, y2 = y + TextHeight, надеюсь, в блице есть такая функция smile ). Т.е. есть такая полоса [y1;y2], и надо её пересечь с каждой из запрещённых областей (если какая-то запрещённая область хоть немного налазит на эту полосу, то добавляем в текущий массив запрещённых x-отрезков какой-то отрезок [x1;x2]). Запрещённые x-отрезки сортируем. Всё, теперь полагаем x = 0, находим наибольшую длину куска текста, которая поместится до x1 первого запрещённого отрезка; выводим эту часть текста. Затем перепрыгиваем через запрещённый отрезок, т.е. кладём x = x2 от встретившегося запрещённого отрезка, и снова определяем максимальную длину текста, которую можно вывести до x1 второго запрещённого отрезка, и т.д. Когда мы выведем всё, что могли, в текущую строку, переходим к следующей (т.е. y1 и y2 увеличиваем на сколько-то, x снова = 0). Вроде так.

Кстати, определять максимальную длину помещающегося куска текста лучше бинарным поиском, так будет очень быстро.
И ещё, в этот алгоритм легко вставить такие вещи, как нужные отступы с разных сторон от divов, выравнивание текста в каждом кусочке по середине, и т.д.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0381 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.