Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 03:11   #1
IIpopoK
Пользователь Подтвердите свой е-майл
 
Аватар для IIpopoK
 
Регистрация: 03.01.2008
Сообщений: 49
Вопрос Перемещение на следующую строку в RichEdit, как??

Здрасти!
Как мне программно перейти на новую строку с того места где стоит курсор, чтобы все после идущие строки сдвинулись ниже?
(подобно нажатию кнопки "Enter"!)
Все это должно происходить в "RichEdit"
IIpopoK вне форума Ответить с цитированием
Старый 22.05.2009, 03:19   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Как-нибудь так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.SelLength := length(RichEdit1.Text);
if RichEdit1.SelText[1]<>#13 then
 RichEdit1.SelText := #10+RichEdit1.SelText
else
 RichEdit1.SelText := #10+#13+RichEdit1.SelText;
end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.05.2009, 03:26   #3
IIpopoK
Пользователь Подтвердите свой е-майл
 
Аватар для IIpopoK
 
Регистрация: 03.01.2008
Сообщений: 49
По умолчанию

Sazary, опишите плиз что тут что выполняет!?
и еще вопросик... как мне в эту новую строку вставить текст.. ведь курсор сбивается=( м?

Последний раз редактировалось IIpopoK; 22.05.2009 в 03:30.
IIpopoK вне форума Ответить с цитированием
Старый 22.05.2009, 12:32   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.SelLength := length(RichEdit1.Text); // выделяем все от текущей позиции и до конца
if RichEdit1.SelText[1]<>#13 then  
 RichEdit1.SelText := #10+RichEdit1.SelText  // заменяем выделенный текст на этот текст + возврат каретки
else
 RichEdit1.SelText := #10+#13+RichEdit1.SelText;  // то же самое, только еще + перевод строки
end;
Условие тут нужно, потому что я заметил, что если курсор находится в конце строки, то на новую строку не переводится. Поэтому приходится обрабатывать этот случай.
Цитата:
как мне в эту новую строку вставить текст.. ведь курсор сбивается=( м?
Просто перед этими манипуляциями сохраните позицию курсора:
Код:
k := RichEdit1.SelStart;
а после переноса, восстановите:
В общем:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
if RichEdit1.SelText[1]<>#13 then
 RichEdit1.SelText := #10+RichEdit1.SelText 
else
 RichEdit1.SelText := #10+#13+RichEdit1.SelText;  
RichEdit1.SelStart := k;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.05.2009, 03:43   #5
IIpopoK
Пользователь Подтвердите свой е-майл
 
Аватар для IIpopoK
 
Регистрация: 03.01.2008
Сообщений: 49
Восклицание

Цитата:
Сообщение от Sazary Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
if RichEdit1.SelText[1]<>#13 then
 RichEdit1.SelText := #10+RichEdit1.SelText 
else
 RichEdit1.SelText := #10+#13+RichEdit1.SelText;  
RichEdit1.SelStart := k;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;
 end;
Спасибо большое! Изменил чуть-чуть это "RichEdit1.SelStart := k;" на "RichEdit1.SelStart := k+1;" и стало так как мне нужно...
Но после вставки 1-ой, 2-ой строк.. начитается не то что мне нужно..
начинай с 3-й вставки строки после нее начинает ставиться по строке в +1
Вот что получается:
Код:
10
10
10
10
10
{да(условие)}
пустая строка
пустая строка
пустая строка
пустая строка
пустая строка
т.е. как... после добовления 3-й строки добавляется 4-я строка с моим текстом и 5-я пустая строка(которая не нужна).
Как исправить(В принципе то правильно.. но мне не нравится то что каждый раз приходится убирать лишние пустые строки)?

Последний раз редактировалось IIpopoK; 23.05.2009 в 03:48.
IIpopoK вне форума Ответить с цитированием
Старый 23.05.2009, 12:33   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

IIpopoK, хорошо б на код посмотреть ) А то так сложновато сказать.
Попробуйте просто вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
RichEdit1.SelText := #13+RichEdit1.SelText 
RichEdit1.SelStart := k;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.05.2009, 17:31   #7
IIpopoK
Пользователь Подтвердите свой е-майл
 
Аватар для IIpopoK
 
Регистрация: 03.01.2008
Сообщений: 49
Восклицание

Код:
procedure TInspectorForm.Button1Click(Sender: TObject);
var
    t,k:integer;
    mess:Word;
begin
if SpinEdit1.Value=3 then //если Процесс
begin
{Начало, проверка нажатой кнопки в меседж}
      mess:=Application.MessageBox('Куда поставить блок? В Да или Нет?','Внимание!',MB_YESNO+MB_ICONQUESTION);
          if mess=mrYes then // если нажата кнопка Yes
              begin
              SAR(Pcode.Richedit1,'{да(условие)}', InspectorForm.mText.Text); //функция поиска и вставки текста условия

k:=Pcode.RichEdit1.SelStart;
Pcode.RichEdit1.SelLength := length(Pcode.RichEdit1.Text);
if Pcode.RichEdit1.SelText[1]<>#13 then
 Pcode.RichEdit1.SelText := #10+Pcode.RichEdit1.SelText
else
 Pcode.RichEdit1.SelText := #10+#13+Pcode.RichEdit1.SelText;
Pcode.RichEdit1.SelStart := k+1;
Pcode.RichEdit1.SelLength := 0;
Pcode.RichEdit1.SetFocus;

SendMessage(Pcode.RichEdit1.Handle, EM_REPLACESEL, 0, integer(PCHAR('{да(условие)}')));//вставка текста в место где стоит курсор

              end;
          if mess=mrNo then // если нажата кнопка Yes
              begin
              SAR(Pcode.Richedit1,'{нет(условие)}', InspectorForm.mText.Text);//функция поиска и вставки текста условия
k:=Pcode.RichEdit1.SelStart;
Pcode.RichEdit1.SelLength := length(Pcode.RichEdit1.Text);
if Pcode.RichEdit1.SelText[1]<>#13 then
 Pcode.RichEdit1.SelText := #10+Pcode.RichEdit1.SelText
else
 Pcode.RichEdit1.SelText := #10+#13+Pcode.RichEdit1.SelText;
Pcode.RichEdit1.SelStart := k+1;
Pcode.RichEdit1.SelLength := 0;
Pcode.RichEdit1.SetFocus;
SendMessage(Pcode.RichEdit1.Handle, EM_REPLACESEL, 0, integer(PCHAR('{нет(условие)}')));//вставка текста в место где стоит курсор
              end;
{Конец, проверка нажатой кнопки в меседж}
end;
Вот код который я наколякал! попробовал вот это:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
RichEdit1.SelText := #13+RichEdit1.SelText 
RichEdit1.SelStart := k;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;
 end;
при "да" текст вставляется вместо курсора.. но не смещается вниз.. + к этому при повторном нажатии на "да" создается пустая строка, а текст добовляется в ту строку в которую добавлялся текст введенный первым!
(знаю.. обьяснять я не могу(((()
IIpopoK вне форума Ответить с цитированием
Старый 23.05.2009, 18:00   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот это не то, что нужно?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
RichEdit1.SelText := #13+RichEdit1.SelText;
RichEdit1.SelStart := k+1;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;

SendMessage(RichEdit1.Handle, EM_REPLACESEL, 0, integer(PCHAR('{нет(условие)}')));
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.05.2009, 18:19   #9
IIpopoK
Пользователь Подтвердите свой е-майл
 
Аватар для IIpopoK
 
Регистрация: 03.01.2008
Сообщений: 49
Печаль

Если применять этот код то всеравно не так работает=((
Цитата:
Сообщение от Sazary Посмотреть сообщение
Вот это не то, что нужно?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k : integer;
begin
k := RichEdit1.SelStart;
RichEdit1.SelLength := length(RichEdit1.Text);
RichEdit1.SelText := #13+RichEdit1.SelText;
RichEdit1.SelStart := k+1;
RichEdit1.SelLength := 0;
RichEdit1.SetFocus;

SendMessage(RichEdit1.Handle, EM_REPLACESEL, 0, integer(PCHAR('{нет(условие)}')));
 end;
в итоге выходит вот это
Код:
IF #14 THEN
Begin{Начало условия}
{да(условие)}
End;{Конец условия}
ELSE
Begin{Начало иначе}
10{нет(условие)} - (выделенный текст - это текст который должен был вставиться на новую строку)
End;{Конец иначе}
IIpopoK вне форума Ответить с цитированием
Старый 23.05.2009, 18:31   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что-то я не очень понимаю, что требуется.
В приведенном примере в одном случае текст должен выводиться на той же строке, а в другом - на новой.

Так вот когда нужно одно, а когда другое?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос текста на следующую строку в TEdit uraura Общие вопросы Delphi 3 17.04.2009 18:13
Как при нажатии на строку в Listbox передавать нажатую строку в переменную Михаил Юрьевич Общие вопросы Delphi 5 16.03.2009 12:59
Как обработать следующую ситуацию? Tanuska___:) БД в Delphi 5 09.09.2008 12:47
На чем целесообразнее решить следующую задачу? Stilet Свободное общение 4 01.08.2008 09:35
Перемещение указателя на следующую запись Avalonix БД в Delphi 6 31.05.2008 11:13