Способы активизации 4-х окон Delphi

Задание на лабораторную работу №1

Объекты: форма, текстовое поле, изображение, кнопка.

Программирование кнопок.

1) Исследовать способы активизации 4-х окон Delphi:

  • главное окно Delphi, где находятся панель инструментов, палитра компонентов и главное меню;
  • инспектор объектов;
  • окна формы;
  • окна текста программы.

Клавиша F10 – для активизации главного окна.

Клавиша F11 – для активизации окна инспектора объектов.

Клавиша F12 – для перехода между окнами формы и кода программы.

2) Сохранить свой проект в личной папке File\Save All, при этом файлы проекта и текста программы должны иметь разные названия.

3) Создать форму, расположив на ней компоненты: метки, кнопки, изображения в соответствии с вариантом задания (файл Таблица заданий к Лаб.раб.№2).

При помощи инспектора объектов (свойства Name) кнопкам и изображениям дать информационные имена.

4) Создать свою пиктограмму содержащую [№ группы и инициалы (ФИО)].

5) Добавить на форме кнопку выхода.

Вариант №7

Кнопки
управления
окном

Цвет
формы

Шрифт

Курсор

Наличие
всплавающей
подсказки на объекте

Основное задание

7

свернуть
и системное меню

Розовый

размер-14
полужирный
цвет-коричневый

crHourGlass

картинка №1и
кнопка выхода

Переключать фотографии двумя кнопками. Запрограммируйте каждую кнопку для своей фотографии так, чтобы щелкнув по ней она становилась невидимой и недоступной.

При нажатии на кнопку выход, окно закрывается.

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TForm1 = class(TForm)

b_foto1: TButton;

b_foto2: TButton;

b_exit: TButton;

foto1: TImage;

foto2: TImage;

Label1: TLabel;

procedure b_exitClick(Sender: TObject);

procedure b_foto1Click(Sender: TObject);

procedure b_foto2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.b_exitClick(Sender: TObject);

begin

close // закрываем форму

end;

procedure TForm1.b_foto1Click(Sender: TObject);

begin

foto1.Visible:=false; // делаем невидимым 1 фото

foto1.Enabled:=false; // делаем недоступным 1 фото

foto2.Visible:=true; // делаем видимым 2 фото

foto2.Enabled:=true; // делаем доступным 2 фото

end;

procedure TForm1.b_foto2Click(Sender: TObject);

begin

foto2.Visible:=false; // делаем невидимым 2 фото

foto2.Enabled:=false; // делаем недоступным 2 фото

foto1.Visible:=true; // делаем видимым 1 фото

foto1.Enabled:=true; // делаем доступным 1 фото

end;

end.

Задание на лабораторную работу №2

Объекты: поле редактирование, переключатели и их свойства. Программирование ветвлений.

Составить форму в соответствии с вариантом задания предусмотреть кнопку выхода и защиту от неправильного ввода данных. Результат вычислений вывести в :

а) компонент Label;

б) окно сообщений (функция MessageDlg);

Вариант 7.

Вычислить зарплату преподавателя с вычетом подоходного налога(13%) либо без него за указанный период (в часах) с учетом ставки почасовой оплаты: ассистент – 75 рублей/час, доцент – 150 рублей/час, профессор – 200 рублей/час. Рекомендованный вид формы показан на рисунке. Предусмотреть, чтобы пользователь мог ввести в поле Количество часов только целое положительное число.

Вид рабочего окна программы следующий:

В поле ввода количества чалов возможен ввод только цифровых символов либо нажатие клавиши «BackSpace».

Если не введено количество часов или не выбрана должность преподавателя, на экране появляются следующие сообщения:

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

RadioGroup1: TRadioGroup;

Button1: TButton;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

RadioButton1: TRadioButton;

procedure Button1Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

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

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

st:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var zp:real;

begin

if edit1.Text='' then // если поле, где мы вводим коичество часов пустое

Case MessageDlg('Не введено количество часов!!! Повторите ввод!', mtError,mbOkCancel,0) of

idOk: begin

edit1.SetFocus; // курсор появляется в поле ввода

exit; // завершение процедуры

end;

idCancel:exit;

end;

if RadioGroup1.ItemIndex=-1 then // если не выбран переключатель должности

Case MessageDlg('Не выбрана должность преподавателя!!! ', mtError,mbOkCancel,0) of

idOk: begin

exit;

end;

idCancel:exit;

end;

