![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как разделить строку на подстроки определенной длинны [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 и выделяешь нужную строчку.