четверг, 8 августа 2019 г.

Turbo Delphi 10

1. Реализовать телефонный справочник с возможностью сохранения данных в текстовый файл (<имя программы>.dat), расположенного в папке с программой, и чтения из него. Реализовать сохранение данных о размере и положении окна программы в текстовый файл (<имя программы>.ini) при выходе и загрузки данных настроек при запуске.
1) Создайте папку под новый проект.
2) Создайте новый проект и сохраните его в созданную папку.
3) Оформите внешний вид окна: задайте заголовок «Телефонный справочник» (Caption), размеры (Width, Height), позицию / положение (Position / Top, Left) формы.
4) Разместите на форме следующие компоненты и задайте им свойства:
НазваниеКомпонентЗначения свойств
Список изображенийImageList (Win32) Name = ilMain
Height = 24
Width = 24

Менеджер действийActionManager (Additional)Name = amMain
Images = ilMain
Главное меню для действийActionMainMenuBarName = 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) Откройте окно менеджера действий 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: TextFile;
s: string;
i: integer;
begin
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
readln(f, s);
inc(i);
sgrMain.Cells[0,i] := s;
readln(f, s);
sgrMain.Cells[1,i] := s;
readln(f, s);
sgrMain.Cells[2,i] := s;
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: TextFile;
s: string;
i,n: integer;
begin
s := ChangeFileExt(Application.ExeName, '.dat');
AssignFile(f, s);
ReWrite(f);
n := sgrMain.RowCount;
for i := 1 to n do
begin
writeln(f, sgrMain.Cells[0,i]);
writeln(f, sgrMain.Cells[1,i]);
writeln(f, sgrMain.Cells[2,i]);
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;



7) Оформите форму следующим образом:
8) Для заполнения заголовков таблицы создайте обработчик создания формы (onCreate):
procedure TfrmMain.FormCreate(Sender: TObject);
begin
sgrMain.Cells[0,0] := 'ФИО';
sgrMain.Cells[1,0] := 'Адрес';
sgrMain.Cells[2,0] := 'Телефон';
end;
9) Для реализации сохранения и загрузки настроек окна программы создайте обработчики на закрытие (onClose) и отображение (onShow) главной формы:
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
f: TextFile;
s: string;
begin
s := ChangeFileExt(Application.ExeName, '.ini');
AssignFile(f, s);
{$I-}
ReWrite(f);
if IOResult<>0 then
exit;
{$I+}
writeln(f, frmMain.Left);
writeln(f, frmMain.Top);
writeln(f, frmMain.Width);
writeln(f, frmMain.Height);
CloseFile(f);
end;
procedure TfrmMain.FormShow(Sender: TObject);
var
f: TextFile;
s: string;
i: integer;
begin
s := ChangeFileExt(Application.ExeName, '.ini');
if not FileExists(s) then
exit;
AssignFile(f, s);
Reset(f);
readln(f, i);
frmMain.Left := i;
readln(f, i);
frmMain.Top := i;
readln(f, i);
frmMain.Width := i;
readln(f, i);
frmMain.Height := i;
CloseFile(f);
end;
10) Откройте двойным щелчком контекстное меню PopupActionBar (или через пункт контекстного меню «Menu Designer…») и настройте контекстное меню путем выбора для пунктов соответствующих действий в свойстве Action.
11) Сохраните проект и запустите программу на исполнение.
2. Сформировать текстовый файл, в котором построчно записаны произвольные целые числа. Считать данные из файла и занести:
1) в один список – четные числа, в другой – не четные.
2) в один список – отрицательные числа, в другой – положительныe.
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 = 'txt'
Filter = 'Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*'

Диалог открытия файлаOpenDialog (Dialogs)Name = odMain
DefaultExt = 'txt'
Filter = 'Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*'


5) В панели со страницами (PageControl) создайте две страницы: щелкните правой кнопкой мыши на компоненте PageControl и выполните команду контекстного меню «New Page». Задайте страницам свойства:
НазваниеКомпонентЗначения свойств
Страница панели TabSheet Name = tsh1
Caption = 'Четные и нечетные'
Страница панели TabSheet Name = tsh2: TTabSheet
Caption = 'Положительные и отрицательные'

6) На панели (Panel) разместите следующие компоненты и задайте им свойства:
НазваниеКомпонентЗначения свойств
Поле вводаEdit (Standard)Name = edtCount
Text = '100'
Регулятор числового значенияUpDown (Win32)Name = udCount
Associate = edtCount
Max = 32000
Position = 100


Кнопка с изображением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 = lbOdd
Align = alLeft
Разделитель Splitter (Additional)Name = Splitter1
Список ListBox (Standard)Name = lbNoOdd
Align = alClient

8) На второй странице панели со страницами (PageControl) разместите следующие компоненты и задайте им свойства:
НазваниеКомпонентЗначения свойств
Список ListBox (Standard)Name = lbPlus
Align = alLeft
Разделитель Splitter (Additional)Name = Splitter2
Список ListBox (Standard)Name = lbMinus
Align = alClient

9) Оформите форму следующим образом:
10) Создайте обработчики нажатий (onClick) соответствующих кнопок:
procedure TfrmMain.bbtCloseClick(Sender: TObject);
begin
Close
end;
procedure TfrmMain.bbtLoadClick(Sender: TObject);
var
f: TextFile;
n,i: integer;
s: string;
begin
if not odMain.Execute then
exit
else
if not FileExists(odMain.FileName) then
exit;
AssignFile(f, odMain.FileName);
Reset(f);
n := 0;
lbOdd.Clear;
lbNoOdd.Clear;
lbPlus.Clear;
lbMinus.Clear;
try
while not eof(f) do
begin
readln(f, i);
inc(n);
s := IntToStr(i);
if odd(i) then
lbOdd.Items.Add(s)
else
lbNoOdd.Items.Add(s);
if i>0 then
lbPlus.Items.Add(s)
else
if i<0 then
lbMinus.Items.Add(s);
end;
except
Application.MessageBox(PChar('Ошибка. Файл "'+odMain.FileName+'" содержит неверные данные.'), 'Чтение из файла',MB_OK+MB_ICONERROR);
exit;
end;
CloseFile(f);
Application.MessageBox(PChar('Из файла "'+odMain.FileName+'" считано '+IntToStr(n)+' записей.'), 'Чтение из файла',MB_OK+MB_ICONINFORMATION)
end;
procedure TfrmMain.bbtSaveClick(Sender: TObject);
var
f: TextFile;
n,i: integer;
begin
if not sdMain.Execute then
exit;
randomize;
n := udCount.Position;
AssignFile(f, sdMain.FileName);
ReWrite(f);
for i := 1 to n do
writeln(f, random(101)-50);
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) Сохраните проект и запустите программу на исполнение.

Комментариев нет:

Отправить комментарий