Організація
функції ПОШУК в TMemo h2>
ватажків
Сергій p>
Представлений
нижче код я використовував при написанні текстового редактора. Все ніби працює. P>
Отже, на формі
повинні бути TMemo (Editor), TFindDialog (FindDialog) і TButton (Button). p>
Спочатку напишемо
обробник натискання на кнопку: p>
procedure TForm1.ButtonClick (Sender: TObject); p>
begin p>
FindDialog.Execute;// Відкриття
діалогу
Пошук p>
end; p>
У властивостях
дилогії повинні бути True опції frHideWholeWord (сховати в діалозі вибір прапорця
"Лише слово цілком"), frHideMatchCase (сховати в діалозі вибір
прапорця "З урахуванням регістру") і frDown (по-замовчуванням напрямок пошуку
вниз), всі інші опції повинні бути False. p>
У Editor
властивість HideSelection повинно бути False. p>
Тепер напишемо
обраобтчік на натискання кнопки Знайти далі у діалозі Пошук. p>
Повинні бути
описані наступні змінні і мітки: p>
var p>
SelPos, X, i: integer; p>
s, textE: string; p>
label 1; p>
Для початку
подивимося, в якому напрямку потрібно шукати і відповідно виберемо текст у
якому треба шукати: p>
if frDown in FindDialog.Options p>
then
Editor.SelStart: = Editor.SelStart + Editor.SelLength;// це для "пошук далі" p>
textE: = Editor.Text; p>
X: = Editor.SelStart 1; p>
if frDown in FindDialog.Options p>
then p>
textE: = Copy (textE, X, Length (textE)-X +1) p>
else p>
textE: = Copy (textE, 0, X-1); p>
s: = FindDialog.FindText;
//Змінної s присвоюється рядок, який потрібно знайти p>
Тепер напишемо
код власне пошуку: p>
if frDown in FindDialog.Options p>
then p>
(код пошуку вниз) p>
begin p>
SelPos: = Pos (s, textE); p>
if SelPos> 0 p>
then p>
begin p>
Editor.SelStart: = SelPos + X - 2; p>
Editor.SelLength: = length (s); p>
end p>
else ShowMessage (pchar ( 'Текст "' +
FindDialog.FindText + ' "не знайдено .')); p>
end p>
else p>
(код пошуку вгору) p>
begin p>
for i: = length (textE)-length (s) downto 1 do p>
if copy (textE, i, length (s)) = s p>
then p>
begin p>
Editor.SelStart: = i-1; p>
Editor.SelLength: = Length (s); p>
goto 1; p>
end; p>
ShowMessage (pchar ( 'Текст "' +
FindDialog.FindText + ' "не знайдено .')); p>
1: p>
end; p>
Якщо рядок
знайдена, то вона виділяється, якщо ні, то видається відпо повідомлення. p>
Увага!
Забороняється передрук цієї статті або її частини без узгодження з автором.
Якщо ви хочете розмістити цю статтю на своєму сайті або видати в друкованому вигляді,
зв'яжіться з автором. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://andrey.nnov.ru/
p>