forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   перенос текста, вИходящего за предел экрана (http://forum.boolean.name/showthread.php?t=7469)

temned 19.12.2008 17:20

перенос текста, вИходящего за предел экрана
 
У мя есть текст tet:='тгашикугкпьмумкьугбущм уп'
Я рисую его: drawtext(tet,0,0);
как сделать так, штобы когда слово выходит за пределы экрана, оно переносилось на следующую строку, т.е вниз.

ViNT 19.12.2008 19:25

Ответ: перенос текста, вИходящего за предел экрана
 
Стандартными средствами никак, либо делить вручную, либо использовать библиотеку font32, там вроде такое есть.

temned 19.12.2008 21:02

Ответ: перенос текста, вИходящего за предел экрана
 
но вручную может кто скажет как, может чето типа char

beZ_probleM 21.12.2008 01:05

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

вот и фсё) думаю оно работать будет;)

ViNT 21.12.2008 01:12

Ответ: перенос текста, вИходящего за предел экрана
 
А если текст ну оооочень длинный? Тогда по 1 символу будет долго укорачивать. Лучше, думаю, длину экрана поделить на длину одного символа(лучше самого широкого), и для надежности отнять единицу - получим длину (в символах) допустимого текстового блока. Конечно, будет не совсем точно, так как ширина у символов разная, но, думаю, будет приемлемо.

beZ_probleM 21.12.2008 01:50

Ответ: перенос текста, вИходящего за предел экрана
 
да, я именно ето и хотел токшо написать как прочёл твои слова
Цитата:

А если текст ну оооочень длинный?
лучше канешно взять длинну самого длинного и добавить ещё парочку к сумме) шоб уже навернека)))

temned 21.12.2008 15:29

Ответ: перенос текста, вИходящего за предел экрана
 
если мона напишите пример маленьнкий

beZ_probleM 21.12.2008 16:34

Ответ: перенос текста, вИходящего за предел экрана
 
Новый вариант)) отличаетсо лишь тем шо строка на вывод формируетсо путём добавления посимвольно)

PHP код:

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


ARV 21.12.2008 18:17

Ответ: перенос текста, вИходящего за предел экрана
 
я сто лет назад выкладывал модуль, названный CRT - там в исходниках функции по работе с текстом - то, о чем тут идет речь. воспользуйтесь поиском и найдите.

temned 21.12.2008 18:33

Ответ: перенос текста, вИходящего за предел экрана
 
че то не получается твои пример без_проблем

temned 21.12.2008 18:44

Ответ: перенос текста, вИходящего за предел экрана
 
Вот смотрите:
dlina:=getStringWidth(vopros[m]);
if dlina>w then drawtext(s,0,20); //если длина строки больше ширины то рисуем текст s
А чему должен ровняться s? Он должен равняться части, которая выходит за экран, но как это обозначить? ПОМОГИТЕ!

beZ_probleM 21.12.2008 23:50

Ответ: перенос текста, вИходящего за предел экрана
 
2 TEMNED
почему не получаетсо? в чом причина? что не так? изложы

beZ_probleM 22.12.2008 21:26

Ответ: перенос текста, вИходящего за предел экрана
 
вот рабочий код :

PHP код:

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


abcdef 22.12.2008 22:25

Ответ: перенос текста, вИходящего за предел экрана
 
Из исходников моего интерпретатора на языке 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);



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot