С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
 Аватар для yolkfolk
2 / 1 / 1
Регистрация: 26.04.2020
Сообщений: 19

Размещение текста в пределах экрана

27.03.2021, 07:32. Показов 5033. Ответов 7
Метки lua (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Никак не могу найти простой способ, без сложных вычислений, как мне красиво разместить сообщение на экране.
При использовании display.newText() сообщение в одну строчку выходит за пределы экрана.
Если использовать в тексте \n, то получается некрасиво (если центрировать слева) и неудобно. Хотелось бы, чтобы текст был размещён в окне информационного сообщения с автоматическим переносом при достижении края экрана.
Есть ли простой способ, или надо писать функцию с вычислениями ширины экрана, текста и переносом в зависимости от заполнения? Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2021, 07:32
Ответы с готовыми решениями:

Размещение текста в середине экрана
Добрый день. Мне необходимо вывести три раза одну и ту же надпись в центре экрана. В столбик. Друг над другом. При этом второй вывод должен...

Размещение объектов только в пределах формы
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Then If Shape1.Top < 0 Then Else Shape1.Top =...

Перемещать курсор в пределах экрана
Помогите, пожалуйста! Срочно! Напишите программу, позволяющую перемещать курсор в пределах экрана вверх-вниз, влево-вправо и допускающую...

7
 Аватар для yolkfolk
2 / 1 / 1
Регистрация: 26.04.2020
Сообщений: 19
27.03.2021, 17:05  [ТС]
Вот примерно так, но не слишком громоздко (плюс в моём варианте почему-то спецсимволы иногда в местах переноса возникают):

Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function mysplit(str, n, range)
  -- str - получаем строку, n - число символов, после которых разбиваем, range - сколько смотрим в поисках пробела
  do
    -- Проверяем, что строка длинная
    if #str <= n + 1 then
      return str
    end
    -- Переменные
    newline = "\n"
    tmp = str
    -- Вставляем символ \n в каждый n-й символ
    for i = 1, #str / n do
      -- но только если видим пробел в пределах range символов
      for space = i, i + range do
        if string.sub(tmp, space, space) == " " or string.sub(tmp, space, space) == "-" or space == i + range then
          tmp = tmp:sub(1, (n * i) + space) .. newline .. tmp:sub((n * i) + space)
          -- нашли один раз и хватит
          break
        end
      end
    end
  end
  return tmp
end
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
28.03.2021, 10:40
У меня короны нет под рукой (кстати, правильным было бы все-таки указать, что речь идет о ней), но документация говорит об опциях вывода текста...

Например:

Lua
1
2
3
4
5
6
7
8
9
10
display.newText({
        parent   = myParent,
        text     = "This is a long enough text to be on two lines",  
        width    = display.contentWidth*0.6,  
        height   = display.contentHeight*0.25,  
        x        = display.contentWidth*0.5,
        y        = display.contentHeight*0.5,
        fontSize = 24,
        align    = "center",
    })
yolkfolk, как-то это выглядит не очень, как вариант:

Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function wrap(str, limit, indent, indent1)
   indent = indent or ""
   indent1 = indent1 or indent
   limit = limit or 72
   local here = 1-#indent1
   local function check(sp, st, word, fi)
      if fi - here > limit then
         here = st - #indent
         return "\n"..indent..word
      end
   end
   return indent1..str:gsub("(%s+)()(%S+)()", check)
end
 
local txt = "Если у начальника хорошее настроение, его легко можно спутать с человеком. Самое опасное - это на следующий день общаться с шефом, исходя из этой иллюзии."
 
print( wrap( txt, 64, "  ", "    " ) )
Добавлено через 15 минут
https://docs.coronalabs.com/ap... wText.html

Вот тут гораздо больше примеров различных выравниваний
0
 Аватар для yolkfolk
2 / 1 / 1
Регистрация: 26.04.2020
Сообщений: 19
28.03.2021, 12:11  [ТС]
Погодите! Минуточку!
*Но в первую очередь, конечно, спасибо".
Аналог stackoverflow - это хорошо, но хочется и самому подумать.
Сам я на lua всего три дня, поэтому не судит строго.

Мне, в первую очередь, непонятно вот что.
Lua
1
2
3
     for i = 1, #str/n, n do
          tmp = tmp:sub(1, i - 1) .. "/n" .. tmp:sub(i + 1)
     end
str - это строка. Откуда здесь появляются спецсимволы в местах переноса? Что я напутал с циклом? tonumber(#str/n) или math не помогли.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
28.03.2021, 13:22
У меня спецсимволы не появляются. Проблема в алгоритме:

Code
1
2
3
local txt = "Еще одна пропасть зияет и в нашем столетии. Начиная с середины 20-х годов, фантастическое, иррациональное начало вытравливалось, выкашивалось, каленым железом выжигалось из литературы — и это на жизнь целого поколения. За чтение запрещенных сочинений Циолковского, Блаватской, Крыжановской, Булгакова, Николая Федорова, Замятина, Чаянова ссылали в концлагеря." 
 
print( mysplit( txt, 64, 20 ) )
Результат:

Code
1
2
3
4
5
6
Еще одна пропасть зияет и в нашем столетии. Начиная с середины 20-х 
 годов, фантастическое, иррациональное начало вытравливалось, в
выкашивалось, каленым железом выжигалось из литературы — и это 
 на жизнь целого поколения. За чтение запрещенных сочинений Цио
олковского, Блаватской, Крыжановской, Булгакова, Николая Федорова, З
Замятина, Чаянова ссылали в концлагеря.
Вы режете по серединам слов и неверно индексируете остаток строки.
0
 Аватар для yolkfolk
2 / 1 / 1
Регистрация: 26.04.2020
Сообщений: 19
28.03.2021, 20:46  [ТС]
Да, спасибо. Это первый шаг, почему бы не резать для начала строго по середине. Но что там с индексацией? Например, вот (английский вариант - всё ок, русские буквы в Corona - спецсимволы в местах разбиения).

Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function mysplit(str, n)
  -- str - получаем строку, n - число символов, после которых разбиваем
  do
    -- Проверяем, что строка длинная
    if #str <= n + 1 then
      return str
    end
    -- Переменные
    newline = "\n"
    tmp = str
    -- Вставляем символ \n в каждый n-й символ
    for i = 1, #str / n do
      tmp = tmp:sub(1, n * i) .. newline .. tmp:sub((n * i) + 1)
    end
  end
  return tmp
end
 
local a = "dfhkjdshhfkjsdh hhjh hjhjh jhjhjhj hjhjhjhj hjhjhjhjhj"
print(mysplit(a, 10))
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
29.03.2021, 10:23
Цитата Сообщение от yolkfolk Посмотреть сообщение
английский вариант - всё ок, русские буквы в Corona - спецсимволы
Насколько я понял, корона работает с utf-8, и причина наверняка в этом. Следует использовать ф-ции библиотеки utf8, а не string.
0
 Аватар для yolkfolk
2 / 1 / 1
Регистрация: 26.04.2020
Сообщений: 19
29.03.2021, 10:29  [ТС]
Да, возможно, я тоже так думал. Но если использовать Вашу функцию, там таких ошибок нет, вот я и подумал, что что-то со смещением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2021, 10:29
Помогаю со студенческими работами здесь

Абсолютная позиции в пределах экрана (и смещения)
Доброго времени суток, я хочу сделать, что бы при нажатия на кнопку появлялось окошко что бы залогинится, для этого использую для этого...

QT & OpenGL - Перемещение изображения в пределах экрана
Доброго времени суток! Это моя первая тема, прошу сильно не критиковать. В программе создается рисунок (квадрат), который...

Размещение формы, не зная разрешения экрана
как разместить форму в правом нижнем углу экрана, над треем, не зная разрешения экрана...

Размещение объектов в пределах формы и отражение двух объектов при соприкосновении
Помогите с задачей, чтобы круг летал по форме и соприкасаясь с квадратом отталкивался от него. Shape2.Top = Shape2.Top - 50 End If If...

Двумерный целочисленный массив A(m,n) задается с экрана либо генерируется в пределах от -20 до 20. Требуется:
Дана целочисленная квадратная матрица. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru