Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выделить строку в TMemo? Как выделить строку в TMemo? 
:(
    Опции темы
095
  Дата 21.7.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



Как полностью выделить строку (Lines[5] допустим) в TMemo? эффект SelStart SelLength, но с координатами не текста а данной строки ..
PM MAIL WWW   Вверх
Backspace
Дата 21.7.2008, 04:55 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Код

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


это попробуй)
PM MAIL   Вверх
Rrader
  Дата 21.7.2008, 05:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Код

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).


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
095
  Дата 21.7.2008, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



Цитата(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 а не для мемо?
PM MAIL WWW   Вверх
THandle
Дата 21.7.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



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;



Это сообщение отредактировал(а) THandle - 21.7.2008, 09:40
PM   Вверх
095
  Дата 21.7.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



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

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

Добавлено через 3 минуты и 6 секунд
.........опять же , это походу рич smile ниче не выходит с мемо
PM MAIL WWW   Вверх
THandle
Дата 21.7.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



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.



PM   Вверх
095
  Дата 21.7.2008, 10:29 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



      Memo1.SelStart := Perform(EM_LINEINDEX, strtoint(Edit1.Text), 0);
      Memo1.SelLength := Length(Memo1.Lines[strtoint(Edit1.Text)]);

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

Это сообщение отредактировал(а) 095 - 21.7.2008, 10:31
PM MAIL WWW   Вверх
THandle
Дата 21.7.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



В примере 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;


PM   Вверх
Poseidon
Дата 21.7.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



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))


Это сообщение отредактировал(а) Poseidon - 21.7.2008, 10:58


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
095
Дата 21.7.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 3.10.2007

Репутация: нет
Всего: нет



ок спасип
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.