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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 18:54   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Немного необычный поиск в TMemo

Здравствуйте, коллеги ! Есть процедура поиска и выделения строки в компоненте TMemo, как ее можно дополнить, что бы когда я нажимаю на кнопку ищется текст, а потом когда я нажимаю еще раз эту кнопку ищется текст далее . . . Это нужно для того, если в TMemo имеются два одинаковых слова, а эта процедура найдет лишь первое слово, а второго уже не найдет . . .

procedure TPrintBox.FindButtonClick(Sender: TObject);
var
I: Integer;
Find: string;
begin
Find := FindEdit.Text;
for I := 0 to PrintMemo.Lines.Count - 1 do
if Pos(Find, PrintMemo.Lines.Text) <> 0 then
begin
PrintMemo.SetFocus();
PrintMemo.SelStart := Pos(Find, PrintMemo.Lines.Text) - 1;
PrintMemo.SelLength := Length(Find);
end;
end;
RIO вне форума Ответить с цитированием
Старый 28.07.2009, 19:16   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

в D7 есть функция PosEx (поиск с указанием начальной позиции)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.07.2009, 19:26   #3
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Да ! Спасибо ! Попробую !
RIO вне форума Ответить с цитированием
Старый 28.07.2009, 21:56   #4
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Попробовал, всеравно что-то не получается, скорее всего я использую, как-то не почеловечески эту функцию :

var
Find: string;
begin
I := PrintMemo.SelStart;
Find := FindEdit.Text;
P := PosEx(Find, PrintMemo.Lines.Text, I);
if P > 0 then
begin
PrintMemo.SetFocus;
PrintMemo.SelStart := PosEx(Find, PrintMemo.Lines.Text, I) - 1;
PrintMemo.SelLength := Length(Find);
end;
end;

Подскажите пожалуйста, как правильно будет ?
RIO вне форума Ответить с цитированием
Старый 28.07.2009, 22:40   #5
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Код:
var
  Form1: TForm1;
  i,p : Integer;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
Find: string;
begin
  I := PrintMemo.SelStart+PrintMemo.SelLength;
  Find := Edit1.Text;
  P := PosEx(Find, PrintMemo.Lines.Text, I);
 if P > 0 then
  begin
   PrintMemo.SetFocus;
   PrintMemo.SelStart := p-1;
   PrintMemo.SelLength := Length(Find);
  end;
end;

Последний раз редактировалось lexaltd; 28.07.2009 в 22:42.
lexaltd вне форума Ответить с цитированием
Старый 29.07.2009, 00:32   #6
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Да, спасибо огромное
RIO вне форума Ответить с цитированием
Старый 29.07.2009, 02:28   #7
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Вот немного подкорректировал, вот, что получилось :

Код:
var
  PrintBox: TPrintBox;
  I: Integer; 

procedure TPrintBox.FindButtonClick(Sender: TObject);
var
  P: Integer;
  Find: string;
begin
  if (PrintMemo.SelStart = 0) and (PrintMemo.CaretPos.X = 0) then
     I := 1
  else
  begin
     I := PrintMemo.SelStart + PrintMemo.SelLength;
     if I = Length(PrintMemo.Text) then
        I := 1;
  end;
  Find := FindEdit.Text;
  P := PosEx(Find, PrintMemo.Lines.Text, I);
  if P > 0 then
  begin
     PrintMemo.SetFocus;
     PrintMemo.SelStart := PosEx(Find, PrintMemo.Lines.Text, I) - 1;
     PrintMemo.SelLength := Length(Find);
  end;
end;
Еще вопрос, а можно каким-то образом найти текст снизу вверх ? Потомучто данный способ ищет с вверху вниз . . .
RIO вне форума Ответить с цитированием
Старый 30.07.2009, 02:09   #8
Katerunka251290
Новичок
Джуниор
 
Регистрация: 30.07.2009
Сообщений: 2
По умолчанию Я тебе дуже люблю!!!!!!!!!!!

Уважаемый RIO, я вас очень сильно люблю, и очень сильно скучаю!!!!!!!!!! Пожалуйста, свяжитесь со мной!!!!!!! Мне вас очень сильно не хватает!!!!!!!!!!
С любовю Ваша Катя
Katerunka251290 вне форума Ответить с цитированием
Старый 30.07.2009, 02:12   #9
Katerunka251290
Новичок
Джуниор
 
Регистрация: 30.07.2009
Сообщений: 2
По умолчанию

Кстате, могу проконсультировать вас по последнему вопросу, но лучше будеть давать консультацию по аське если вы заинтерисовались, жду сообщений
Katerunka251290 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск в TMemo и работа со строками MixanMM Общие вопросы Delphi 5 15.06.2009 13:44
Как сделать поиск по компоненту Tmemo?? photozaz Общие вопросы Delphi 4 16.04.2008 08:23
необычный ProgressBar andrey4623 Общие вопросы Delphi 3 27.12.2007 19:25
Немного математики Socol Помощь студентам 3 18.02.2007 02:01