Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.06.2010, 23:19
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию RichEdit - выравнивание по ширине

Помогите пожалуйста разобарться:

нужно отредактировать конкретную строчку, заменив в ней, к примеру один пробел на два.

Строчку вычисляю вот так
RichEdit1.Lines.Count; //всего строк
RichEdit1.Lines[1]; //№ строчки

но как заменить, скажем, один пробел на два? то есть я пытался через RichEdit1.Text , но ничего толкого не получилось.

Подскажите пожалуйста, ув. форумчане =)
Ответить с цитированием
  #2  
Старый 08.06.2010, 23:50
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

Подскажите плз хотя бы как перевести строчку под номером (RichEdit1.Lines[i]) в текст?

То есть что то вроде
RichEdit1.Text := RichEdit1.Lines[i];
но что бы правильно и работало =)
Ответить с цитированием
  #3  
Старый 09.06.2010, 00:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
var
  S : String;
begin
  S := RichEdit1.Lines[i];

не работает?
Ответить с цитированием
  #4  
Старый 09.06.2010, 00:47
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Код:
var
  S : String;
begin
  S := RichEdit1.Lines[i];

не работает?
работает, большое спасибо. Пробовал так же, но S был boolean и по этому была ошибка

остался последний вопрос - как заменить в строке один символ на другой? или подскажите пожалуйста, через какой оператор это делать?
Ответить с цитированием
  #5  
Старый 09.06.2010, 00:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Замена - со строкой можно работать как с массивом. только нумерация с 1. Есть еще StringReplace, но она скорее для замены подстрок, а не отдельных символов.
Удаление - есть процка Delete.
Вставка - Insert.
Ответить с цитированием
  #6  
Старый 09.06.2010, 17:31
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

читал справку, так и не понял как удалить символ через delete
сейчас погуглил, решил что может быть можно как нибудь через search (' ',' '); то есть заменить один пробел на два, как я понял, либо через StringReplace

Помогите пожалуйста прикрутить это
Сейчас мой код выглядид так:
Код:
begin
n := RichEdit1.Lines.Count;
for i:= 1 to n do begin
strk := RichEdit1.Lines[i];



i:=i-1;
end;

end;
Ответить с цитированием
  #7  
Старый 09.06.2010, 19:49
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

помогите плз, курсач скоро сдавать, а у меня ничего не получается =\
Ответить с цитированием
  #8  
Старый 09.06.2010, 20:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
// Expand string by spaces
function SetStrLength(S : String; ALength : Integer) : String;
var
  Sp : Integer;
  I : Integer;
begin
   Sp := ALength - Length(S);
   If Sp <= 0 
     Then Result := S
     Else
        While Sp > 0 Do
        Begin
          Result := '';
          For I := 1 To S Do
            Begin
              Result := Result + S[i];
              If (S[i] = ' ') And (Sp > 0) Then
                Begin
                  Dec(Sp);
                  Result := Result + ' ';
                End;
            End;
          S := Result;
        End;
end;

...
begin
  for i:= 0 to RichEdit1.Lines.Count-1 do begin
  RichEdit1.Lines[i] := SetStrLength(RichEdit1.Lines[i],80);
end;

где-то так.
не проверял.
Ответить с цитированием
  #9  
Старый 09.06.2010, 20:28
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
For I := 1 To S Do
[Error] WordPad.pas(98): Incompatible types: 'Integer' and 'String'
Но всё равно большущее спасибо
Ответить с цитированием
  #10  
Старый 09.06.2010, 20:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Угу,
Код:
For I := 1 To Length(S) Do 
Ответить с цитированием
  #11  
Старый 10.06.2010, 00:09
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

а вот так работает, правда иногда виснет, но всё равно большое спасибо!
Ответить с цитированием
  #12  
Старый 10.06.2010, 00:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

проверь, а не виснет ли на строчках, в которых вообще нет пробелов?
Если да, то просто перед обработкой проверяй, что в строке нет пробелов (Pos(' ',S) = 0) и пропускай такие строки.
Ответить с цитированием
  #13  
Старый 10.06.2010, 12:21
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

Пытаюсь переделать для всех шрифтов, а не только моношрифтов.
Как понимаю надо сделать что то вроде ALength := IntToStr(ListView1.StringWidth(S));
В function SetStrLength эта строчка не работает, но в procedure TForm1.btn10Click(Sender: TObject); ошибок не выдает.
Как решить эту ситуацию, т.к. как я понимаю, эта строчка должна быть в function SetStrLength

Последний раз редактировалось login, 10.06.2010 в 20:48.
Ответить с цитированием
  #14  
Старый 11.06.2010, 00:19
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию

up, help plz =\
Ответить с цитированием
  #15  
Старый 11.06.2010, 01:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Э-э-э... это посложнее.
у канвы есть метод TextWidth.
Т.е. тебе надо добавить таекое кол-во пробелов, что бы привести к почти одинаковой длинне по результату вызова этой функции.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025