![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.09.2008
Сообщений: 11
|
![]()
Теперь перейдем непосредственно к коду. Выделяем компонент FindDialog1 и в Events щелкаем на OnFind. Там пишем следующий код:
procedure TForm1.FindDialog1Find(Sender: TObject); var FTPos:Integer; // Переменная для текущей позиции IText,FText:String; // Исходный текст, Искомый текст begin Memo1.SetFocus; // Устанавливаем фокус ввода на Мемо иначе мы ничего не увидим if not (frMatchCase in FindDialog1.Options) then FText:=AnsiLowerCase(FindDialog1.Fi ndText) else // Если в диалоги ищем без учета регистра FText:=FindDialog1.FindText; // Если в диалоги ищем c учета регистра if frDown in FindDialog1.Options then begin // Поиск Вниз IText:=copy(Memo1.Text,Memo1.SelSta rt+Memo1.SelLength+1,Length(Memo1.T ext)); // Задаем исходный текст после текущей позиции курсора if not (frMatchCase in FindDialog1.Options) then IText:=AnsiLowerCase(IText); // Если в диалоги ищем без учета регистра FTPos:=pos(FText,IText); // Собственно сам поиск if FTPos=0 then Exit; // Если ничего не нашли то выходим из процедуры FTPos:=FTPos+Memo1.SelStart+Memo1.S elLength; // Делаем поправку на текущее положение курсора Memo1.SelStart:=FTPos-1;Memo1.SelLength:=Length(FText); // Выделяем текст end else // Поиск Вверх begin IText:=copy(Memo1.Text,0,Memo1.SelS tart); // Задаем исходный текст до текущей позиции курсора if not (frMatchCase in FindDialog1.Options) then IText:=AnsiLowerCase(IText); // Если в диалоги ищем без учета регистра for FTPos:=length(IText)-length(FText) downto 1 do // Перебераем текст с конца до начала if copy(IText,FTPos,length(FText))=FTe xt then // Если фрагмент текста совпал с искомым то begin Memo1.SelStart:=FTPos-1;Memo1.SelLength:=Length(FText); // Выделяем текст Exit; // Выходим из процедуры end; end; end; Переходим к ReplaceDialog1. В Events > OnFind пишем: procedure TForm1.ReplaceDialog1Find(Sender: TObject); begin FindDialog1.Options:=ReplaceDialog1 .Options; // Устанавливаем в диалоге поиска такие-же опции как и в диалоге замены FindDialog1.FindText:=ReplaceDialog 1.FindText; // Аналогично делаем с текстом FindDialog1Find(Sender); // Вызываем процедуру поиска end; В Events > OnReplace пишем: procedure TForm1.ReplaceDialog1Replace(Sender : TObject); begin FindDialog1.Options:=ReplaceDialog1 .Options; // Всё аналогично предедущей процедуре FindDialog1.FindText:=ReplaceDialog 1.FindText; // Аналогично with Sender as TReplaceDialog do // Заменяем пока можем while True do begin if Memo1.SelText <> FindText then FindDialog1Find(Sender); // Если нет выделеного текста то ищем if Memo1.SelLength = 0 then Break; // Если так и не нашли текст то выходим из цикла Memo1.SelText := ReplaceText; // Заменяем текст if not (frReplaceAll in Options) then Break; // Если нам надо один раз заменить то выходим из цикла end; end; Это было основой. Теперь вверху формы есть меню. Щелкаем Файл>Открыть и там пишем: begin if OpenDialog1.Execute then // Если запущен диалог Memo1.Lines.LoadFromFile(OpenDialog 1.FileName); // Загружаем файл end; Аналогично Файл>Сохранить: begin if SaveDialog1.Execute then // Аналогично Memo1.Lines.SaveToFile(SaveDialog1. FileName); // Сохраняем end; И Файл>Выход: begin Form1.Close; // Закрываем программу end; Теперь перейдем к меню Правка, Аналогично щелкаем и в OnClick пишем для каждого отдельно: Memo1.Undo; // Отмена Memo1.CutToClipboard; // Вырезает текст в буфер обмена Memo1.CopyToClipboard; // Копирует текст в буфер обмена Memo1.PasteFromClipboard; // Вставляет текст из буфера обмена в текущую позицию (там где курсор) мемо SendMessage(Memo1.Handle, WM_KEYDOWN, Ord(VK_DELETE), 0); // Нажимаем клавишу Del А сейчас самое главное, Правка>Найти: FindDialog1.Execute; // Запускаем диалог поиска Найти далее: FindDialog1Find(Sender); // Ищем далее Заменить: ReplaceDialog1.Execute; // Запускаем диалог замены Ну и на последок Правка>Выделить всё: Memo1.SelectAll; // Выделяем весь текст в мемо |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WordPad | krolik | Помощь студентам | 3 | 29.09.2008 20:40 |
WordPad | krolik | Помощь студентам | 2 | 25.09.2008 13:58 |
Где скачать исходник среднего текстового редактора (типа WordPad) с подробным описанием всех функций. | Bill Gates | Софт | 2 | 07.01.2008 07:39 |