Способы активизации 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. Задание реализуется при помощи компонентов заявленных в заголовке.
- Ввод данных осуществить в один компонент Memo (ввод осуществляется построчно).
- Вывод данных осуществить в тот же компонент Memo, добавляя строчку для результата.
- Переключатели для выбора направления вычисления использовать CheckBox.
- Добавить главное и контекстное меню. В одноименных пунктах меню установить одну и туже процедуру вычисления.
Структура главного меню
Действия
Вычислить
Очистить
Выход
Информация
Структура контекстного меню
Вычислить
Очистить
Выход
- Добавить форму с информационным окном (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