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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2009, 19:45   #1
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию TRichEdit. Перенос курсора на другую строку

Подскажите пожалуйста. Есть строка 1 и 2. Как мне сделать так, чтобы при переносе на строку 2 (при нажатии на Enter), позиция курсора по X сдвигалась на столько, сколько пробелов было перед началом текста на 1 строке. Если не очень понятно, могу сделать иллюстрацию к вопросу. Спасибо за помощь.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 18.09.2009, 19:47   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Узнай, сколько пробелов было в начале строки 1 и столько же добавь в строку 2. Делаешь компилятор?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.09.2009, 19:58   #3
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Просто блокнот для своих нужд . Спасибо, не догадался. Дальше сам
Манжосов Денис :) вне форума Ответить с цитированием
Старый 18.09.2009, 20:23   #4
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

И всё-таки что-то у меня не выходит ничего. Вот код:
Код:
procedure TForm1.C_reEnter(Sender: TObject);
var
  x,i,k: integer;
  s: string;
begin
    x := 0;
    k := 1;
    s := c_Re.Lines.Strings[C_re.Lines.Count - 1];
    if s = '' then exit;
    while s[k] = ' ' do begin
      Inc(x);
      Inc(k);
    end;
    s := '';
    for i := 1 to x do s := s + ' ';
    C_re.Lines.Strings[C_re.Lines.Count] := s + C_re.Lines.Strings[C_re.Lines.Count];
end;
Немного несовершенный, согласен. Этот код не работает, можете помочь и сказать, что делаю не так?
Манжосов Денис :) вне форума Ответить с цитированием
Старый 18.09.2009, 20:25   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Может так:
*.Lines.Add(S);
Вместо C_re.Lines.Strings[C_re.Lines.Count] := s + C_re.Lines.Strings[C_re.Lines.Count];
P.S. Смоука в конце убивают
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.09.2009, 20:27   #6
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Твой вариант не подходит, не работает.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 18.09.2009, 20:38   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А потому, что она не выполняется, вот послушай:
Код:
procedure TForm1.C_reEnter(Sender: TObject);
var
  x,i,k: integer;
  s: string;
begin
    WINDOWS.BEEP(700,700);
    x := 0;
    k := 1;
    s := c_Re.Lines.Strings[C_re.Lines.Count - 1];
    if s = '' then exit;
    while s[k] = ' ' do begin
      Inc(x);
      Inc(k);
    end;
    s := '';
    for i := 1 to x do s := s + ' ';
    C_re.Lines.Strings[C_re.Lines.Count] := s + C_re.Lines.Strings[C_re.Lines.Count];
end;
Каждый раз при нажатии ENTER должна бикать.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.09.2009, 20:40   #8
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

И это я тоже знаю, что не выполняется. Я ещё пробовал в процедуре OnKeyPress писать if Key = #13 then ну и код переноса курсора. Давайте без лишнего флуда, а то модераторы будут ругаццо
Манжосов Денис :) вне форума Ответить с цитированием
Старый 19.09.2009, 14:36   #9
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Я не верю, что ни один человек на форуме не знает, как разрешить проблему. Это не обязательно должен быть компонент RichEdit, но и должен быть готовым компонентом с этой функцией.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 19.09.2009, 15:36   #10
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Из DelphiWorld с моими коментами :
Код:
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
var
  line, col, indent: integer;
  S: string;
begin
  if key = #13 then// работаем только есть нажата Enter
  begin
    key := #0;// сбрасываем клавишу чтобы по-умолчанию ничего не произошло - все сделаем сами далее...
    with sender as TRichEdit do
    begin
      // вычисляем позицию курсора: строка, столбец
      line := PerForm( EM_EXLINEFROMCHAR, 0, SelStart );
      Col := SelStart - Perform( EM_LINEINDEX, line, 0 );
      // берем все что было слева от курсора
      S:= Copy( lines[ line ], 1, col );
      // считаем пробелы или табы слева и до первого символа 
      indent := 0;
      while (indent < length( S )) and (S[indent + 1] in [' ', #9]) do Inc( indent );
      // переводим строку и вставляем то что было нами взято слева до первого символа (отступ)
      SelText := #13#10 + Copy(S, 1, indent);
    end;
  end;
end;
Всё.
P.S.
Под рукой нету Делфи - проверить не смог, но DelphiWorld верил всегда... Удачи !
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 20.09.2009 в 08:46.
Kotofff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос на другую строчку Vladya Помощь студентам 3 30.06.2009 23:20
перенос столбцов из одной закладки в другую wildvad Microsoft Office Excel 19 22.05.2009 11:35
перенос на другую ПК проги sergey2501 БД в Delphi 1 26.10.2008 20:07
Перенос данных в из 1 таб. в другую... ivp88 БД в Delphi 12 11.01.2008 15:45
Перенос EXE на другую машину tihon_65 Общие вопросы Delphi 12 21.02.2007 15:00