Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 19.12.2008, 17:20   #1
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
перенос текста, вИходящего за предел экрана

У мя есть текст tet:='тгашикугкпьмумкьугбущм уп'
Я рисую его: drawtext(tet,0,0);
как сделать так, штобы когда слово выходит за пределы экрана, оно переносилось на следующую строку, т.е вниз.
(Offline)
 
Ответить с цитированием
Старый 19.12.2008, 19:25   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

Стандартными средствами никак, либо делить вручную, либо использовать библиотеку font32, там вроде такое есть.
(Offline)
 
Ответить с цитированием
Старый 19.12.2008, 21:02   #3
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

но вручную может кто скажет как, может чето типа char
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 01:05   #4
beZ_probleM
ПроЭктировщик
 
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений
(для 8 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

мож так
1.взять шырину екрана
2.взять текущее положение текста
3.узнать длинну текста перед выводом
и если текст оч длинный то взять длинну_текста-1 и проверить опять
4.если длинна получившегося текста подходит для места которое допустимо для вывода на екране то копируем текст от начала до значение которое получили в результате пункта 3.
5. далее проверяем текст но учитуем то шо начало уже будет
"значение которое получили в результате пункта 3" + 1

вот и фсё) думаю оно работать будет
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 01:12   #5
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

А если текст ну оооочень длинный? Тогда по 1 символу будет долго укорачивать. Лучше, думаю, длину экрана поделить на длину одного символа(лучше самого широкого), и для надежности отнять единицу - получим длину (в символах) допустимого текстового блока. Конечно, будет не совсем точно, так как ширина у символов разная, но, думаю, будет приемлемо.
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 01:50   #6
beZ_probleM
ПроЭктировщик
 
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений
(для 8 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

да, я именно ето и хотел токшо написать как прочёл твои слова
А если текст ну оооочень длинный?
лучше канешно взять длинну самого длинного и добавить ещё парочку к сумме) шоб уже навернека)))
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 15:29   #7
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

если мона напишите пример маленьнкий
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 16:34   #8
beZ_probleM
ПроЭктировщик
 
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений
(для 8 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

Новый вариант)) отличаетсо лишь тем шо строка на вывод формируетсо путём добавления посимвольно)

s:=текст для вывода;
x:=0;  //координата Х куда выводить
y:=0;  //             -/ Y /-
w:=ширина экрана(getWidthили шырина региона куда выводить текст(в пикселях);
pos:=0;   //позицыя в тексте
repeat
while ((getStringWidth(s1)+5)<w) and (pos<=length(s)-1) do
   
begin
     s1
:=s1+copy(s,pos,pos);
     
pos:=pos+1;
   
end;
y:=y+10// число 10 ростояние между верхней линеей одного рядка и верхней линией второго рядка
drawtext(s1,x,y);
until pos=length(s)-1

Последний раз редактировалось beZ_probleM, 21.12.2008 в 17:12.
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 18:17   #9
ARV
ПроЭктировщик
 
Регистрация: 25.12.2006
Сообщений: 163
Написано 7 полезных сообщений
(для 12 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

я сто лет назад выкладывал модуль, названный CRT - там в исходниках функции по работе с текстом - то, о чем тут идет речь. воспользуйтесь поиском и найдите.
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 18:33   #10
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

че то не получается твои пример без_проблем
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 18:44   #11
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

Вот смотрите:
dlina:=getStringWidth(vopros[m]);
if dlina>w then drawtext(s,0,20); //если длина строки больше ширины то рисуем текст s
А чему должен ровняться s? Он должен равняться части, которая выходит за экран, но как это обозначить? ПОМОГИТЕ!
(Offline)
 
Ответить с цитированием
Старый 21.12.2008, 23:50   #12
beZ_probleM
ПроЭктировщик
 
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений
(для 8 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

2 TEMNED
почему не получаетсо? в чом причина? что не так? изложы

Последний раз редактировалось beZ_probleM, 22.12.2008 в 21:04.
(Offline)
 
Ответить с цитированием
Старый 22.12.2008, 21:26   #13
beZ_probleM
ПроЭктировщик
 
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений
(для 8 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

вот рабочий код :

var s,s1:string;
    
x,y,w,pos:integer;
begin
s
:='cтрока текста любой длинной'
x:=0;  //координата Х куда выводить 
y:=0;  //             -/ Y /- 
w:=getWidth;    //шырина поля вывода
pos:=0;   //позицыя в тексте 
repeat 
s1
:='';
while ((
getStringWidth(s1)+10)<w) and (pos<=length(s)-1) do 
   
begin 
     s1
:=s1+GetChar(s,pos); 
     
pos:=pos+1
   
end
drawtext(s1,x,y); 
repaint;
y:=y+10;
until pos>=length(s)-1
delay(10000);
end
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
temned (23.12.2008)
Старый 22.12.2008, 22:25   #14
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: перенос текста, вИходящего за предел экрана

Из исходников моего интерпретатора на языке MIDletPascal
s - строка
x,y - текущее положение курсора на экране
w,h - ширина высота области вывода
x0,y0 - стартовая позиция на экране

  while (x+getStringWidth(s)>=x0+w) do
  begin
    n:=length(s);
    if n>1 then
    begin
      repeat n:=n-1; until (getStringWidth(copy(s,0,n))<x0+w) or (n<=0);
      drawText(copy(s,0,n),x,y);
      s:=copy(s,n,length(s));
    end;
    n:=getStringHeight('ABCDEF');
    y:=y+n;
    if (y+n>=y0+h) then y:=y0;
    x:=x0;
  end;
  drawText(s,x,y);
  x:=x+getStringWidth(s);
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
temned (23.12.2008)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос истории Opera ViNT Болтовня 7 14.10.2009 12:43
Поворот отрезка на оределёный угол demon112 Математика 10 28.08.2009 18:42
Перенос с Blitz3D на другой движок G.A.D Болтовня 16 05.06.2009 22:28
Моя прога 6 в 1 но это еще не предел http://neten.org Проекты на MidletPascal 10 30.11.2007 08:06
все по демосцене : предел 4k jimon Болтовня 1 28.05.2006 22:14


Часовой пояс GMT +4, время: 21:19.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com