Програмування в Delphi

курсовая работа

Особливості архітектури програми в ос windows

Обектно-орієнтоване програмування - це не просто сучасна технологія створення програмних продуктів, а новий загальновизнаний спосіб мислення. Обектно-орієнтований підхід істотно знижує складність програмних продуктів, що дозволяє розроблювачам мов програмування з самого початку закласти в них можливості рішення чималої кількості широко розповсюджених задач. Причому це стосується практично всіх аспектів реалізації програм, у тому числі й алгоритмічних частин, і фрагментів програм, керуючих даними.

Оскільки створення програмних продуктів, призначених для роботи під керуванням операційної системи Windows, також має істотні особливості, розуміння яких особливо необхідно для більш чіткої організації роботи програми , то на початку розглянемо саме їх.

Архітектура програми в ос Windows. Багатозадачність

Операційна система Windows є багатозадачною, що припускає досить тверді вимоги до поводження програм. Одна із самих істотних вимог - неможливість монопольного використання ресурсів, тому що додаток не може самостійно визначити, хто саме в даний момент може використовувати ресурс, і в яку саме програму повинна потрапити інформація, наприклад, введена користувачем із клавіатури.

У звязку з цим у Windows реалізується схема програм, керованих подіями. Це значить, що кожна програма являє собою набір підпрограм, деякі з який викликаються безпосередньо ядром операційної системи для реакції на яку-небудь подію, що виникла в системі. При цьому жодний додаток не може чекати здійснення події, монополізуючи, таким чином, ресурси і припиняючи роботу інших додатків.

Аналізом змін у системі і розсиланням повідомлень про події займається безпосередньо операційна система. Структура програми в Windows представлена на рис. 5.1.

Рис. 1. Загальна структура програми в Windows

Багатовіконність

Кожній програмі в Windows зіставляється вікно -- деяка область на екрані, в якій можна виводити інформацію. Вікно може займати весь екран, чи тільки його частину, воно може перебувати за межами екрана, бути згорнуте (сховане) за бажанням користувача чи перекрито вікнами інших додатків.

Програма може визначити розташування свого вікна на екрані, хоча звичайно в цьому немає необхідності. Вся інформація, виведена програмою, буде автоматично розташована в її вікні. Причому центр координат (точка з нульовими координатами), використовуваних при виведенні, знаходиться в лівому верхньому куті вікна, тобто не залежить від розташування вікна на екрані.

Віконне представлення програм відповідає умовам, що накладається на систему багатозадачністю, тому що кілька додатків одночасно не можуть виводити свою інформацію в те саме місце.

Крім зручного представлення інформації для користувача, вікно має другу важливу функцію з погляду програми - в будь-який момент часу одне з вікон «знаходиться в фокусі» (є «активним») і потоки інформації, що вводяться, направляються операційною системою в програму, якій належить це вікно. Механізм такого перенапрямку потоків введення заснований на подіях. Розглянемо докладніше структуру програми в Windows.

Програма, керована подіями

Windows стежить за змінами в стані системи (натискання клавіш, переміщення миші і натискання її кнопок, і т.д.) і генерує спеціальні структури даних, що містять наступну інформацію:

1. Посилання на вікно, що знаходилося в фокусі, коли відбулася подія.

2. Ідентифікатор події Message (значення типу Word).

3. Додаткова інформація для даної події (два значення - одне типу Word, друге типу Longlnt), наприклад, код натиснутої клавіші для повідомлення про натискання клавіші, чи координати миші для повідомлення про переміщення миші.

Далі, ці пакети зберігаються в спеціальній черзі повідомлень Windows. а ядро знову переходить в режим спостереження за системою. З іншого боку, черга безупинно розбирається, аналізується посилання на вікно, якому призначена подія, і викликається його віконна функція - спеціальна підпрограма, описана за визначеними правилами і зареєстрована в операційній системі як обєкт призначення для повідомлень. Заголовок віконної функції має такий вигляд:

