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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полноценный поиск и замена текста, Полноценный поиск и замена текста 
V
    Опции темы
Paranoik
  Дата 15.6.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, никто не подскажет процедурки поиска и замены текста, чтобы все элементы в диалогах поиска и замены работали. У TFindDialog - только слово целиком, с учетом регистра, направление: вверх, вниз, а у TReplaceDialog - только слово целиком и с учетом регистра соответственно. И плюс все это должно работать для поиска и замены в TRichEdit. 
PM MAIL   Вверх
Yanis
Дата 15.6.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



А поиск в RichEdit отношения к этим диалогам никакого не имеет. Скажу больше: TFindDialog и TReplaceDialog ничего не ущут и ничего не заменяют smile  


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Paranoik
Дата 15.6.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Чего ?...  smile 
Ну в общем мне процедуры поиска и замены нужны, со всеми возможностями (регистр, поиск вверх, вниз и др.)...  

Это сообщение отредактировал(а) Paranoik - 15.6.2006, 22:50
PM MAIL   Вверх
Sunvas
Дата 16.6.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Вот тебе пример для "вверх" и "вниз".
Код

Editor: TMemo;
{........}
procedure TForm1.FindDialogFind(Sender: TObject);
var
 SelPos,X,i:integer;
 s,textE:string;
label 1;
begin
 if frDown in FindDialog.Options
  then Editor.SelStart:=Editor.SelStart+Editor.SelLength; // это для "поиск далее"
 textE:=Editor.Text;
 X:=Editor.SelStart+1;
 if frDown in FindDialog.Options
 then
  textE:=Copy(textE,X,Length(textE)-X+1)
 else
  textE:=Copy(textE,0,X-1);
 s:=FindDialog.FindText; // переменной s присваивается строка, которую нужно найти
 if frDown in FindDialog.Options
  then
  { код поиска вниз }
   begin
    SelPos := Pos(s,textE);
    if SelPos > 0
     then
      begin
       Editor.SelStart := SelPos + X - 2;
       Editor.SelLength:=length(s);
      end
     else ShowMessage(pchar('Текст "'+ FindDialog.FindText+'" не найден.'));
   end
  else
  { код поиска вверх }
 begin
  for i:=length(textE)-length(s) downto 1 do
   if copy(textE,i,length(s))=s
    then
     begin
      Editor.SelStart := i-1;
      Editor.SelLength:=Length(s);
      goto 1;
     end;
  ShowMessage(pchar('Текст "'+ FindDialog.FindText+'" не найден.'));
  1:
 end;
end;

Дальше сам. Не трудно будет дописать еще и "с учетом регистра". А "слово целиком" просто делается - просто проверяешь есть ли перед и после выделения проблел. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Yanis
Дата 16.6.2006, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(Paranoik @  15.6.2006,  23:49 Найти цитируемый пост)
Чего ?... 
Поиск зависит не от диалогов, а только от того как ты его реализуешь.

Цитата(Paranoik @  15.6.2006,  23:49 Найти цитируемый пост)
Ну в общем мне процедуры поиска и замены нужны, со всеми возможностями (регистр, поиск вверх, вниз и др.)...  
А сразу нельзя так было вопрос задать? Позволю процитировать справку:

Цитата
VCL Reference Help.
This example requires a TRichEdit, a TButton, and a TFindDialog.
Clicking the button click will display a Find Dialog to the right of the edit control.  Filling in the "Find what" text and pressing the Find Next button will select the first matching string in the Rich Edit control that follows the previous selection.
Код
procedure TForm1.Button1Click(Sender: TObject);

begin
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { begin the search after the current selection if there is one }
    { otherwise, begin at the start of the text }
    if SelLength <> 0 then

      StartPos := SelStart + SelLength
    else

      StartPos := 0;

    { ToEnd is the length from StartPos to the end of the text in the rich edit control }

    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end;
  end;
end;


Функция FindText как раз и делает то, что ты хочешь в зависимости от последнего параметра. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Paranoik
Дата 16.6.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Угу... пасиба большое! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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