Показать сообщение отдельно
Старый 29.06.2008, 09:57   #9
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Графическое меню в Midlet Pascal. Как?

Вот простейшая процедура для разбиения длинной строки на маленькие строчечки:

 
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) и в самом конце разбиваемой строки ставить пробел.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RblSb (10.07.2014)