1. Реализовать телефонный справочник с возможностью сохранения данных в типизированный файл (<имя программы>.dat), расположенного в папке с программой, и чтения из него. Реализовать сохранение данных о размере и положении окна программы в файл инициализации (<имя программы>.ini) при выходе и загрузки данных настроек при запуске.
1) Создайте папку под новый проект.
2) Создайте новый проект и сохраните его в созданную папку.
3) Оформите внешний вид окна: задайте заголовок «Телефонный справочник» (Caption), размеры (Width, Height), позицию / положение (Position / Top, Left) формы.
4) Разместите на форме следующие компоненты и задайте им свойства:
5) Заполните хранилище изображений ImageList изображениями для действий, указанных ниже.
6) Для работы с файлами инициализации подключите модуль IniFiles в разделе подключения библиотек uses.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ActnCtrls, Menus, ActnPopup, ToolWin, ActnMan, ActnMenus,
XPStyleActnCtrls, ActnList, ImgList, IniFiles;
7) В разделе описания типов, опишите тип-запись для компонент типизированного файла, включающий поля для хранения ФИО, адреса и телефона.
type
TAbonent = record
FIO: string[30];
Address: string[30];
Phone: string[20];
end;
TfrmMain = class(TForm)
...
8) Откройте окно менеджера действий ActionManager и добавьте следующие пользовательские действия (Ins):
9) Оформите форму следующим образом:
10) Для организации ввода по шаблону в колонку с телефоном создайте обработчик получения маски ввода (onGetEditMask):
procedure TfrmMain.sgrMainGetEditMask(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
if ACol=2 then
Value := '9-99-99';
end;
11) Для реализации сохранения/загрузки настроек окна программы создайте обработчики на создания (onCreate) и уничтожения (onDestroy) главной формы:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ini: TIniFile;
s: string;
begin
sgrMain.Cells[0,0] := 'ФИО';
sgrMain.Cells[1,0] := 'Адрес';
sgrMain.Cells[2,0] := 'Телефон';
s := ChangeFileExt(Application.ExeName, '.ini');
ini := TIniFile.Create(s);
try
frmMain.Left := ini.ReadInteger('POSITION','LEFT',100);
frmMain.Top := ini.ReadInteger('POSITION','TOP',100);
frmMain.Width := ini.ReadInteger('SIZE','WIDTH',400);
frmMain.Height := ini.ReadInteger('SIZE','HEIGHT',300);
finally
ini.Free;
end;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
var
ini: TIniFile;
s: string;
begin
s := ChangeFileExt(Application.ExeName, '.ini');
s := ChangeFileExt(Application.ExeName, '.ini');
ini := TIniFile.Create(s);
try
ini.WriteInteger('POSITION','LEFT',frmMain.Left);
ini.WriteInteger('POSITION','TOP',frmMain.Top);
ini.WriteInteger('SIZE','WIDTH',frmMain.Width);
ini.WriteInteger('SIZE','HEIGHT',frmMain.Height);
finally
ini.Free;
end;
end;
12) Откройте двойным щелчком контекстное меню PopupActionBar (или через пункт контекстного меню «Menu Designer…») и настройте контекстное меню путем выбора для пунктов соответствующих действий в свойстве Action.
13) Сохраните проект и запустите программу на исполнение.
2. Сформировать типизированный файл целых чисел с произвольным количеством. Считать данные из файла и определить: количество чисел в файле, минимальное и максимальное значения, сумму, произведение и среднее арифметическое всех чисел.
1) Создайте папку под новый проект.
2) Создайте новый проект и сохраните его в созданную папку.
3) Оформите внешний вид окна: задайте заголовок «Числа» (Caption), размеры (Width, Height), позицию / положение (Position / Top, Left) формы.
4) Разместите на форме следующие компоненты и задайте им свойства:
5) В панели со страницами (PageControl) создайте две страницы: щелкните правой кнопкой мыши на компоненте PageControl и выполните команду контекстного меню «New Page». Задайте страницам свойства:
6) На панели (Panel) разместите следующие компоненты и задайте им свойства:
7) На первой странице панели со страницами (PageControl) разместите следующие компоненты и задайте им свойства:
8) На второй странице панели со страницами (PageControl) разместите следующие компоненты и задайте им свойства:
9) Оформите форму следующим образом:
10) Создайте обработчики нажатий (onClick) соответствующих кнопок:
procedure TfrmMain.bbtCloseClick(Sender: TObject);
begin
Close
end;
procedure TfrmMain.bbtLoadClick(Sender: TObject);
var
f: File of Integer;
n,i,min,max: integer;
s,p: longint;
begin
if not odMain.Execute then
exit
else
if not FileExists(odMain.FileName) then
exit;
AssignFile(f, odMain.FileName);
Reset(f);
lbNumbers.Clear;
i := 0;
if eof(f) then
begin
Application.MessageBox(PChar('Файл "'+odMain.FileName+'" пуст.'), 'Чтение из файла',MB_OK+MB_ICONINFORMATION);
exit;
end;
vleResult.Values['Файл'] := odMain.FileName;
vleResult.Values['Количество'] := IntToStr(FileSize(f));
read(f, n);
min := n;
max := n;
s := n;
p := n;
while not eof(f) do
begin
read(f, n);
inc(i);
s := s+n;
p := p*n;
if n<min then
min := n
else
if n>max then
max := n;
lbNumbers.Items.Add(IntToStr(n));
end;
CloseFile(f);
vleResult.Values['Минимальное'] := IntToStr(min);
vleResult.Values['Максимальное'] := IntToStr(max);
vleResult.Values['Сумма'] := IntToStr(s);
vleResult.Values['Произведение'] := IntToStr(p);
vleResult.Values['Среднее арифметическое'] := FloatToStr(s/i);
pgcMain.TabIndex := 1;
Application.MessageBox(PChar('Из файла "'+odMain.FileName+'" считано '+IntToStr(i)+' записей.'), 'Чтение из файла',MB_OK+MB_ICONINFORMATION)
end;
procedure TfrmMain.bbtSaveClick(Sender: TObject);
var
f: File of Integer;
n,i: integer;
begin
if not sdMain.Execute then
exit;
randomize;
AssignFile(f, sdMain.FileName);
ReWrite(f);
n := random(1000);
while n>0 do
begin
i := random(101)-50;
write(f, i);
dec(n);
end;
CloseFile(f);
Application.MessageBox(PChar('Запись чисел в файл "'+sdMain.FileName+'" окончена.'), 'Запись в файл',MB_OK+MB_ICONINFORMATION)
end;
procedure TfrmMain.bbtAboutClick(Sender: TObject);
begin
Application.MessageBox('Автор: Баночкин Ф.Б.', 'Числа',MB_OK+MB_ICONINFORMATION)
end;
11) Создайте обработчик создания формы (onCreate) и пропишите в нем добавление параметров списка редактируемых значений.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
vleResult.InsertRow('Файл','-',True);
vleResult.InsertRow('Количество','-',True);
vleResult.InsertRow('Минимальное','-',True);
vleResult.InsertRow('Максимальное','-',True);
vleResult.InsertRow('Сумма','-',True);
vleResult.InsertRow('Произведение','-',True);
vleResult.InsertRow('Среднее арифметическое','-',True);
end;
12) Сохраните проект и запустите программу на исполнение.
1) Создайте папку под новый проект.
2) Создайте новый проект и сохраните его в созданную папку.
3) Оформите внешний вид окна: задайте заголовок «Телефонный справочник» (Caption), размеры (Width, Height), позицию / положение (Position / Top, Left) формы.
4) Разместите на форме следующие компоненты и задайте им свойства:
Название | Компонент | Значения свойств |
Список изображений | ImageList (Win32) | Name = ilMain Height = 24 Width = 24 |
Менеджер действий | ActionManager (Additional) | Name = amMain Images = ilMain |
Главное меню для действий | ActionMainMenuBar | Name = ammMain ActionManager = amMain |
Панель инструментов для действий | ActionToolBar (Additional) | Name = atbMain ActionManager = amMain ShowHint = True |
Контекстное меню для действий | PopupActionBar (Additional) | Name = pabMain |
Таблицу строк | StringGrid (Additional) | Name = sgrMain Align = alClient ColCount = 3 DefaultColWidth = 170 DefaultRowHeight = 20 FixedCols = 0 RowCount = 2 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing] PopupMenu = pabMain |
5) Заполните хранилище изображений ImageList изображениями для действий, указанных ниже.
6) Для работы с файлами инициализации подключите модуль IniFiles в разделе подключения библиотек uses.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ActnCtrls, Menus, ActnPopup, ToolWin, ActnMan, ActnMenus,
XPStyleActnCtrls, ActnList, ImgList, IniFiles;
7) В разделе описания типов, опишите тип-запись для компонент типизированного файла, включающий поля для хранения ФИО, адреса и телефона.
type
TAbonent = record
FIO: string[30];
Address: string[30];
Phone: string[20];
end;
TfrmMain = class(TForm)
...
8) Откройте окно менеджера действий ActionManager и добавьте следующие пользовательские действия (Ins):
Действие | Значения свойств | Обработчик |
Выход | Name = acClose Category = 'Файл' Caption = 'Выход' Hint = 'Выход' ImageIndex = иконка ShortCut = Ctrl+Q | procedure TfrmMain.acCloseExecute(Sender: TObject); begin Close end; |
Добавить | Name = acAdd Category = 'Данные' Caption = 'Добавить' Hint = 'Добавить' ImageIndex = иконка ShortCut = Ctrl+N | procedure TfrmMain.acAddExecute(Sender: TObject); begin sgrMain.RowCount := sgrMain.RowCount+1; end; |
Удалить | Name = acDel Category = 'Данные' Caption = 'Удалить' Hint = 'Удалить' ImageIndex = иконка ShortCut = Ctrl+Y | procedure TfrmMain.acDelExecute(Sender: TObject); begin if sgrMain.RowCount>2 then sgrMain.RowCount := sgrMain.RowCount-1; end; |
Загрузить | Name = acLoad Category = 'Файл' Caption = 'Загрузить' Hint = 'Загрузить' ImageIndex = иконка ShortCut = Ctrl+O | procedure TfrmMain.acLoadExecute(Sender: TObject); var f: File of TAbonent; tmp: TAbonent; s: string; i: integer; begin if Application.MessageBox('Загрузить данные?', 'Загрузка',MB_YESNO+MB_ICONWARNING)=ID_NO then exit; s := ChangeFileExt(Application.ExeName, '.dat'); if not FileExists(s) then begin Application.MessageBox('Файл с данными не найден!', 'Открытие', MB_OK+MB_ICONERROR); exit; end; AssignFile(f, s); Reset(f); i := 0; while not eof(f) do begin read(f, tmp); inc(i); sgrMain.Cells[0,i] := tmp.FIO; sgrMain.Cells[1,i] := tmp.Address; sgrMain.Cells[2,i] := tmp.Phone; end; sgrMain.RowCount := i; CloseFile(f); Application.MessageBox(PChar('Считано '+IntToStr(i-1)+' записей.'), 'Открытие', MB_OK+MB_ICONINFORMATION); end; |
Сохранить | Name = acSave Category = 'Файл' Caption = 'Сохранить' Hint = 'Сохранить' ImageIndex = иконка ShortCut = Ctrl+S | procedure TfrmMain.acSaveExecute(Sender: TObject); var f: File of TAbonent; tmp: TAbonent; s: string; i,n: integer; begin if Application.MessageBox('Сохранить данные?', 'Сохранение',MB_YESNO+MB_ICONWARNING)=ID_NO then exit; s := ChangeFileExt(Application.ExeName, '.dat'); AssignFile(f, s); ReWrite(f); n := sgrMain.RowCount; for i := 1 to n do begin tmp.FIO := sgrMain.Cells[0,i]; tmp.Address := sgrMain.Cells[1,i]; tmp.Phone := sgrMain.Cells[2,i]; write(f, tmp); end; CloseFile(f); Application.MessageBox('Запись данных окончена', 'Открытие', MB_OK+MB_ICONINFORMATION); end; |
О программе… | Name = acAbout Category = 'Справка' Caption = 'О программе...' Hint = 'О программе...' ImageIndex = иконка | procedure TfrmMain.acAboutExecute(Sender: TObject); begin Application.MessageBox('Автор: Баночкин Ф.Б.', 'Телефонный справочник', MB_OK+MB_ICONINFORMATION); end; |
9) Оформите форму следующим образом:
procedure TfrmMain.sgrMainGetEditMask(Sender: TObject; ACol, ARow: Integer;
var Value: string);
begin
if ACol=2 then
Value := '9-99-99';
end;
11) Для реализации сохранения/загрузки настроек окна программы создайте обработчики на создания (onCreate) и уничтожения (onDestroy) главной формы:
procedure TfrmMain.FormCreate(Sender: TObject);
var
ini: TIniFile;
s: string;
begin
sgrMain.Cells[0,0] := 'ФИО';
sgrMain.Cells[1,0] := 'Адрес';
sgrMain.Cells[2,0] := 'Телефон';
s := ChangeFileExt(Application.ExeName, '.ini');
ini := TIniFile.Create(s);
try
frmMain.Left := ini.ReadInteger('POSITION','LEFT',100);
frmMain.Top := ini.ReadInteger('POSITION','TOP',100);
frmMain.Width := ini.ReadInteger('SIZE','WIDTH',400);
frmMain.Height := ini.ReadInteger('SIZE','HEIGHT',300);
finally
ini.Free;
end;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
var
ini: TIniFile;
s: string;
begin
s := ChangeFileExt(Application.ExeName, '.ini');
s := ChangeFileExt(Application.ExeName, '.ini');
ini := TIniFile.Create(s);
try
ini.WriteInteger('POSITION','LEFT',frmMain.Left);
ini.WriteInteger('POSITION','TOP',frmMain.Top);
ini.WriteInteger('SIZE','WIDTH',frmMain.Width);
ini.WriteInteger('SIZE','HEIGHT',frmMain.Height);
finally
ini.Free;
end;
end;
12) Откройте двойным щелчком контекстное меню PopupActionBar (или через пункт контекстного меню «Menu Designer…») и настройте контекстное меню путем выбора для пунктов соответствующих действий в свойстве Action.
1) Создайте папку под новый проект.
2) Создайте новый проект и сохраните его в созданную папку.
3) Оформите внешний вид окна: задайте заголовок «Числа» (Caption), размеры (Width, Height), позицию / положение (Position / Top, Left) формы.
4) Разместите на форме следующие компоненты и задайте им свойства:
Название | Компонент | Значения свойств |
Форма | Главная форма | Name = frmMain Caption = 'Числа' Constraints.MinHeight = 350 Constraints.MinWidth = 440 Position = poScreenCenter |
Панель | Panel (Standard) | Name = pnlMain Align = alRight |
Панель со страницами (вкладкам) | PageControl (Win32) | Name = pgcMain Align = alClient |
Диалог сохранения файла | SaveDialog (Dialogs) | Name = sdMain DefaultExt = 'dat' Filter = 'Файлы с данными (*.dat)|*.dat|Все файлы (*.*)|*.*' |
Диалог открытия файла | OpenDialog (Dialogs) | Name = odMain DefaultExt = 'dat' Filter = 'Файлы с данными (*.dat)|*.dat|Все файлы (*.*)|*.*' |
5) В панели со страницами (PageControl) создайте две страницы: щелкните правой кнопкой мыши на компоненте PageControl и выполните команду контекстного меню «New Page». Задайте страницам свойства:
Название | Компонент | Значения свойств |
Страница панели | TabSheet | Name = tsh1 Caption = 'Числа' |
Страница панели | TabSheet | Name = tsh2: TTabSheet Caption = 'Итоги' |
6) На панели (Panel) разместите следующие компоненты и задайте им свойства:
Название | Компонент | Значения свойств |
Кнопка с изображением | BitBtn (Additional) | Name = bbtSave Caption = 'сгенерировать' Glyph = иконка Layout = blGlyphTop |
Кнопка с изображением | BitBtn (Additional) | Name = bbtLoad Caption = 'считать' Glyph = иконка Layout = blGlyphTop |
Кнопка с изображением | BitBtn (Additional) | Name = bbtClose Anchors = [akLeft, akBottom] Caption = 'выход' Glyph = иконка Layout = blGlyphTop |
Кнопка с изображением | BitBtn (Additional) | Name = bbtAbout Anchors = [akLeft, akBottom] Caption = 'о программе...' Glyph = иконка Layout = blGlyphTop |
7) На первой странице панели со страницами (PageControl) разместите следующие компоненты и задайте им свойства:
Название | Компонент | Значения свойств |
Список | ListBox (Standard) | Name = lbNumbers Align = alClient Columns = 10 |
8) На второй странице панели со страницами (PageControl) разместите следующие компоненты и задайте им свойства:
Название | Компонент | Значения свойств |
Список редактируемых значений | ValueListEditor (Additional) | Name = vleResult Align = alClient TitleCaptions.Strings = 'Параметр', 'Значение' |
9) Оформите форму следующим образом:
procedure TfrmMain.bbtCloseClick(Sender: TObject);
begin
Close
end;
procedure TfrmMain.bbtLoadClick(Sender: TObject);
var
f: File of Integer;
n,i,min,max: integer;
s,p: longint;
begin
if not odMain.Execute then
exit
else
if not FileExists(odMain.FileName) then
exit;
AssignFile(f, odMain.FileName);
Reset(f);
lbNumbers.Clear;
i := 0;
if eof(f) then
begin
Application.MessageBox(PChar('Файл "'+odMain.FileName+'" пуст.'), 'Чтение из файла',MB_OK+MB_ICONINFORMATION);
exit;
end;
vleResult.Values['Файл'] := odMain.FileName;
vleResult.Values['Количество'] := IntToStr(FileSize(f));
read(f, n);
min := n;
max := n;
s := n;
p := n;
while not eof(f) do
begin
read(f, n);
inc(i);
s := s+n;
p := p*n;
if n<min then
min := n
else
if n>max then
max := n;
lbNumbers.Items.Add(IntToStr(n));
end;
CloseFile(f);
vleResult.Values['Минимальное'] := IntToStr(min);
vleResult.Values['Максимальное'] := IntToStr(max);
vleResult.Values['Сумма'] := IntToStr(s);
vleResult.Values['Произведение'] := IntToStr(p);
vleResult.Values['Среднее арифметическое'] := FloatToStr(s/i);
pgcMain.TabIndex := 1;
Application.MessageBox(PChar('Из файла "'+odMain.FileName+'" считано '+IntToStr(i)+' записей.'), 'Чтение из файла',MB_OK+MB_ICONINFORMATION)
end;
procedure TfrmMain.bbtSaveClick(Sender: TObject);
var
f: File of Integer;
n,i: integer;
begin
if not sdMain.Execute then
exit;
randomize;
AssignFile(f, sdMain.FileName);
ReWrite(f);
n := random(1000);
while n>0 do
begin
i := random(101)-50;
write(f, i);
dec(n);
end;
CloseFile(f);
Application.MessageBox(PChar('Запись чисел в файл "'+sdMain.FileName+'" окончена.'), 'Запись в файл',MB_OK+MB_ICONINFORMATION)
end;
procedure TfrmMain.bbtAboutClick(Sender: TObject);
begin
Application.MessageBox('Автор: Баночкин Ф.Б.', 'Числа',MB_OK+MB_ICONINFORMATION)
end;
11) Создайте обработчик создания формы (onCreate) и пропишите в нем добавление параметров списка редактируемых значений.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
vleResult.InsertRow('Файл','-',True);
vleResult.InsertRow('Количество','-',True);
vleResult.InsertRow('Минимальное','-',True);
vleResult.InsertRow('Максимальное','-',True);
vleResult.InsertRow('Сумма','-',True);
vleResult.InsertRow('Произведение','-',True);
vleResult.InsertRow('Среднее арифметическое','-',True);
end;
12) Сохраните проект и запустите программу на исполнение.
Комментариев нет:
Отправить комментарий