Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.03 c
3-1086158603
avgur
2004-06-02 10:43
2004.06.27
FB 1.5.0.4306


3-1085996825
TohaNik
2004-05-31 13:47
2004.06.27
Пользователям IB Expert.


14-1086679428
Agent13
2004-06-08 11:23
2004.06.27
Прохождение Венеры по солнечному диску


3-1086070603
Valeri
2004-06-01 10:16
2004.06.27
Visual Foxpro, индексы


14-1086868231
Поручик
2004-06-10 15:50
2004.06.27
Откуда берутся хорошие девелоперы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский