Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота_Delphi_4_18_05_2011.doc
Скачиваний:
1
Добавлен:
18.08.2019
Размер:
386.05 Кб
Скачать

Процедура обробки події OnKeyPress

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

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

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

begin

case Key of

#8,'0'..'9' : ; // цифри і клавіша <Backspace>

#13: // при натисканні на клавішу <Enter>, курсор //встановлюється у першу позицію наступної комірки

if StringGrid1.Col < StringGrid1.ColCount - 1

then StringGrid1.Col := StringGrid1.Col + 1;

'.',',':

// символ,що відокремлює цілу частину числа від //дробової

begin

if Key <> DecimalSeparator then

Key := DecimalSeparator; // замінюємо символ,що

// відокремлює цілу частину числа від дробової

// на допустимий у Windows

if Pos(StringGrid1.Cells[StringGrid1.Col,0],

DecimalSeparator) <> 0

then Key := Chr(0); // заборона введення іншого

// символу, що відокремлює цілу частину

// числа від дробової

end;

'-' : // мінус можна вводити лише першим символом

// тобто коли комірка порожня

if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0 then

Key := Chr(0) ;

else // інші символи вводити заборонено

Key := Chr(0);

end;

end;

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

Приклад 1. Скласти програму заміни у матриці А розмірності (m n) значень елементів aij >b на значення змінної b. Та визначити найменший елемент у заданому рядку матриці.

Вихідні дані: m=4, n=3, b=2,4.

A =

Вивести нову матрицю А та знайдений найменший елемент.

Для реалізації цього завдання в Delphi, необхідно виконати наступні дії.

  1. Завантажте середовище візуального програмування Delphi.

  2. Змініть заголовок (Caption) форми з "Form1" на "Робота з масивом" (без лапок) та збільшіть розміри форми.

  3. Відмовтесь від можливості змінювати розміри вікна програми, надавши властивості форми BorderStyle значення bsDialog.

  4. Збережіть створену на даний момент форму у своїй особистій папці.

  5. Розташуйте у нижній частині форми одну піктографічну кнопку типу SpeedButton і кнопку закінчення роботи програми BitBtn.

Для цього використайте компоненти SpeedButton і BitBtn із закладки Additional палітри компонентів Delphi. На кнопках SpeedButton можна розташувати піктограму з спеціального набору піктограм — графічних файлів формату .bmp. Кнопки типу BitBtn володіють властивістю Kind (стандартна дія) з можливими значеннями bkClose (Закрити), bkCancel (Відмовитись), bkYes (Так), bkNo (Hi), bkHelp (Допомога) та іншими. На них також можуть бути розташовані піктограми. Встановлення стандартної дії надає можливість не програмувати роботу даної кнопки.

Рис. 4.3. Форма програми, що реалізує завдання прикладу1в режимі конструктора

Для коректної роботи об'єктів, розташованих на формі рис.4.3 задайте значення властивостей, що наведені у табл.4.4.

Таблиця 4.4. Властивості кнопок SpeedButton1 та BitBtnl

Властивість

Значення

Name

SpeedButton1

BitBtnl

Caption

&Зміна масиву

&Кінець

Glyph (файл з піктограмою)

C:\Program Files\Common Files\Borland Shared\Images\Buttons\ сheck.bmp

Kind

BkClose

Зауваження. Символ & у заголовку кнопки вказує на те, що цю кнопку можна натиснути також і за допомогою "гарячої" комбінації клавіш Alt + літера заголовка, перед якою стоїть цей символ.

6. Вставте у форму дві таблиці текстових рядків. Для цього скористайтесь компонентою StringGrid на закладці Additional палітри компонентів. Встановіть значення властивостей цих об'єктів в залежності від розміру масиву, який задано у завданні прикладу 1 (в табл. 4.5 задано кількість рядків і стовпців).

Таблиця 4.5. Властивості кнопок StringGrid1 та StringGrid2.

Властивість

Значення

Name

StringGrid1

StringGrid2

ColCount (кількість стовпців)

3

3

FixedCols (кількість фіксованих стовпців)

0

0

RowCount (кількість рядків)

4

4

FixedRows (кількість фіксованих рядків)

0

0

Options* => goEditing (можливість редагувати)

True (наявна)

False

(відсутня)

Зауваження. Щоб відкрити список властивості Options (Параметри) об'єкта StringGrid, треба двічі клацнути на цьому слові у вікні Object Inspector даного об'єкта.

7. Розмістіть у верхній частині форми текстові поля Label1 та Label2. Задайте наступні значення цих об'єктів:

Label1.Caption:=’Заданий масив’;

Label2.Caption:=’Змінений масив’;

8. У вікні тексту програми перед розділом implementation введіть опис констант програми та надайте константам значення:

const m=4; n=3;

P: array[1..4,1..3] of real=((0,1.5,-4.9),(0.5,4.1,3.8),(-0.5,1.8,6.7),(4.2,2.1,1.2));

{Масив із завдання}.

9.Запрограмуйте процедуру створення форми FormCreate. Для цього двічі клацніть на формі і одержану заготовку процедури FormCreate заповніть наступним чином:

procedure TForm1.FormCreate(Sender: TObject);

Var i, j: integer;

Begin

For i: =1 to m do

For j: =1 to n do begin

StringGrid1.Cells [j-1, i-1]:=FloatToStr (p [i, j]); {Заповнюємо таблицю текстових рядків StringGrid1 елементами матриці з завдання прикладу 1}

End;End;

10.Запрограмуйте дію кнопки SpeedButton1 наступним чином:

Procedure TForm1.SpeedButton1Click (Sender: TObject);

Var i, j: integer; B: real;

Begin

b:=2.4;

For i:=1 to m do

For j:=1 to n do begin

If StrToFloat(StringGrid1.Cells[j-1, i-1])>b then

StringGrid2.Cells[j-1,i-1]:=StringGrid1.Cells[j-1,i-1]

Else StringGrid2.Cells[j-1,i-1]:=FloatToStr(b);

End;

SpeedButton1.Enabled:=False;

End;

При натисканні на кнопку SpeedButton1 виконується процедура, у якій перевіряється умоваaij >b . Якщо умова виконується, то відповідний елемент матриці А замінюється на значення змінної b. В зв’язку з тим, що значення елементів матриці записані у комірки об’єкту StringGrid1 то звертатися до цих значень потрібно наступним чином : StringGrid1.Cells[j-1,i-1]

11. Створіть і запрограмуйте Button1. Заповніть Label4 відповідним текстом та значенням найменшого елементу масиву:

procedure TForm1.Button1Click(Sender: TObject);

var i,j:integer; a:string; c, min:real;

begin

j:=strtoint(edit1.text);

j:=j-1;

min:=strtofloat(stringgrid1.Cells[0,j]);

for i:=0 to 2 do

begin

c:=strtofloat(stringgrid1.Cells[i,j]);

if min>c then min:=c;

end;

Label4.caption:='Найменший елемент масиву '+Floattostr(min);

end;

Рис. 4.4. Форма програми, що реалізує завдання прикладу1

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