Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Внизкак разделить строку на подстроки определенной длинны Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c