пошук слова (що введене у попередньо описаному полі) у матриці символів;
зняття виділення найдених слів у матриці, якщо є потреба почати новий пошук;
автоматична програмна генерація символів масиву за допомогою датчика випадкових символів;
вихід із програми.
Крім цього на панелі „Опції” розміщені два випадаючих списки. Перший, що має підпис „Виберіть напрям” призначений для вибору напряму пошуку: зліва на право, зправа наліво, зверху до низу, знизу до верху, всі по черзі. Другий, що має підпис „Виберіть алфавіт” призначений для вибору алфавіту, із якого заповнюватиметься масив: російського, українського, латинського, цифр.
Останнє, що поміщається на панелі „Опції” - це група перемикачів „Регістр”. Вона призначена для вибору регістру символів, що заповнятимуть масив, і складається із таких пунктів:
„Великі літери”;
„Маленькі літери”
„Всі літери”.
Після цього ця керуюча панель „Опції” набуде такого вигляду, як показано на рисунку 3.
Рисунок 3 - Керуюча панель „Опції”
Для забезпечення можливості виведення інформації про програму створюємо ще одне вікно „Про програму... ”, що міститиме поле для виведення необхідної інформації та керуючу кнопку „Вихід”, що дозволяє вийти з цього вікна. Вигляд цього вікна приведено на рисунку 4.
Рисунок 4 - Вікно „Про програму... ”
Для виведення інформації про розробника створюємо ще одне вікно, яке міститиме інформацію про розробника. На цьому вікні розміщуємо необхідні написи, фото та кнопку „Вихід”. Вигляд цього вікна приведено на рисунку 5:
Рисунок 5 - Вікно „Про програму... ”
Ще одна форма потрібна для початкової реєстрації користувача. Вона має назву „Зарегіструйте будь-ласка програму!!!”, та міститиме поле для введення реєстраційного коду, відповідний напис та керуючі кнопки „Далі” та „Вихід”. Її вигляд приведено на рисунку 6.
Рисунок 6 - Вікно „Розробник... ”
На цьому завершуємо проектування інтерфейсу і переходимо до програмної реалізації проекту.
Процес програмної реалізації поставленої задачі є, напевно, найбільш трудоємким, потребує багато часу та праці. Опис цього процесу є надзвичайно важливим для розуміння роботи програми, проте детальний опис є дуже ємним. Тому нижче приведемо опис основних блоків програмного коду.
Процедура описана нижче формує масив панелей, що відображатимуться на головній формі програми. На панелях же розташовуватимуться символи матриці, у якій буде відбуватись пошук.
procedure TForm1. FormCreate(Sender: TObject);
var
i, j: integer;
begin
for i: = 1 to MaxX do begin
for j: = 1 to MaxY do begin
sbut [i, j]: = TPanel. Create(form1);
sbut [i, j]. Parent: = form1;
sbut [i, j]. Height: = 20;
sbut [i, j]. Width: = 20;
sbut [i, j]. Top: = (i - 1) * 26 + 10;
sbut [i, j]. Left: = (j - 1) * 26 + 10;
sbut [i, j]. Color: = clYellow;
sbut [i, j]. OnClick: = panelOnClick;
end;
end;
end;
Наступна функція здійснює пошук слова, заданого користувачем у матриці символів. Порядок пошуку - зліва направо.
function TForm1. Search_LR: Boolean;
var
i, j, k: integer;
Myword: String;
begin
Search_LR: =False;
if Edit1. Text<>'' then begin // якщо задано якесь слово для пошуку
for i: = 1 to MaxX do
for j: = 1 to MaxY do // поки не кінець матриці
if (j+Length(Edit1. Text) - 1) <=MaxY then begin // якщо не кінець слова
for k: =0 to Length(Edit1. Text) - 1 do // Посимвольно формуємо змінну
Myword: =Myword+SBut [i,j+k]. Caption; // Myword
if Myword=Edit1. Text then begin // Якщо Myword співпадає із введеним
for k: =0 to Length(Edit1. Text) - 1 do begin // користувачем словом, то
sbut [i, j+k]. Font. Color: =clYellow; // інвертується колір тесту та фону панелі
sbut [i, j+k]. Color: = clBlue;
end;
Search_LR: =True;
{Exit; }
end else Myword: ='';
end;
end;
end;
Функції function TForm1. Search_RL: Boolean; function TForm1. Search_UD: Boolean; function TForm1. Search_DU: Boolean; мають дуже схожий до вище описаного алгоритму пошуку заданого слова, змінюється лише порядок пошуку.
Здійснення пошуку в усіх напрямах по черзі виконується наступною процедурою.
procedure TForm1. Search;
var Find,F1,F2,F3,F4: Boolean;
begin
if SearCB. ItemIndex<0 then Search_LR;
Find: =True;
F1: =True; F3: =True;
F2: =True; F4: =True;
case SearCB. ItemIndex of
0: Find: =Search_LR;
1: Find: =Search_RL;
2: Find: =Search_UD;
3: Find: =Search_DU;
4: begin
F1: =Search_LR;
F2: =Search_RL;
F3: =Search_UD;
F4: =Search_DU;
end;
end;
if (Find=False) or((F1=False) and(F2=False) and(F3=False) and(F4=False)) then
ShowMessage('Шуканої послідовності символів не знайдено! ')
end;
Функція Sumbol формує набір символів із введеної послідовності в розділі const. В залежності від вибору користувача масив заповнюється великими чи малими українськими, російськими, латинськими символами чи цифрами.
function TForm1. Sumbol: Char;
const
Ukr='йцукенгшщзхїфівапролджєячсмитьбюЙЦУКЕНГШЩЗХЇФІВАПРОЛДЖЄЯЧСМИТЬБЮ';
UkrL='йцукенгшщзхїфівапролджєячсмитьбю';
UkrB='ЙЦУКЕНГШЩЗХЇФІВАПРОЛДЖЄЯЧСМИТЬБЮ';
Rus='йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
RusL='йцукенгшщзхъфывапролджэячсмитьбю';
RusB='ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
Eng='qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
EngL='qwertyuiopasdfghjklzxcvbnm';
EngB='QWERTYUIOPASDFGHJKLZXCVBNM';
Num='0123456789';
begin
if ALF. ItemIndex<0 then ALF. ItemIndex: =0;
case ALF. ItemIndex of
0: begin
case RG. ItemIndex of
0: Sumbol: =UkrB [Random(Length(UkrB)) +1] ;
1: Sumbol: =UkrL [Random(Length(UkrL)) +1] ;
2: Sumbol: =Ukr [Random(Length(Ukr)) +1] ;
end;
end;
1: begin
case RG. ItemIndex of
0: Sumbol: =RusB [Random(Length(RusB)) +1] ;
1: Sumbol: =RusL [Random(Length(RusL)) +1] ;
2: Sumbol: =Rus [Random(Length(Rus)) +1] ;
end;
end;
2: begin
case RG. ItemIndex of
0: Sumbol: =EngB [Random(Length(EngB)) +1] ;
1: Sumbol: =EngL [Random(Length(EngL)) +1] ;
2: Sumbol: =Eng [Random(Length(Eng)) +1] ;
end;
end;
3: Sumbol: =Num [Random(Length(Num)) +1] ;
end;
end;
Нижче приведена процедура дозволяє заповнювати масив символами, що вводитимуться користувачем.
procedure Tform1. panelOnClick (sender: Tobject);
var
s: string;
Col: Integer;
begin
Col: =TPanel(sender). Color;
TPanel(sender). Color: =clRed;
s: = InputBox ('Введіть потрібний символ', 'Символ: ', TPanel(sender). Caption);
if S<>'' then
TPanel(sender). Caption: = S [1] ;
TPanel(sender). Color: =Col;
end;
Основні функціональні блоки програми описані. Решта програмного коду є досить проста для розуміння, тому не описувалась.
Лістинг програми наведено в додатку А.
Програмна реалізація у візуальному середовищі має свої особливості. Тому необхідно показати порядок її реалізації, зупинитись на особливостях. Це й зробимо у цьому розділі.
Спочатку потрібно завантажити середовище програмування Borland Delphi 7.0. Щоб створити новий додаток відразу в рядку меню вибираю: Файл ® Создать ® Приложение (при запуску Borland Delphi додаток створюється автоматично). Після чого на екрані з‘явиться нова порожня форма, назву якої за допомогою властивості Caption змінюємо на „Абетка”.
Для створення головного меню програми вибрано компонент MainMenu із закладки Standart. Для додання підпунктів меню на цьому компоненті двічі клацаємо та у властивості Caption вказуємо назву підпункту.
Щоб створити так звану „панель керування” програми використано компонент GroupBox, що знаходиться на закладці Standart. Цю панель називають „Опції” (властивість Caption). Із цієї ж закладки вибрано компонент Edit та Label, що призначені для введення слова для пошуку користувачем та підпису його відповідно (властивість Caption компоненти Label змінюємо на „Шукане слово”).
Випадаючі списки реалізуємо за допомогою компонентів ComboBox, що знаходяться на тій же закладці Standart. Властивість Text змінимо на „Виберіть слово” та „Виберіть напрям” відповідно.
Для вище описаних компонентів Edit та ComboBox властивість Color змінюємо на clBlue, щоб змінити їх фон. Таку ж властивість для Label встановимо на clYellow - колір напису.
Панелі, що потрібні для керування роботою програми, використовуємо компонент Panel, що знаходиться на тій же закладці. Властивості Caption змінюємо на „Знайти”, „Зняти виділення”, „Згенерувати масив”. Властивості Color змінюємо на clYellow - фон панелі. Властивість Font задає формат напису на панелі. Для неї встановимо колір шрифту на clBlue.
Щоб створити список перемикачів використаємо компонент RadioGroup (закладка Standart). Властивість Caption змінюємо на „Регістр”, Color - на clBlue.
Для створення кнопки „Вихід” та інших візуальних компонентів додатку використано додаткові „скіни” AlphaControls. Як це зробити покажемо у розділі 10. Після інсталяції бібліотек у панелі компонентів з’являться три нові закладки: AlphaStandart, AlphaAdditional, AlphaTools. Для створення цієї ж кнопки використаємо компонент sBitBtn (закладка AlphaStandart), її властивість Caption замінимо на „Вихід”.
Для створення реєстраційної форми виконуємо Файл ® Новая ®Другое і у закладці Форми вибираємо About Box. Аналогічно вище описаному змінюємо її назву (Caption). Для введення коду реєстрації додамо на форму поле Edit (закладка Standart), його фон змінимо на чорний (властивість Color). Для підпису цього поля використано компонент sLabelFX (закладка AlphaAdditional). Керуючі кнопки реалізовано за допомогою компонентів sBitBtn (закладка AlphaStandart). При цьому властивості Caption компонентів sLabelFX та sBitBtn необхідно змінити. Для забезпечення можливості використання „скінів” на цю форму помістимо sSkinManager (закладка AlphaTools). У його властивість SkinDirectory слід помістити шлях до „скінів” - а саме D: \Install\for_delphi_skin\acnt_reg7\Skins. У властивості SkinName слід вказати назву „скіна” - LikeOperaStyle (internal).
На кожну з форм слід помістити компонент sSkinProvider (закладка AlphaTools).
Для відображення інформації про програму створюємо однойменну форму.
На неї поміщаємо поле Мемо (закладка Standart), у властивості Lines якого вводимо потрібну інформацію про програму. Кнопку „Вихід” реалізуємо, використовуючи компонент sButton (закладка AlphaStandart).