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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2008, 15:29   #1
kugagach
 
Регистрация: 07.08.2008
Сообщений: 4
Восклицание

Долго и упорно пытаюсь описать событие onFind в FindDialog1......................(1 .5 месяца это борщь)...........
Какие варианты только не пробовал ,слил с нэта пример сдинамической памятью (ТУТ Я НИЧЕГО НЕ ПОНЯЛ):
Код:
procedure TForm1.FindDialog1Find(Sender: TObject);
   var
 Buff,P,FT: PChar;
 BuffLen: Word;
begin
 with Sender as TFindDialog do
  begin
   GetMem(FT, Length(FindText) + 1);
   StrPCopy(FT, FindText);          
   BuffLen:= memo1.GetTextLen + 1;  
   GetMem(Buff, BuffLen);           
   memo1.GetTextBuf(Buff, BuffLen); 
   P:= Buff + memo1.SelStart + memo1.SelLength;
   P:= StrPos(P, FT);
   if P=nil then MessageBeep(0)
   else
    begin
     memo1.SelStart:= P - Buff;
     memo1.SelLength:= Length(FindText);
    end;
   FreeMem(FT, Length(FindText) + 1);
   FreeMem(Buff, BuffLen);   Memo1.SetFocus;
  end;
end;


ОБЪЯСНИТЕ ПОЖАЛУЙСТА КАК ГРАМОТНО И ПРАВИЛЬНО ОСУЩЕСТВИТЬ ПОИСК ,А ГЛАВНОЕ ЗАМЕНУ ТЕКСТА - ЧТОБЫ РАБОТАЛО КАК В WORDе???

вообще этот код работает ,но когда жмешь "найти далее"-в диалоге за менить, все виснет.
Вот что там забито:


Код:
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
  begin

   with  ReplaceDialog1   do
  while True do
   begin
    if memo1.SelText <> FindText then
    FindDialog1Find(Sender );
    if memo1.SelLength = 0 then Break;
    memo1.SetFocus;

    if  frReplaceAll in ReplaceDialog1.Options  then Break;
   end;


end;

Последний раз редактировалось Stilet; 11.08.2008 в 11:28.
kugagach вне форума Ответить с цитированием
Старый 11.08.2008, 00:33   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Вот пример как надо искать и заменять текст в Мемо.
Но и этот код можно улучшить. Например сделать чекбокс "Без учёта регистра" и ползовать функции AnsiLowerCase, AnsiUpperCase.

Впринципе тут много ещё что можно говорить о поиске и замене....

адд: Т.к. многим качать лень, выкладываю сырец....

Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var I : Integer;
    S : String;
Begin
If CheckBox1.Checked = False Then
  Begin
    I := Pos(Edit1.Text, Memo1.Text);
      If I > 0 Then
        Label3.Caption := 'Текст "' + Edit1.Text +
        '" был найден в позиции ' + IntToStr(I)
      Else Label3.Caption := 'Текст не найден';
  End
Else
  Begin
    S := Memo1.Text;
    I := Pos(Edit1.Text, S);
    If I > 0 Then
      Begin
        Label3.Caption := 'Текст "' + Edit1.Text +
        '" найденный в позиции ' + IntToStr(I) +
        ' был заменён на ' + Edit2.Text;
        Delete(S, I, Length(Edit1.Text));
        Insert(Edit2.Text, S, I);
      End
      Else Label3.Caption := 'Текст не найден';
    Memo1.Text := S;
  End;
End;
Вложения
Тип файла: rar Memo.rar (170.2 Кб, 29 просмотров)
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 11.08.2008 в 00:42.
Карась вне форума Ответить с цитированием
Старый 14.08.2008, 23:43   #3
kugagach
 
Регистрация: 07.08.2008
Сообщений: 4
По умолчанию

Спасибо большшое!!!!!
но это не помогло
мне надо было событие onFind и onReplace в FindDialog и ReplaceDialog
описать .
Ну а пока я ждал ответов на свой вопрос инадеялся на знания других,
в руки ко мне попа
(совершенно случайно) учебник по Delfi ..... вот что из этого получилось:
ПОЛНОЦЕННЫЙ ПОИС ТЕКСТА В MEMO1:

Код:
 {нажатие на кнопку в меню правка "Найти"}
procedure TForm1.N16Click(Sender: TObject);
begin   {открываем диалог}
with FindDialog1 do begin
  {начальное значение текста поиска - текст, выделенный в Memo1}
  FindText:=Memo1.SelText;
  {выполнение}
  Execute;
 end;
end;

{обработчик события onFind}
procedure TForm1.FindDialog1Find(Sender: TObject);
   var
{объявляем указатели и переменные}
 Buff,P,FT: PChar;
 BuffLen: Word;
