|
Основной форум Сюда все проблемы связанные с программированием. |
19.12.2008, 17:20
|
#1
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
перенос текста, вИходящего за предел экрана
У мя есть текст tet:='тгашикугкпьмумкьугбущм уп'
Я рисую его: drawtext(tet,0,0);
как сделать так, штобы когда слово выходит за пределы экрана, оно переносилось на следующую строку, т.е вниз.
|
(Offline)
|
|
19.12.2008, 19:25
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
Стандартными средствами никак, либо делить вручную, либо использовать библиотеку font32, там вроде такое есть.
|
(Offline)
|
|
19.12.2008, 21:02
|
#3
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
но вручную может кто скажет как, может чето типа char
|
(Offline)
|
|
21.12.2008, 01:05
|
#4
|
ПроЭктировщик
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений (для 8 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
мож так
1.взять шырину екрана
2.взять текущее положение текста
3.узнать длинну текста перед выводом
и если текст оч длинный то взять длинну_текста-1 и проверить опять
4.если длинна получившегося текста подходит для места которое допустимо для вывода на екране то копируем текст от начала до значение которое получили в результате пункта 3.
5. далее проверяем текст но учитуем то шо начало уже будет
"значение которое получили в результате пункта 3" + 1
вот и фсё) думаю оно работать будет
|
(Offline)
|
|
21.12.2008, 01:12
|
#5
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
А если текст ну оооочень длинный? Тогда по 1 символу будет долго укорачивать. Лучше, думаю, длину экрана поделить на длину одного символа(лучше самого широкого), и для надежности отнять единицу - получим длину (в символах) допустимого текстового блока. Конечно, будет не совсем точно, так как ширина у символов разная, но, думаю, будет приемлемо.
|
(Offline)
|
|
21.12.2008, 01:50
|
#6
|
ПроЭктировщик
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений (для 8 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
да, я именно ето и хотел токшо написать как прочёл твои слова
А если текст ну оооочень длинный?
|
лучше канешно взять длинну самого длинного и добавить ещё парочку к сумме) шоб уже навернека)))
|
(Offline)
|
|
21.12.2008, 15:29
|
#7
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
если мона напишите пример маленьнкий
|
(Offline)
|
|
21.12.2008, 16:34
|
#8
|
ПроЭктировщик
Регистрация: 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
|
ПроЭктировщик
Регистрация: 25.12.2006
Сообщений: 163
Написано 7 полезных сообщений (для 12 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
я сто лет назад выкладывал модуль, названный CRT - там в исходниках функции по работе с текстом - то, о чем тут идет речь. воспользуйтесь поиском и найдите.
|
(Offline)
|
|
21.12.2008, 18:33
|
#10
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
че то не получается твои пример без_проблем
|
(Offline)
|
|
21.12.2008, 18:44
|
#11
|
Знающий
Регистрация: 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
|
ПроЭктировщик
Регистрация: 31.03.2008
Сообщений: 134
Написано 8 полезных сообщений (для 8 пользователей)
|
Ответ: перенос текста, вИходящего за предел экрана
2 TEMNED
почему не получаетсо? в чом причина? что не так? изложы
Последний раз редактировалось beZ_probleM, 22.12.2008 в 21:04.
|
(Offline)
|
|
22.12.2008, 21:26
|
#13
|
ПроЭктировщик
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.12.2008, 22:25
|
#14
|
Знающий
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:19.
|