Вот простейшая процедура для разбиения длинной строки на маленькие строчечки:
Function DLT3 (start: integer): integer; // Это служебная функция для процедуры Format
var i, j, len, oi: integer;
begin
i:=start; len:=Length(str); oi:=i;
while (GetStrWidth2(Copy(str,start,i))<wi-ch) and (i<len) and (GetChar(str,i)<>nn) do begin if GetChar(str,i)=' ' then oi:=i; i:=i+1; end;
if (oi<>i) and (GetChar(str,i)<>nn) then begin
j:=oi; repeat j:=j+1; until (GetChar(str,j)=nn) or (GetChar(str,j)=' ') or (j>len);
if j<len then if GetStrWidth2(Copy(str,oi,j))<wi-ch then i:=oi;
end;
if GetChar(str,i)=' ' then i:=i+1;
if GetChar(str,i)=nn then i:=i+1;
DLT3:=i;
end;
Procedure Format;
var finish, start, k: integer;
begin
max:=0;
If GetStrWidth2(str)<wi-ch then begin for k:=0 to 32 do w[k]:=''; w[max]:=str; max:=1; end;
else begin
start:=0;
for k:=0 to 15 do begin
w[k]:=''; finish:=DLT3(start);
if GetChar(str,finish-1)<>nn then w[max]:=Copy(str,start,finish); else w[max]:=Copy(str,start,finish-1);
if w[max]=nn then w[max]:='';
if start<>finish then max:=max+1;
start:=finish; end;
end;
end;
Для разбиения строчки нужно её поместить в переменную
str и вызвать функцию
Format. После форматирования маленькие строчки будут содержаться в массиве
w, а количество полученных строк будет храниться в переменной
max.
Так же ещё нужно задать такие переменные:
w[0..32] - массив обрезанных строк
wi - ширина экрана
hi - высота экрана
ch - отступ от правого края экрана в пикселах
nn - символ для переноса, например "|"
Функция
GetStringWidth2 - вычисляет ширину строки в пикселах, если у тебя шрифт не графический, а встроенный в телефон, то можно заменить на обычную
GetStringWidth.
Особенности - чтобы процедура нормально работала нужно перед каждым символом переноса (задаваемым переменной
nn) и в самом конце разбиваемой строки ставить пробел.