if RadioButton1.Checked // если выбран переключатель"подоходный налог"

then

begin

zp:=st*StrToInt(edit1.Text)-st*StrToInt(edit1.Text)*0.13; // вычисляем з/п и вычитаем из нее сумму подоходного налога

// StrToInt - функция преобразования типов (строковый в целочисленный)

Label2.Caption:='зарплата преподавателя с учетом подоходного налога =' // выводим текст в метку

end

else // если переключатель"подоходный налог" не выбран

begin

zp:=st*StrToInt(edit1.Text);

Label2.Caption:='зарплата преподавателя без учета подоходного налога ='

end;

Label2.Caption:=Label2.Caption+FloatToStrF(zp,fffixed,5,2) // добавляем к тексту в метке рассчитанную сумму зарплаты

// здесь FloatToStrF - преобразование дробного значения в строковое, 2 - это сколько будет после запятой

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

case RadioGroup1.ItemIndex of // в зависимости от того, какой вариант выбран

0: st:=75; /// ассистент

1: st:=150; //доцент

2: st:=200; // профессор

end;

end;

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

begin

if not (key in ['0'..'9',#8]) // если введенный символ недопустимый

then key:=#0; // символ игнорируется

end;

end.

Задание на лабораторную работу №3

Объекты: Поле memo, главное Main menu и контекстное меню Popup menu, форма с информационным окном AboutBox.

В лабораторной работы № 4 варианты задания берутся из лабораторной № 3. Задание реализуется при помощи компонентов заявленных в заголовке.

  1. Ввод данных осуществить в один компонент Memo (ввод осуществляется построчно).
  2. Вывод данных осуществить в тот же компонент Memo, добавляя строчку для результата.
  3. Переключатели для выбора направления вычисления использовать CheckBox.
  4. Добавить главное и контекстное меню. В одноименных пунктах меню установить одну и туже процедуру вычисления.

Структура главного меню

Действия

Вычислить

Очистить

Выход

Информация


Структура контекстного меню

Вычислить

Очистить

Выход

  1. Добавить форму с информационным окном (About Box), в которую поместить информацию о разработчике проекта, и связать ее с пунктом главного меню Информация.

Окно программы имеет следующий вид:

В программе присутствует главное и контекстное меню. Все необходимые данные вводятся при помощи компонента Memo. Туда же выводится результат вычислений.

При некорректном вводе часов или должности преподавателя, на экран выводится сообщение и соответствующие строки компонента Memo очищаются.

При выборе пункта меню «Информация», на экран выводится следующее окно:

unit Unit1;

interface

uses

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

Dialogs, Menus, StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

PopupMenu1: TPopupMenu;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

Memo1: TMemo;

Label1: TLabel;

CheckBox1: TCheckBox;

procedure N5Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.N5Click(Sender: TObject);

begin

AboutBox.ShowModal // выводим на экран окно с информацией

end;

procedure TForm1.N4Click(Sender: TObject);

begin

close // закрываем окно

end;

procedure TForm1.N2Click(Sender: TObject);

var chas,st:integer;

d:string;

zp:real;

begin

try // обработка исключительных ситуаций - в данном случае преобразования строки в число

chas:=StrToInt(Memo1.Lines[0]); // в этом блоке идут операторы, которые могут вызвать исключение

except // а в этом те, если исключение возникло

Case MessageDlg('Не верно введены часы!!! ', mtError,mbOkCancel,0) of // выводим сообщение

idOk: begin

memo1.Lines[0]:=''; // очищаем строку

end;

idCancel:;

end;

exit; // завершение процедуры

end;

d:=Memo1.Lines[1]; // присваиваем переменной введенную строку (должность)

if d='ассистент' then st:=75 else if d='доцент' // в зависимости от того, какая должность, такая и ставка

then st:=150 else

if d='профессор' then st:=200

else // если должность введена неверно

Case MessageDlg('Не верно введена должность преподавателя!!! ', mtError,mbOkCancel,0) of

idOk: begin

memo1.Lines[1]:='';

exit;

end;

idCancel:exit;

end;

if CheckBox1.Checked then // если с учетом подоходного

begin

zp:=st*chas*0.13;

Memo1.Lines.Add('Зарплата преподавателя с учетом подоходного налога='+ FloatToStrF(zp,fffixed,5,2)) // добавляем строку, где выводим результат

end

else // без учета подоходного

begin zp:=st*chas;

Memo1.Lines.Add('Зарплата преподавателя без учета подоходного налога='+ FloatToStrF(zp,fffixed,5,2))

end;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

memo1.Clear // очистка компонента

end;

end.


Лабораторная работа №4

Новые объекты: многостраничный блокнот, комбинированный список. Создание новых окон и стандартных диалогов. Работа с файлами записей в Object Pascal.

Цель работы: создать программу для работы с базой данных, сформированной в виде файла записей. В каждой записи определены поля. Необходимо реализовать следующие операции: создание и удаление записи, сохранение и считывание файла записей с диска, редактирование, поиск и сортировку данных в алфавитном порядке, просмотр записей и навигацию по базе данных. Данный проект необходимо снабдить справочной системой, состоящей из нескольких разделов. Переход по разделам справки должен быть реализован при помощи: 1)содержания, 2)перекрестных гиперссылок.

Вариант №7

Создать БД содержащий информацию о месте жительства нескольких ваших товарищей. Предусмотреть возможность выдачи адреса по введенной фамилии.

Данная программа выполняет функции адресной книги. Позволяет производить быстрый поиск по указанной фамилии. Данные хранятся во внешнем файле с расширением dat.

Для начала необходимо выбрать в меню Файл - Прочитать из файла. Указать месторасположение файла и нажать кнопку Открыть. На экране отобразится список адресатов.

Окно программы содержит две вкладки. На первой из них отображена таблица адресатов.

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

После этого необходимо нажать кнопку «Найти». Если необходимо удалить запись, нажимаем кнопку «Удалить».

После редактирования информации необходимо выбрать в меню «Правка» - «Сохранить изменения в списке записей».

Для сохранения данных в файле выбираем в меню «Файл» - «Записать в файл».

Если выбрать в меню «Файл» - «Выход» на экране появится сообщение, хотим ли мы сохранить внесенные данные.

В программе предусмотрена справочная система. Для того, чтобы вызвать ее на экран, выбираем в меню пункт «О программе».

unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ComCtrls, ExtCtrls, Grids, Menus, Dialogs;

type

TPagesDlg = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

StringGrid1: TStringGrid;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Edit5: TEdit;

ComboBox1: TComboBox;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N8: TMenuItem;

N7: TMenuItem;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure NewEdit(Sender: TObject);

procedure NewComboBox;

procedure N8Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

info=record {тип записей}

fam,im:string[20];

adr:string[100];

end;

var

PagesDlg: TPagesDlg;

f:file of info;{Файл записей}

r:info;{Одна запись}

N:integer;{Количество записей}

implementation

{$R *.dfm}

// процедура, позволяющая удалять строки из StringGrid

procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);

var

i: Integer;

begin

Grid.Row := RowNumber;

if (Grid.Row = Grid.RowCount - 1) then

Grid.RowCount := Grid.RowCount - 1

else

begin

{ Not the last row}

for i := RowNumber to Grid.RowCount - 1 do

Grid.Rows[i] := Grid.Rows[i + 1];

Grid.RowCount := Grid.RowCount - 1;

end;

end;

procedure TPagesDlg.NewComboBox;

var i,j:integer;

begin

{Запоминаем активную позицию комбинированного списка}

j:=ComboBox1.ItemIndex;

ComboBox1.Clear; {очищаем список}

for i:=1 to n do

{Добавляем все фамилии из первого столбца в обновленный список}

ComboBox1.Items.Add(StringGrid1.Cells[0,i]);

ComboBox1.ItemIndex:=j;{Переходим на позицию j}

end;

procedure TPagesDlg.N2Click(Sender: TObject);

var i:integer;

begin

if OpenDialog1.Execute then

begin

AssignFile(F,OpenDialog1.FileName);

Reset(F);

n:=0;

while not eof(f) do // пока на будет достигнут конец файла

begin

read(F,r); // считываем данные из файла и заносим их в ячейки таблицы

stringGrid1.Cells[0,N+1]:=r.fam;

stringGrid1.Cells[1,N+1]:=r.im;

stringGrid1.Cells[2,N+1]:=r.adr;

N:=N+1; {увеличение числа записей на N}

end;

closeFile(F); // закрываем файл

NewEdit(ComboBox1);{процедура заполняет поля редактирования второй страницы формы}

NewCombobox; {процедура заполняет комбинированный список второй страницы}

end;

end;

procedure TPagesDlg.N3Click(Sender: TObject);

var i:integer;

begin

if SaveDialog1.Execute then

