Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

как разделить строку на подстроки определенной длинны   Найти похожие ветки 

 
lena19   (2004-06-10 20:20) [0]

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

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


 
YurikGl ©   (2004-06-10 20:25) [1]

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


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

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


 
YurikGl ©   (2004-06-10 21:14) [3]

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


 
RealRascal ©   (2004-06-10 22:50) [4]

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

Function ExtractStrings(Const s: String; Separators: String):
  TStringlist;
Var
  i, j             : integer;
  s1               : String;
Begin
  Result:=TStringList.Create;
  i:=1;
  j:=1;
  While i<length(s) Do
     Begin
        If pos(s[i], Separators)>0 Then
           Begin
              s1:=copy(s, j+1, i-j-1);
              If s1<>"" 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;


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

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


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

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

Canvas.TextWidth

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

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


 
SergP ©   (2004-06-11 09:43) [7]

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

Но если:

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

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


 
Anatoly Podgoretsky ©   (2004-06-11 10:07) [8]

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


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

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


 
evvcom ©   (2004-06-13 02:22) [10]


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

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


 
Anatoly Podgoretsky ©   (2004-06-13 13:37) [11]

Canvas.TextWidth



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-1086512221
SkyRanger
2004-06-06 12:57
2004.06.27
Удалили аккаунт


3-1086162806
inkotex
2004-06-02 11:53
2004.06.27
Подключение к базе через сеть


1-1087202922
Vilux
2004-06-14 12:48
2004.06.27
Рисунок в RichEdit


4-1084959583
Elysium
2004-05-19 13:39
2004.06.27
Как написать приложение используя WinAPI


4-1084974375
Gr
2004-05-19 17:46
2004.06.27
WinAPI