Function WindowProc(Window: HWnd; Message, WParam: Word: LParan: Longint): Longint; export;

Життєвий цикл повідомлення представлений на рис. 2.

Викликана віконна функція повинна проаналізувати подію по її ідентифікатору Message, використовуючи додаткові параметри WParam і LParam, виконати дії, обумовлені логікою програми, і повернути як результат функції код завершення обробки.

Рис. 2. Повідомлення в Windows

Якщо додаток не може проаналізувати код події (обробка такої події не передбачена у віконній функції), то повинний бути викликаний оброблювач за замовчуванням. Таким чином, велику частину віконної функції звичайно займає оператор множинного вибору Case, що на підставі інформації про повідомлення виконує необхідні дії. У секції Else такого оператора викликається оброблювач за замовчуванням (див. рис. 3).

Рис. 3. Обробка повідомлення у віконній функції

Вікно, що створюється системою, повинне належати деякому класу, зареєстрованому в ній. Під час реєстрації системі передається інформація про х параметри вікна, наприклад, про набір його візуальних елементів (наявність меню, колір і стиль фону, і т.д.), а також посилання на віконну функцію, екземпляр якої буде створений для кожного вікна, належного даному класу.

Розглянемо основні етапи роботи програми в ОС Windows:

1. Створення і реєстрація класу вікна, передача операційній системі посилання на віконну функцію.

2. Створення вікна на основі класу.

3. Організація попереднього аналізу черги повідомлень, робота віконної функції, визваної ядром Windows.

4. Знищення вікна, дерегістрація класу вікна.

У такий спосіб Windows-програма, яка нічого не робить, займає порядком сімдесятьох рядків і надає безліч можливостей для появи в ній помилок. При цьому переважна більшість додатків виконують ті самі дії при обробці повідомлень, та й набір оброблюваних повідомлень приблизно однаковий. У такій ситуації логічне рішення про інкапсуляцію характеристик вікна і його подій в деякий клас, що містить методи (звичайно порожні), визваних при обробці подій.

Дані методи доступні для перевизначення і надають можливості для зручної роботи з вікном, засновані на логічному представленні вікна в екземплярі відповідного класу, а не на викликах системних функцій.

Приховання складних процесів, що відбуваються з додатком у Windows і обєктно-орієнтований підхід до програмування - основний напрямок розвитку мов програмування в даний час. Виключенням не став і Delphi. Всі процеси, звязані з підтримкою працездатності віконної програми, реалізовані розроблювачами мови. Це дозволяє програмісту зосередитися на розробці логіки програми, а не тієї її частини, що взаємодіє з системою.

Взаємодія програми з операційною системою

Програмування під DOS звязано з частим звертанням до ресурсів, наприклад, до відеокарти, прямо без виклику функцій операційної системи, що підвищує швидкодію програм за рахунок відмовлення від універсальності. Однак такий підхід до програмування в Windows неможливий, тому що може порушити цілісність інших додатків.

Ще один недолік прямого підходу складається в необхідності самостійної роботи з пристроями, що іноді істотно відрізняються один від одного, особливо в даний час. В Windows ця проблема вирішена за допомогою універсального програмного інтерфейсу операційної системи, що забезпечує однаковий доступ до пристроїв одного типу за допомогою набору так званих API-функцій (від англ. API - Application Programming Interface - інтерфейс прикладного програмування). Наприклад, незалежно від відеокарти, встановленої на конкретному компютері, для виведення зображення використовуються ті самі функції.

Незважаючи на зниження швидкодії, визване більш складним шляхом при виконанні операції «програма - операційна система -драйвер - пристрій», програма стає абсолютно переносною, тобто може бути запущена на компютері з будь-якою конфігурацією.

Таким чином, Windows-програми значно тісніше звязані з операційною системою, чим програми, що працюють у DOS.

Програма-тест

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Edit1: TEdit;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Button2: TButton;

