Створення модуля компонента
Перед початком роботи по створенню нового компонента потрібно створити окремий каталог для модуля і інших файлів компонента. Після цього можна приступити до створення модуля компонента.
Для того щоб створити модуль компонента, необхідно з меню Component вибрати команду New Component і в поля діалогового вікна NewComponent (рис. 16.1) ввести інформацію про створюваний компоненті.
Мал. 16.1. Діалогове вікно New Component
Поле Ancestor type повинно містити базовий тип для створюваного компонента. Базовий тип компонента можна задати безпосереднім введенням імені типу або вибором із списку. Для компоненту, базовим компонентом є стандартний компонент Edit (поле введення-редагування). Тому базовим типом для типу компоненту, є тип TEdit.
В поле Class Name необхідно ввести ім'я класу компоненту,, наприклад TNkEdit. Згадайте, що в Delphi імена типів повинні починатися буквою т.
В поле Palette Page потрібно ввести ім'я вкладки палітри компонентів, на яку після створення компонента буде додано його значок. Назва вкладки палітри компонентів можна вибрати зі списку. Якщо в поле Palette Page ввести ім'я ще не існуючої вкладки палітри компонентів, то безпосередньо перед додаванням компонента вкладка з вказаним ім'ям буде створена.
В поле Unit, file name знаходиться автоматично сформоване ім'я файлу модуля створюваного компонента. Delphi привласнює модулю компонента ім'я, яке збігається з ім'ям типу компонента, але без літери T. Натиснувши на кнопці з трьома крапками, можна вибрати каталог, в якому повинен бути збережений модуль компоненту.
Після натискання кнопки ОК до поточного проекту додається сформований Delphi-модуль, який представляє собою заготовку (шаблон) модуля компонента. Текст цього модуля наведено в лістингу 16.1.
Лістинг 16.1. Шаблон модуля компонента
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
TEdit1 = class (TEdit)
У лістингу 16.2 наведено текст модуля компонента NkEdit після внесення всіх необхідних змін.
Лістинг 16.2. Модуль компонента NkEdit
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
FNumb: single; // число, що знаходиться в полі редагування
// Це опис функції доступу
// і процедури установки поля FNumb
function GetNumb: single;
// виклик процедури обробки події
// OnKeyPress батьківського класу
Конструктор класу TNkEdit спочатку викликає конструктор батьківського класу (TEdit), присвоює значення властивості Text, потім встановлює значення властивості Numb.
Реакція компонента NkEdit на натискання клавіші клавіатури визначається процедурою обробки події TNkEdit.KeyPress, яка заміщає відповідну процедуру базового класу. Як параметр процедура TNkEdit.KeyPress отримує код натиснутої клавіші. Перед викликом процедури обробки події OnKeyPress батьківського класу код натиснутоюклавіші перевіряється на допустимість. Якщо натиснута неприпустима для компонента NkEdit клавіша, то код символу замінюється на нуль. Допустимими для компонента NkEdit є цифрові клавіші, роздільник цілої і дробової частин числа (в залежності від настройки Windows: крапка чи кома), "мінус",
Тут слід згадати, що в тексті програми дробова частина числової константи відокремлюється від цілої частини крапкою. Під час роботи програми при вводі вихідних даних користувач повинен використовувати той символ, який заданий в налаштуванні Windows. Як роздільник зазвичай застосовують кому (це дляУкаіни стандартна настройка) або точку. Наведена процедура обробки події OnKeyPress враховує, що настройка Windows може змінюватися, і тому самі ввели символ порівнюється ні з константою, а зі значенням глобальної змінної
DecimalSeparator, яка містить символ-роздільник, використовуваний в Windows в даний момент.
Після введення тексту модуля компонента модуль потрібно відкомпілювати і зберегти.
НОВИНИ ФОРУМУ
Лицарі теорії ефіру
Про це Корнілов написав на своїй сторінці в соцмережі.
За словами Корнілова, тоді його повідомлення було сприйнято з недовірою.
Тепер же Сміла Корнілов вирішив повернутися до цієї теми, в зв'язку з чим публікує у себе в фейсбуці фотографії загадкових ізраїльтян, які брали участь в одеській бійні.
Серед безлічі питань, на які Корнілов, за його словами, хотів би отримати відповідь, наприклад, такі:
«Чому вони випадково розгулювали по Одесі з медичним спорядженням, в гумових рукавичках, звідки вони знали заздалегідь про те, що будуть поранені й убиті? Або чому цей боєць раптом різко забув англійську, коли зрозумів, що його записують? ».
Води озер, морів і океанів північного по --------- Лушар обертаються проти годинникової -з-т - р-е-л-к-і, а води південного полушарія- в-ра - ща-ють -ся- по- ч-асів стрілкою, - обра-зуя- -гіг-ант-скі-е вод-ово-роти.
Основною причиною обертання вирів є місцеві вітру.
І чим вище швидкість вітрів тим вище швидкість обертання вирів і як наслідок, вище відцентрова сила вирів, завдяки чому підвищується рівень вод морів і океанів.
А чим нижче відцентрова сила вирів, тим нижче рівень вод морів і океанів.
Швидкість течій, по периметру морів і океанів не скрізь однакова і залежить від глибини узбережжя. У мілководній частині моря швидкість течій збільшується, а в глибоководній частині моря зменшується.
Сезонні коливання рівня вод спостерігаю-ться не по всьому узбережжю морів і океан-ів, а тільки в тих узбережжях де висока кутова швидкість течій і як наслідок, висока відцентрова сила води. (Відцентрова сила F = v / r).
На прямолінійних узбережжях, де течії не мають кутовий швидкістю, рівень вод не підвищується.