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) Оформите форму следующим образом:
![](data:image/png;base64,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)
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) Сохраните проект и запустите программу на исполнение.
![](data:image/png;base64,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)
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) Сохраните проект и запустите программу на исполнение.
Комментариев нет:
Отправить комментарий