Программирование
Создайте обработчик события создания формы, который будет задавать свойству TextУЭ-таMemo1какое-либо значение (например, ‘Редактируемый текст’) с помощью оператораMemo1.Text:=’Редактируемый текст’;.
Создайте для пункта строки меню Выходобработчик события, завершающий работу программы, для чего в окне формы сделайте на нем щелчок и в теле появившегося обработчика разместите операторClose;. Назначьте эту же подпрограмму обработчиком события пункта менюФайл\Выход, для чего в окнеObject TreeViewщелкните на строчке с его именем, в окнеObject Inspectorдля событияOnClickвыберите обработчикN10Click.
Создайте обработчик события пункта меню Файл\Сохранить, сохраняющий в рабочем каталоге в файле ‘Задание 3.txt’ весь текст УЭ-таMemo1, для чего в окне Object TreeViewщелкните на строчке с его именем, в окнеObject Inspectorдля событияOnClickсоздайте шаблон обработчика и в его теле введите операторMemo1.Lines.SaveToFile('Задание 3.txt');.
Аналогично создайте обработчик события пункта меню Файл\Открыть, загружающий из файла ‘Задание 3.txt’ в рабочем каталоге весь текст в УЭ-тMemo1с помощью оператораMemo1.Lines.LoadFromFile('Задание 3.txt');.
Аналогично создайте обработчик события пункта меню Файл\Создать, уничтожающий весь текст в УЭ-теMemo1с помощью оператораMemo1.Text:='';.
Создайте обработчик события пункта меню Поиск|Замена\Найти, для чего в форме раскройте подменю пунктаПоиск|Замена, щелкните на подпункте Найтии в теле появившегося обработчика введите операторFindDialog1.Execute;открывающий диалогНайти. Затем щелчком на значкеFindDialog1на форме отобразите свойства этого УЭ-та, сделайте обработчик событияOnFindдля последовательного поиска и выделения всех вхождений искомой строки, задаваемой в поле вводаЧто:окна диалогаНайти, в текст ЭУ-таMemo1, например, такой:
procedure TForm1.FindDialog1Find(Sender: TObject);
var i, lFindText:integer; ch:char;
begin
lFindText:=Length(FindDialog1.FindText);
ch:= FindDialog1.FindText[1];
i:=Memo1.SelStart+1;
if K then inc(i);
while i < Length(Memo1.Text)- lFindText +2 do begin
if Memo1.Text[i]=ch then
if Copy(Memo1.Text,i, lFindText)= FindDialog1.FindText then begin
Memo1.HideSelection:=False;
Memo1.SelStart:=i-1;
Memo1.SelLength:= lFindText;
K:=True;
exit;
end;
inc(i);
end{while};
MessageDlg('Текст не найден!',mtInformation,[mbOK],0);
end;
где К– глобальная булевская переменная, получающая значениеTrueвсякий раз, как найдено очередное вхождение искомой строки в текст УЭ-таMemo1. Она должна устанавливаться вFalseв обработчиках событий открытия файла и открытия из меню окнаНайти, а также при щелчке на УЭ-теMemo1, соответствующий обработчик которого следует создать.
Создайте обработчик события пункта меню Поиск|Замена\Заменить, для чего в форме раскройте подменю пунктаПоиск|Замена, щелкните на подпункте Заменитьи в теле появившегося обработчика введите операторReplaceDialog1.Execute;открывающий диалогЗамена. Затем щелчком на значкеReplaceDialog1 на форме отобразите свойства этого УЭ-та и выберите для событияOnFind обработчикFindDialog1Find (это допустимо и работает) для последовательного поиска и выделения всех вхождений искомой строки, задаваемой в поле вводаЧто:окна диалогаЗамена, в текст ЭУ-таMemo1. Создайте также обработчик событияOnReplace, вызываемый щелчком на кнопкеЗаменитьокна диалогаЗамена, например, такой:
procedure TForm1.ReplaceDialog1Replace(Sender: TObject); var i:integer;
begin Memo1.SelText:=ReplaceDialog1.ReplaceText; Memo1.HideSelection:=False; Memo1.SelStart:=i-1; Memo1.SelLength:= Length(ReplaceDialog1. ReplaceText);end; который будет заменять выделенный вMemo1текст на текст, введенный пользователем в полеЧем:в окне диалогаЗамена, который также будет выделен вMemo1.
Создайте обработчик события пункта меню Поиск|Замена\Заменить все, для чего в окнеObject TreeViewщелкните на строчке с таким именем, в окнеObject Inspectorдля событияOnClickвыберите обработчикN8Click, открывающий окно диалогаЗамена. Для поиска и замены всех вхождений искомой строки, задаваемой в поле вводаЧто:окна диалогаЗамена, в текст ЭУ-таMemo1, на текст, введенный пользователем в полеЧем:этого окна, измените обработчик событияOnReplaceокнаЗамена (это одно и то же событие для окнаЗамена, возникающее как при нажатии кнопкиЗаменить, так и при нажатии кнопкиЗаменить всё), например, так:
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var i,lFindText,lReplaceText:integer; ch:char;
begin
if frReplace in ReplaceDialog1.Options then begin
i:=Memo1.SelStart;
Memo1.SelText:=ReplaceDialog1.ReplaceText;
Memo1.HideSelection:=False;
Memo1.SelStart:=i-1;
Memo1.SelLength:= Length(ReplaceDialog1. ReplaceText)
end
else begin
lFindText:=Length(ReplaceDialog1.FindText);
lReplaceText:=Length(ReplaceDialog1.ReplaceText);
ch:= ReplaceDialog1.FindText[1];
i:=Memo1.SelStart+1;
if K then inc(i);
while i+lFindText-1 <= Length(Memo1.Text) do begin
if Memo1.Text[i]=ch then
if Copy(Memo1.Text,i, lFindText)= ReplaceDialog1.FindText then
begin
K:=True;
Memo1.SelStart:=i-1;
Memo1.SelLength:= lFindText;
Memo1.SelText:=ReplaceDialog1.ReplaceText;
Memo1.SelLength:= lReplaceText;
i:=i+lReplaceText-1;
end;
inc(i);
end{while};
end{else};
end;
Здесь старые операторы обработчика будут выполняться только при нажатии кнопки ЗаменитьокнаЗамена, так как при ее нажатии во множествоReplaceDialog1.Options(которое является свойством УЭ-таReplaceDialog1, представляющего окноЗамена) будет включено значениеfrReplaceи удалено значениеfrReplaceAll(при нажатии кнопки Заменить всепроизойдет обратное).