Button3: TButton;

Memo2: TMemo;

Label3: TLabel;

Label4: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit3: TEdit;

Label6: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

Var

k,km,m : Integer;

Sk,Skm : String;

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Clear;

Memo2.Clear;

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

Memo1.ReadOnly := True;

Memo2.ReadOnly := True;

Edit2.ReadOnly := True;

Edit3.ReadOnly := True;

k := 1;

m := 0;

Label3.Caption := ;

Label3.Caption := Основні елементи програми:;

Memo1.Lines.Add(1. Дійсні);

Memo1.Lines.Add(2. Цілочисельні);

Memo1.Lines.Add(3. Літерні);

Memo1.Lines.Add(4. Оператори, ключові слова, директиви компілятору);

Memo1.Lines.Add(5. Логічні);

end;

procedure TForm1.Button1Click(Sender: TObject);

Var

i : Integer;

Si : String;

begin

Si := Edit1.Text;

i := StrToInt(Si);

Case k of

1: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

2: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

3: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

4: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

end;

5: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

6: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

7: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

8: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

9: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

10: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

11: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

12: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

13: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

end;

14: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

4: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

15: Case I of

1: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

2: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

3: Begin

Memo2.Lines.Add ( Відповідь вірна);

m := m + 1;

End;

4: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

5: Begin

Memo2.Lines.Add ( Відповідь не вірна);

Memo2.Lines.Add (Опрацюйте матеріал спочатку);

End;

end;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Memo1.Clear;

Memo2.Clear;

Edit1.Clear;

Label3.Caption := ;

k := k + 1;

Case k of

2: Begin

Label3.Caption := З чого складається програма ?;

Memo1.Lines.Add(1. StringAnsi);

Memo1.Lines.Add(2. StringShort);

Memo1.Lines.Add(3. З основної частини і декількох модулів);

Memo1.Lines.Add(4. Short);

Memo1.Lines.Add(5. WideShort);

End;

3: Begin

Label3.Caption := Яким ключовим словом починається заголовок програми?;

Memo1.Lines.Add(1. Статистичні і динамічні);

Memo1.Lines.Add(2. Формальні і статичні);

Memo1.Lines.Add(3. Типові і динамічні);

Memo1.Lines.Add(4. Program);

Memo1.Lines.Add(5. Логічні і формальні);

End;

4: Begin

Label3.Caption := Чим починається і закінчується розділ опису логіки програми?;

