Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод. указания СВП_1ч(2006).doc
Скачиваний:
18
Добавлен:
26.11.2019
Размер:
700.93 Кб
Скачать

Вывод сообщений

Для вывода окна с сообщением предусмотрено несколько функций.

  1. MessageDlg(const Msg: string; AType: TMsgDlgType;AButtons: TMsgDlgType;

HelpCtx: Longint):Word;

Отображает окно с сообщением Msg, с пиктограммой, задаваемой параметром AType, с набором кнопок, задаваемым параметром AButtons, и с темой справки, задаваемой параметром HelpCtx. Возвращает результат, указывающий, какую кнопку в диалоговом окне нажал пользователь.

  1. MessageDlgPos(const Msg: string; AType: TMsgDlgType; Buttons: TMsgDlgType;

HelpCtx: Longint; X,Y: integer):Word;

Отображает окно с сообщением Msg, с пиктограммой, задаваемой параметром AType, с набором кнопок, задаваемым параметром AButtons, и с темой справки, задаваемой параметром HelpCtx. Параметры X и Y задают экранные координаты верхнего левого угла окна. Возвращает результат, указывающий, какую кнопку в диалоговом окне нажал пользователь.

  1. ShowMessage(const Msg: string);

Отображает окно с сообщением Msg, с кнопкой OK.

Пример создания приложения с обработкой ис.

Задание. Создать Windows-приложение для отображения матрицы. Матрица должна загружаться из файла, выбранного с помощью компонента OpenDialog.

Для выполнения этого задания на форме необходимо разместить следующие компоненты:

  1. Страница - компонент OpenDialog .

  2. Страница - компонент StringGrid .

  3. Страница - компонент Button .

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.1.

При работе с массивами ввод и вывод информации на экран удобно организовывать с помощью компонента StringGrid. Компонент StringGrid используется для отображения информации в виде таблицы. Пиктограмма компонента StringGrid находится на странице Additional Палитры Компонентов. Таблица содержит две зоны – фиксированную и рабочую. Фиксированная зона служит для вывода наименований строк и столбцов рабочей зоны и управления их размерами с помощью “мыши”. Фиксированная зона выделена другим цветом и в нее запрещен ввод информации с клавиатуры.

StringGrid

OpenDialog

Рис.1.

Количество строк и столбцов фиксированной зоны устанавливается в свойствах FixedRows и FixedCols соответственно. Рабочая зона содержит RowCount строк и ColCount столбцов информации, которую можно изменять как программно, так и с помощью “мыши” или клавиатуры. Доступ к содержимому ячеек в программе осуществляется с помощью свойства Cells[ACol, ARow: integer]: string, где ACol-номер столбца, а ARow – номер строки таблицы, причем нумерация начинается с нуля. По умолчанию в компонент StringGrid запрещен ввод информации с клавиатуры, для разрешения ввода информации в ячейки необходимо в Инспекторе Объектов дважды щелкнуть “мышью” на символе + свойства +Options и в открывшемся списке опций установить значение goEditing в True.

Так как в нашем задании фиксированная зона не используется, то в Инспекторе Объектов значения свойств FixedCols и FixedRows можно установить равными 0. Организуем файл таким образом, чтобы в первой строке находилось количество строк матрицы, во второй – количество столбцов, а каждый элемент матрицы - в отдельной строке. Тогда, прочитав первые 2 цифры, можно установить значения свойств RowCount и ColCount компонента StringGrid. Так как при работе с файлами могут возникать ошибки ввода-вывода, то необходимо использовать защитные конструкции try..except и try..finally. В общем случае метод-обработчик события onClick для компонента Button будет выглядеть следующим образом:

procedure TForm1.LoadClick(Sender: TObject);

var f1:textfile;

c,r,i,j,k:integer;

begin

if opendialog1.Execute then

if FileExists(OpenDialog1.FileName) then

begin

assignfile(f1,opendialog1.FileName);

try

try

reset(f1); // здесь возможна ошибка EInOutError

readln(f1,c); // здесь возможна ошибка EInOutError

readln(f1,r); // здесь возможна ошибка EInOutError

stringgrid1.ColCount:=c;

stringgrid1.rowCount:=r;

for i:=0 to r-1 do

for j:=0 to c-1 do

begin

readln(f1,k); // здесь возможна ошибка EInOutError

stringgrid1.Cells[j,i]:=inttostr(k);// здесь возможна ошибка

EConvertError

end;

finally

closefile(f1);

end;

except

on E:EInOutError do showmessage('Ошибка при работе с файлом: '+inttostr(E.Errorcode));

on EConvertError do showmessage('Ошибка преобразования типов');

end;

end

else showmessage('Файл не найден');

end;