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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2008, 12:38   #1
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию RichEdit

Как програмно выделить нужную (по номеру) строку в RichEdit?
Valera вне форума Ответить с цитированием
Старый 01.08.2008, 13:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например так:
Цитата:
const str=4;
var i,k:integer;
begin
i:=1; k:=str; while (k>0)and(i<length(RichEdit1.Lines.T ext)) do begin
if copy(RichEdit1.Lines.Text,i,1)=#13 then dec(k);
inc(i);
end;
RichEdit1.SelStart:=i;RichEdit1.Sel Length:=length(RichEdit1.Lines[str]);
end;
Здесь str номер строки начинающийся с нуля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2008, 13:56   #3
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Спасибо, я попробую.
Valera вне форума Ответить с цитированием
Старый 01.08.2008, 16:11   #4
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Пожалуйста, объяните смысл этих строк.

copy(RichEdit1.Lines.Text,i,1)=#13
length(RichEdit1.Lines.Text
Valera вне форума Ответить с цитированием
Старый 03.08.2008, 22:15   #5
Longedok
Пользователь
 
Аватар для Longedok
 
Регистрация: 14.07.2007
Сообщений: 40
Сообщение

Код:
while (k>0) and (i<length(RichEdit1.Lines.Text)) do
begin
   if copy(RichEdit1.Lines.Text,i,1)=#13 then
      dec(k);
   inc(i)
end;
...
k - это кол-во строк от начала файла до строки которую необходимо подсветить. i - текущий символ в RichEdit`е. Если этот текущий символ равен #13, то есть невидимому символу конца строки, то мы уменьшаем кол-во строк до необходимой строки на один (dec(k)). Когда k будет равно 0 мы будем знать, что достигли искомой строки. Но может случиться ситуация, когда строк в файл будет меньше чем указано. Вот на это случай и нужна вторая функция length(RichEdit1.Lines.Text). Она вернет нам номер последнего символа в файле. И если текущей символ равен последнему, то цикл закончится.
Котэ покарает тебя, %username%!
Longedok вне форума Ответить с цитированием
Старый 03.08.2008, 22:58   #6
Longedok
Пользователь
 
Аватар для Longedok
 
Регистрация: 14.07.2007
Сообщений: 40
По умолчанию

Я тут нашел способ полегче:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Line: Integer;
begin
  Line := 7;
  RichEdit1.SetFocus;
  RichEdit1.SelStart  := RichEdit1.Perform(EM_LINEINDEX, Line, 0);
  RichEdit1.SelLength := Length(RichEdit1.Lines[Line]);
end;
Line - номер строки которую нужно выделить начиная с нуля.
Котэ покарает тебя, %username%!

Последний раз редактировалось Longedok; 03.08.2008 в 23:00.
Longedok вне форума Ответить с цитированием
Старый 04.08.2008, 10:18   #7
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Большое спасибо за разъяснение. У меня не выделялся текст потому, что нужно еще HideSelection:=false
Я хочу уточнить - чтобы получить номер символа в тексте обязательно использовать Copy?
Valera вне форума Ответить с цитированием
Старый 04.08.2008, 10:54   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,579
По умолчанию

Цитата:
Я хочу уточнить - чтобы получить номер символа в тексте обязательно использовать Copy?
Нет, вместо этого
Код:
if copy(RichEdit1.Lines.Text,i,1)=#13 then
Лучше делать так:
Код:
if RichEdit1.Lines.Text[i]=#13 then
Arigato вне форума Ответить с цитированием
Старый 04.08.2008, 14:33   #9
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Arigato, спасибо.
Valera вне форума Ответить с цитированием
Старый 04.08.2008, 17:26   #10
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Цитата:
Сообщение от Longedok Посмотреть сообщение
Код:
while (k>0) and (i<length(RichEdit1.Lines.Text)) do
begin
   if copy(RichEdit1.Lines.Text,i,1)=#13 then
      dec(k);
   inc(i)
end;
...
k - это кол-во строк от начала файла до строки которую необходимо подсветить. i - текущий символ в RichEdit`е. Если этот текущий символ равен #13, то есть невидимому символу конца строки, то мы уменьшаем кол-во строк до необходимой строки на один (dec(k)). Когда k будет равно 0 мы будем знать, что достигли искомой строки. Но может случиться ситуация, когда строк в файл будет меньше чем указано. Вот на это случай и нужна вторая функция length(RichEdit1.Lines.Text). Она вернет нам номер последнего символа в файле. И если текущей символ равен последнему, то цикл закончится.
Спасибо за объяснение. А, как выделить эту же строку любым цветом?
Valera вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RichEdit Killbrum Помощь студентам 3 12.06.2008 22:41
RichEdit StartMis Общие вопросы Delphi 20 24.04.2008 15:40
RichEdit nimf Общие вопросы Delphi 8 23.04.2008 07:55
RichEdit и *.gif Teen4jump Общие вопросы Delphi 2 03.04.2008 10:10
RichEdit Римма Компоненты Delphi 3 23.01.2008 14:33