begin
 with Sender as TFindDialog do
  begin
{выделение динамической памяти под искомый текст
+1 для нулевого символа в конце строки}
   GetMem(FT, Length(FindText) + 1);
{вставка в дин.пам. искомого текста + нулевой символ в конце строки}
   StrPCopy(FT, FindText);
{найдем длину строки свойства Text, необходимую для
задания размера буфера в методе GetTextBuf}
   BuffLen:= memo1.GetTextLen + 1;
{выделение динамической памяти под текст в котором будем искать}
   GetMem(Buff, BuffLen);
{Записываем в заданный буфер фиксированного размера
 значение свойства Text.}
   memo1.GetTextBuf(Buff, BuffLen);
{определяем откуда начинать поиск}
   P:= Buff + memo1.SelStart + memo1.SelLength;
{поиск}
   P:= StrPos(P, FT);
{если ничего не найдено}
if P=nil then begin
                {выдаём сообщение}
                MessageBeep(0);
                ShowMessage ('Текст "' + FindText + '"не найден');
                 end
                {иначе...}
            else
               begin       {...выделяем текст}
                memo1.SelStart:= P - Buff;
                memo1.SelLength:= Length(FindText);
               end;
      {освобождаем память (точно столько же сколько выделяли)}
   FreeMem(FT, Length(FindText) + 1);
   FreeMem(Buff, BuffLen);   Memo1.SetFocus;
  end;
end;

{нажатие на кнопку в меню правка "Заменить"}
procedure TForm1.N17Click(Sender: TObject);
begin
 with ReplaceDialog1 do begin
   {начальное значение текста поиска - текст, выделенный в Memo1}
                        FindText:=Memo1.SelText;
                        {выполнение}
                        Execute;
                        end;

end;

{обработчик события onFind в ReplaceDialog1 }
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
begin
 with  ReplaceDialog1   do
   begin
    FindDialog1Find(Sender );
    memo1.SetFocus;
   end;
end;

{обработчик события onReplace, onReplaceall}
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
label 10,20  ;
begin
{если текст выделен и совпадаеет с тем который нужно заменить...}
 if Memo1.SelText=ReplaceDialog1.FindText
                then
                     10:
                         begin
                         {...заменяем его и...}
                         memo1.SelText:=ReplaceDialog1.ReplaceText;
                         {...ищем следующее совпадение и...}
                         FindDialog1Find(Sender );
                         {показываем его}
                         Memo1.SetFocus;
                         end
{если текст не выделен или не совпадаеет с тем который нужно заменить...}
                     else
                         begin
                         {ищем его}
                         FindDialog1Find(Sender );
                         {и возвращаемся к началу }
                         goto 10;
                         end;
{если нажата кнопка "Заменить Все" то ...}
 if  frReplaceAll in ReplaceDialog1.Options  then
 {проверяем есть ли что заменять и}
         if Memo1.SelText=ReplaceDialog1.FindText then
                        {опять возвращаемся к началу}
                                      goto 10;
 end;
end.

Последний раз редактировалось Stilet; 18.08.2008 в 08:52.
kugagach вне форума Ответить с цитированием
Старый 15.08.2008, 00:00   #4
kugagach
 
Регистрация: 07.08.2008
Сообщений: 4
По умолчанию

А вот вообще готовй редактор текста!
работает без ошыбок, с комментариями хть щас контрольную втавляй и сдавай !!!ТОЛЬКО НЕ В САМАРСКИЙ ПГАТИ!!!
Вложения
Тип файла: rar redactor.rar (264.2 Кб, 56 просмотров)
kugagach вне форума Ответить с цитированием
Старый 15.08.2008, 18:23   #5
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от kugagach Посмотреть сообщение
Спасибо большшое!!!!!
Ну а пока я ждал ответов на свой вопрос инадеялся на знания других,
в руки ко мне попа
(совершенно случайно) учебник по Delfi ..... вот что из этого получилось:
ПОЛНОЦЕННЫЙ ПОИС ТЕКСТА В MEMO1:
Извеняюсь канешно, но опечатка смешная получилась
dr.Chas вне форума Ответить с цитированием
Старый 20.08.2008, 22:55   #6
kugagach
 
Регистрация: 07.08.2008
Сообщений: 4
Смущение

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Извеняюсь канешно, но опечатка смешная получилась



Да уж нарочно не придумаешь
kugagach вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и копирование текста из консольного окна Mago Паскаль, Turbo Pascal, PascalABC.NET 8 25.07.2008 15:04
Поиск определённого текста в текстовом файле vitawt Общие вопросы Delphi 4 20.01.2008 22:12
Поиск текста в строке CoDeR Общие вопросы Delphi 8 02.10.2007 01:01
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48