Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как разделить строку на подстроки определенной длинны [D7, WinXP]


lena19 ©   (2004-06-10 20:20:00) 

всем привет
народ чем можно заменить такой код
s:string;s1:tstringlist;
memo1.text:=s;
s1[1]:=memo1.lines.string(1);

нужно разделить строку на подстроки определенной длинны
может есть какая функция а то уж больно не хочется для этого memo использовать


Anatoly Podgoretsky   (2004-06-13 13:37:00) [1]

Canvas.TextWidth


evvcom   (2004-06-13 02:22:00) [2]


> не ужели в API нет такой функции

Я о такой не слышлал, хотя я мало в этом направлении работал.
А написать самой можно, учитывая [3], [6], возможно и какие-то другие.


lena19   (2004-06-11 16:15:00) [3]

to anatoly
нет букву пополам делить не надо, а вот слово, если оно больше
ширины канвы уже придется разорвать. в остальных случаях перенос осуществлять по пробелам .
не ужели в API нет такой функции, веть ето используется в почти любом окне которое работает с текстом.


Anatoly Podgoretsky   (2004-06-11 10:07:00) [4]

lena19   (11.06.04 09:32) [5]
Сложновато, да и неудобно видеть половину символа в одной строке а вторую половину в следующей.


SergP   (2004-06-11 09:43:00) [5]

На сколько я понял строку нужно делить в месте расположения пробела,ттак чтобы получившийся кусок не превышал заданный размер...
С помощью copy, pos, delete можно все поделить как хочешь, если при этом учитывать макс. количество символов в одной подстроке.
Когда-то приходилось такое делать.. Но не знаю или найду этот код. а писать заново времени нет...

Но если:

> с учотом размера канвы

т.е. если ширина задана в пикселях, то хз...


KSergey   (2004-06-11 09:38:00) [6]

Ну и перефразировочка...

Canvas.TextWidth

или сразу DrawText(Canvas.Handle,...

Пример использования можно глянуть в исходниках VCL, метод TCustomLabel.DoDrawText модуля StdCtrls


lena19   (2004-06-11 09:32:00) [7]

я наверно плохо вопрос сформулировала в моей строке нет ни каких разделителей и сепараторов тозе есть тока размер канвы для вывода .если задать размер мемо то он автоматом делит строку на подстроки с учотом размера канвы етото мне и нужно чтоб строка вписалась в заданный квадрат с ограничением по длинне не в знако местах а в пикселях


RealRascal   (2004-06-10 22:50:00) [8]

Эта функция делит строку s на подстроки с учетом разделителей Separators(их может быть несколько) возвращает результат в TStringlist

FunctionExtractStrings( Consts: String; Separators: String):
  TStringlist;
Var
  i, j             : integer;
  s1               : String;
Begin
  Result:=TStringList.Create;
  i:=1;
  j:=1;
  Whilei<length(s) Do
      Begin
        Ifpos(s[i], Separators)>0 Then
            Begin
              s1:=copy(s, j+1, i-j-1);
              Ifs1<>'' Then
                 Result.Add(s1);
              j:=i
            End;
        inc(i)
      End;
  s1:=copy(s, j+1, i-j);
  If(s1<>'') And(pos(s1, separators)=0) Then
     Result.Add(s1);
End;


YurikGl   (2004-06-10 21:14:00) [9]

функция copy(st,poz,N) выделяет из строки st подстроку длиной n симвлов начиная с позции poz


lena19   (2004-06-10 20:46:00) [10]

в переменной S нет сивола конца строки потому что ее ещо ни кто не делил это одна большая строка


YurikGl   (2004-06-10 20:25:00) [11]

Можно TString использовать...
А вообще ищешь символы конца строки #13 и выделяешь нужную строчку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо