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

5. Работа с формами

Как известно, существуют информационные окна (формы) и диалоговые. Информационное окно предназначено в основном для вывода информации пользователю. Диалоговые окна – специальные формы, предназначенные для организации диалога пользователя с программой посредством этого окна. Здесь возможна двусторонняя передача информации – как программе, так и пользователю.

Окна могут быть также модальными и немодальными. При открытии окна в немодальном режиме, возможен переход на окно, его вызвавшее, и на другие. При вызове окна в модальном режиме невозможен переход на другие окна до тех пор, пока не закроется модальное окно.

Вызов модального окна осуществляется с помощью метода ShowModal:

Имя_формы.ShowModal;

Немодальное окно вызывается методом Show.

Метод Close закрывает окно (при этом возникает событие закрытия окна OnClose), Hide – делает скрытым (для его отображения используется метод Show).

С каждой формой связан модуль (*.pas). Определив глобальные переменные, например, в главной форме, их можно сделать доступными в дочерних окнах с помощью пункта меню File – Use unit и указать модуль, содержащий описание глобальных переменных.

Обратиться к компоненте другой формы можно, указав сначала имя формы, затем имя компоненты и требуемое свойство. Например,

If Form2.Edit1.Text = '' {Если не введено значение} then

Begin

// Выдаем сообщение об ошибке

ShowMessage('Пустое поле!');

// Устанавливаем курсор на Edit1 для ввода

Form2.Edit1.SetFocus;

End;

6. Пример обработки исключительных ситуаций

Пусть на форме размещены: StringGrid1(5x5), Button1. Таблица должна хранить матрицу целых чисел. При нажатии на кнопку данные из таблицы должны сохраниться в массив, с которым впоследствии можно производить различные действия. При этом должна пройти проверка правильности введенных в ячейки значений. Если есть ошибка, то выдать сообщение и обнулить значение ячейки с ошибочными данными. Код модуля выглядеть следующим образом.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

EError = class(Exception)

end;

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

A: array[0..4,0..4] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

i,j:integer;

begin

//Заполняем матрицуA введенными в StringGrid1 значениями

for i:=0 to StringGrid1.RowCount-1 do

for j:=0 to StringGrid1.ColCount-1 do

begin

try //начало опасного блока

A[i,j]:=StrToInt(StringGrid1.cells[i,j]);

if abs(A[i,j])>1000 then

//создаем собственное исключение

raise EError.Create('Число должно быть в диапазоне [-1000,1000]!');

except // обработка исключительных ситуаций

on E: EError do ShowMessage(E.Message);

on EConvertError do begin

StringGrid1.Cells[i,j]:='0';

ShowMessage('Ошибка в записи числа!');

end;

end;

end;

end;

end.

Для исключения возможных ошибок ввода следует использовать компоненты MaskEdit – ввод с маской, SpinEdit, ComboBox, ListBox, RadioGroup, CheckBox, позволяющие выбрать возможные значения из фиксированного набора.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]