Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как выделить строку в TMemo?


Автор: 095 21.7.2008, 00:56
Как полностью выделить строку (Lines[5] допустим) в TMemo? эффект SelStart SelLength, но с координатами не текста а данной строки ..

Автор: Backspace 21.7.2008, 04:55
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage( memo1.Lines.Strings[0] );
end;


это попробуй)

Автор: Rrader 21.7.2008, 05:58
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Memo1 do
  begin
    SelStart := Perform(EM_LINEINDEX, 2, 0);
    SelLength := Length(Lines[2]);
    SetFocus;
  end;
end;

Выделяет третью строчку (zero-based).

Автор: 095 21.7.2008, 09:17
Цитата(Rrader @  21.7.2008,  05:58 Найти цитируемый пост)
код Pascal/Delphi

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Memo1 do
  begin
    SelStart := Perform(EM_LINEINDEX, 2, 0);
    SelLength := Length(Lines[2]);
    SetFocus;
  end;
end;

Выделяет третью строчку (zero-based). 




Хммммммммм ... Выделяет исключительно сверху и исключительно с 1й по 2ю (!) строку с 0 самого memo1.selstart.... даже если поставить EM_LINEINDEX, 2, 20 или даже если EM_LINEINDEX, 400, 200!
Эта фича случайно не для richedit а не для мемо?

Автор: THandle 21.7.2008, 09:39
095, http://msdn.microsoft.com/en-us/library/aa925071.aspx

Это для всех Edit'ов сообщение.


Цитата(095 @  21.7.2008,  10:17 Найти цитируемый пост)
EM_LINEINDEX, 2, 20 


Цитата(095 @  21.7.2008,  10:17 Найти цитируемый пост)
EM_LINEINDEX, 400, 200!




Цитата(msdn)

 lParam

    Not used; set to 0.




Я бы написал вот такую процедуру:

Код

procedure TForm1.SelLine(Index: integer);
begin
  with Memo1 do
    begin
      SelStart := Perform(EM_LINEINDEX, Index, 0);
      SelLength := Length(Lines[Index]);
      SetFocus;
    end;
end;



И вызывал бы так:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  SelLine(номер_строки_которую_надо_выделить);
end;


Автор: 095 21.7.2008, 09:40
Вопщем .. я сделал высчет selstart по строкам до нужной позиции и sellength будет решением ..
Всем спасибы!

Добавлено через 59 секунд
опс! сорри, предпоследнего оратора не выслушал .. щас попробую с SelLine и прочим!!

Добавлено через 3 минуты и 6 секунд
.........опять же , это походу рич smile ниче не выходит с мемо

Автор: THandle 21.7.2008, 09:50
095, у меня в Delphi 7 все нормально выделяет, нужную строку. У тебя видимо что то еще...

Покажи весь свой код или попробуй создать пустое приложение, бросить на форму Мемо и Бутн, и попробовать этот код.

Добавлено через 1 минуту и 5 секунд
Цитата(095 @  21.7.2008,  10:40 Найти цитируемый пост)
это походу рич


Цитата

This message retrieves the character index of a line in a multiline edit control.



Автор: 095 21.7.2008, 10:29
      Memo1.SelStart := Perform(EM_LINEINDEX, strtoint(Edit1.Text), 0);
      Memo1.SelLength := Length(Memo1.Lines[strtoint(Edit1.Text)]);

Выделяет ровно с 0 Memo1.Text и в зависимости от увеличения увеличивает sellength на 5-6 символов ... 

Автор: THandle 21.7.2008, 10:46
В примере rrader'а мы используем метод Perform от Memo1!!!! А у тебя используется Perform формы... Вот за что я не люблю with...
Код


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.SelStart := Memo1.Perform(EM_LINEINDEX, strtoint(Edit1.Text), 0);
  Memo1.SelLength := Length(Memo1.Lines[strtoint(Edit1.Text)]);
  Memo1.SetFocus;
end;


Автор: Poseidon 21.7.2008, 10:57
095, тебе же THandle, сделал процедурой, которая (между прочим) нормально работает. Позволю себе чуток ее подредактировать и сделать все универсально:
Код

procedure SelLine(Memo: TMemo; Index: integer);
begin
  with Memo do
    begin
      SelStart := Perform(EM_LINEINDEX, Index, 0);
      SelLength := Length(Lines[Index]);
      SetFocus;
    end;
end;


Вызывай ее у себя так:

Код

SelLine(Memo1, StrToInt(Edit1.Text))

Автор: 095 21.7.2008, 11:28
ок спасип

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)