begin

AssignFile(F,SaveDialog1.FileName);

Rewrite(F); // открываем файл для записи

i:=1;

while stringGrid1.Cells[0,i]<>'' do // считываем данные из таблицы

begin

r.fam:=stringGrid1.Cells[0,i];

r.im:=stringGrid1.Cells[1,i];

r.adr:=stringGrid1.Cells[2,i];

write(F,r); // записываем в файл

i:=i+1;

end;

closeFile(F);

end;

end;

procedure TPagesDlg.FormCreate(Sender: TObject);

begin

stringGrid1.Cells[0,0]:='Фамилия';

stringGrid1.Cells[1,0]:='Имя';

stringGrid1.Cells[2,0]:='Адрес';

ComboBox1.Items.Add('<'); {Создаем пустую строку в комбинированном списке}

ComboBox1.ItemIndex:=0; {Активизируем эту строку на случай создания нового справочника}

end;

procedure TPagesDlg.NewEdit(Sender: TObject);

var i:integer;{номер строки данных в таблице}

begin

i:=ComboBox1.ItemIndex+1;

if i>0 then

begin

{Для значащих позиций комбинированного списка копируем данные i-записи с первой страницы формы в соответствующие поля на второй странице}

Edit1.Text:=StringGrid1.Cells[0,i];

Edit3.Text:=StringGrid1.Cells[1,i];

Edit2.Text:=StringGrid1.Cells[2,i];

end

end;

procedure TPagesDlg.N8Click(Sender: TObject);

var i:integer;

begin

i:=ComboBox1.ItemIndex+1;{Определяем номер активной записи}

if PageControl1.ActivePage=TabSheet2 then

begin {если активная страница вторая}

StringGrid1.Cells[0,i]:=Edit1.Text;

StringGrid1.Cells[1,i]:=Edit3.Text;

StringGrid1.Cells[2,i]:=Edit2.Text;

end

else NewEdit(ComboBox1);{иначе вносим изменения во 2-ю страницу}

NewComboBox;{Обновляем список}

end;

procedure TPagesDlg.Button1Click(Sender: TObject);

begin

if ComboBox1.ItemIndex=0 then

ComboBox1.ItemIndex:=N-1

else

ComboBox1.ItemIndex:=ComboBox1.ItemIndex-1;

NewEdit(ComboBox1) {Обновляем панель "Найдена запись"}

end;

procedure TPagesDlg.Button4Click(Sender: TObject);

begin

if ComboBox1.ItemIndex=0 then

ComboBox1.ItemIndex:=N-1

else

ComboBox1.ItemIndex:=ComboBox1.ItemIndex-1;

NewEdit(ComboBox1) {Обновляем панель "Найдена запись"}

end;

procedure TPagesDlg.Button3Click(Sender: TObject);

var i:integer;

begin

i:=ComboBox1.ItemIndex+1;{Определяем номер активной записи}

GridDeleteRow(i, stringGrid1); //вызываем процедуру удаления строки

Edit1.Text:=''; Edit2.Text:=''; // очищаем компоненты

Edit3.Text:='';

NewEdit(ComboBox1);{иначе вносим изменения во 2-ю страницу}

NewComboBox;{Обновляем список}

end;

procedure TPagesDlg.Button2Click(Sender: TObject); // поиск

var i:integer;

begin

i:=1;

while stringGrid1.Cells[0,i]<>'' do // перебираем строки в таблице

begin

if (StringGrid1.Cells[0,i]=ComboBox1.Items[ComboBox1.ItemIndex])

and (StringGrid1.Cells[0,i]=Edit5.Text) then

begin

NewEdit(ComboBox1);

end;

i:=i+1;

end;

end;

procedure TPagesDlg.ComboBox1Change(Sender: TObject);

begin

Edit5.Text:=ComboBox1.Items[ComboBox1.itemindex];

end;

procedure TPagesDlg.N7Click(Sender: TObject);

begin

winhelp(PagesDlg.Handle, 'help.hlp', HELP_CONTEXT, 1); //вызов справки

end;

procedure TPagesDlg.N5Click(Sender: TObject);

begin

Case MessageDlg('Сохранить изменения?', mtConfirmation,mbYesNoCancel,0) of

idYes:

begin

N3Click(sender); // вызываем процедуру сохранения

Close;

end;

idNo: close; // закрываем окно без сохранения

idCancel:;

end;

end;

end.

Способы активизации 4-х окон Delphi