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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2008, 18:44   #1
krolik
Пользователь
 
Регистрация: 24.09.2008
Сообщений: 11
Восклицание WordPad

Теперь перейдем непосредственно к коду. Выделяем компонент 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; // Выделяем весь текст в мемо
krolik вне форума Ответить с цитированием
Старый 29.09.2008, 21:22   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

http://www.programmersforum.ru/showthread.php?t=26892
_Dmitry вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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