Memo1.Lines.Add(1. Об+"+єднання множин : +);

Memo1.Lines.Add(2. Пересічення множин : *);

Memo1.Lines.Add(3. Еквівалентність : =);

Memo1.Lines.Add(4. Перевірка входження : <=);

Memo1.Lines.Add(5. Begin..End.);

End;

5: Begin

Label3.Caption := Який розділ програми є обовязковим?;

Memo1.Lines.Add(1. нефіксованої кількісті різних типів);

Memo1.Lines.Add(2. фіксованої кількісті тільки однакових типів);

Memo1.Lines.Add(3. розділ опису логіки програми);

Memo1.Lines.Add(4. нефіксованої кількісті однакових типів);

Memo1.Lines.Add(5. однакової кількісті різних типів);

End;

6: Begin

Label3.Caption := Яким ключовим словом починається розділ опису констант? ;

Memo1.Lines.Add(1. Файлова константа);

Memo1.Lines.Add(2. Const);

Memo1.Lines.Add(3. Файловий оператор);

Memo1.Lines.Add(4. Файловий масив);

Memo1.Lines.Add(5. Файлові записи);

End;

7: Begin

Label3.Caption := Яким ключовим словом починається заголовок модуля?;

Memo1.Lines.Add(1. Дійсного типу);

Memo1.Lines.Add(2. Unit );

Memo1.Lines.Add(3. Типу множина);

Memo1.Lines.Add(4. Типу масив);

Memo1.Lines.Add(5. Файлового типу);

End;

8: Begin

Label3.Caption := Яким ключовим словом починається інтерфейсна секція?;

Memo1.Lines.Add(1. mass[1..5] of real);

Memo1.Lines.Add(2. real[1..5] of real);

Memo1.Lines.Add(3. interface);

Memo1.Lines.Add(4. readmass[1..5] of real);

Memo1.Lines.Add(5. matr[1..5] of real);

End;

9: Begin

Label3.Caption := Яким ключовим словом починається описова секція?;

Memo1.Lines.Add(1. 128);

Memo1.Lines.Add(2. Implementation);

Memo1.Lines.Add(3. 32767);

Memo1.Lines.Add(4. 65535);

Memo1.Lines.Add(5. 2147483647);

End;

10: Begin

Label3.Caption := Яким ключовим словом починається секція ініціалізації? ;

Memo1.Lines.Add(1. initialization);

Memo1.Lines.Add(2. елементи другої множини, що не містяться в першій множині);

Memo1.Lines.Add(3. елементи множини, що містяться в другій множині);

Memo1.Lines.Add(4. елементи множини, що містяться в першій множині);

Memo1.Lines.Add(5. елементи першої множини, що містяться в другій множині);

End;

11: Begin

Label3.Caption := Яким ключовим словом починається секція деініціалізації?;

Memo1.Lines.Add(1. одним);

Memo1.Lines.Add(2. finalization);

Memo1.Lines.Add(3. трьома);

Memo1.Lines.Add(4. чотирма);

Memo1.Lines.Add(5. п+"+ятьма);

End;

12: Begin

Label3.Caption := Яка схема програм реалізується у Windows ?;

Memo1.Lines.Add(1. 4 Гб);

Memo1.Lines.Add(2. Керованих подіями);

Memo1.Lines.Add(3. 512 Кб);

Memo1.Lines.Add(4. 256 Кб);

Memo1.Lines.Add(5. 64 Кб);

End;

13: Begin

Label3.Caption := Як розшифровується абревіатура API ?;

Memo1.Lines.Add(1. LengthSet);

Memo1.Lines.Add(2. SetString);

Memo1.Lines.Add(3. StringSet);

Memo1.Lines.Add(4. StringLength);

Memo1.Lines.Add(5. Інтерфейс прикладного програмування);

End;

14: Begin

Label3.Caption := Який розділ програми є обовязковим?;

Memo1.Lines.Add(1. f1 : TextFile);

Memo1.Lines.Add(2. f2 : File of integer);

Memo1.Lines.Add(3. f3 : File of real);

Memo1.Lines.Add(4. Begin..End.);

Memo1.Lines.Add(5. f5 : System.Text);

End;

15: Begin

Label3.Caption := Яким ключовим словом починається розділ опису типів?;

Memo1.Lines.Add(1. Low);

Memo1.Lines.Add(2. SetLow);

Memo1.Lines.Add(3. Type);

Memo1.Lines.Add(4. High);

Memo1.Lines.Add(5. LowHigh);

End;

end;

if k > 15 then

Begin

if (m>=0)and(m<4) then km := 1;

if (m>=4)and(m<7) then km := 2;

if (m>=7)and(m<9) then km := 3;

if (m>=9)and(m<12) then km := 4;

if (m>=12)and(m<=15) then km := 5;

Str(km:7,Skm);

Edit3.Text := Skm;

Exit;

End;

Sk := IntToStr(k);

Edit2.Text := Sk;

Edit1.SetFocus;

Form1.Button1.Enabled := False;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Edit1.SetFocus;

Sk := IntToStr(k);

Edit2.Text := Sk;

Form1.Button1.Enabled := False;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not ( Key in [1..5]) then

Begin

Key := #0;

Beep;

Exit;

End;

Form1.Button1.Enabled := True;

end;

end.

Результат роботи тест-програми

Делись добром ;)