Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laboratornye_raboty.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

Практическая часть

На этом уроке мы создадим форму для справочника единицы измерения  нашего склада.

Запускает наш проект, и создаем новую форму File->New->Form -Delphi

В инспекторе объектов  устанавливаем следующие свойства для новой формы

Caption -> Единицы измерения;

FormStyle -> fsMDIChild;

Name -> Form_ed_izmer;

Сохраните модуль с именем ed_izmer.

Пропишем Uses general; после раздела implementation в программном модуле unit ed_izmer как показано на рисунке.

А программном модуле unit general главной формы пропишем Uses ed_izmer;

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

Далее размещаем на форме следующие компоненты

Три кнопки TButton из вкладки Standart

В инспекторе объектов для Button1 устанавливаем свойство  Caption  -> Новая запись;

для Button2 устанавливаем  свойство  Caption  -> Удалить запись;

для Button3 устанавливаем  свойство  Caption  -> Закрыть;

Из вкладки Data Access помещаем на форму компонент TDataSource.

В инспекторе объектов для него устанавливаем  следующие свойства:

DataSet -> Form_general.table_ed_izmer;

Name -> ed_izmer.

А из вкладки Data Controls помещаем на форму компонент TDBGrid.

В инспекторе объектов для него устанавливаем  следующие свойства:

DataSource -> ed_izmer;

Если вы все правильно сделали то должны на форме увидеть следующее:

Если поля таблицы не отображаются в DBGrid,возможно у вас отключено (False) свойство Active главной форме в инспекторе объектов компонента table_ed_izmer (TADOtable), установите Active -> True.

Сейчас мы переименуем поля нашей таблице. Для этого перейдем на главную форму проекта.

Выберем компонент table_ed_izmer  (ADOTable) и в структуре (Structure) -> ed_izmer -> Fields -> щелкнем правой кнопкой мыши и выберем Add all fields.

У вас должно получиться следующее:

Далее выбираем поле id и в инспекторе объектов устанавливаем у него свойство Visible->False,

затем выбираем поле ed_name и в инспекторе объектов устанавливаем у него свойства

DisplayLabel -> Единица  измерения;

DisplayWidth -> 30;

После этого видим для формы «Единицы измерения»:

Теперь пишем обработчики событий для кнопок.

Щелкнем дважды мышкой по кнопке «Новая запись» и пишем следующий код:

procedure TForm_ed_izmer.Button1Click(Sender: TObject); begin //новая запись form_general.table_ed_izmer.Append; dbgrid1.SetFocus

end;

Щелкнем дважды мышкой по кнопке «Удалить запись» и пишем следующий код:

procedure TForm_ed_izmer.Button2Click(Sender: TObject); //удаление записи begin //если записи отсутствуют то выводим сообщение, иначе удаляем запись   if dbgrid1.DataSource.DataSet.RecordCount<>0  then        begin         if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)=  IDYES) then            form_general.table_ed_izmer.Delete        end                                                 else ShowMessage('Нет записей для удаления'); end;

Щелкнем дважды мышкой по кнопке «Закрыть» и пишем следующий код:

procedure TForm_ed_izmer.Button3Click(Sender: TObject); begin //закрытие формы Close; end;

 В инспекторе объектов для Form_ed_izmer  событие FormActivate пишем:

procedure TForm_ed_izmer.FormActivate(Sender: TObject); begin //установка фокуса при активации формы dbgrid1.SetFocus;

end;

В инспекторе объектов для Form_ed_izmer  событие FormClose пишем:

procedure TForm_ed_izmer.FormClose(Sender: TObject; var Action: TCloseAction); begin //процедура закрытия формы   Action:=cafree; end;

В инспекторе объектов для Form_ed_izmer  событие FormCloseQuery пишем:

procedure TForm_ed_izmer.FormCloseQuery(Sender: TObject; var CanClose: Boolean); //проверка на наличие пустых записей перед закрытием, если такие записи найдены то отменяем //закрытие формы begin  if dbgrid1.DataSource.DataSet.RecordCount<>0  then begin if not (form_general.table_ed_izmer.Locate('ed_name', '', [loCaseInsensitive,loPartialKey])) then  begin form_general.table_ed_izmer.edit; form_general.table_ed_izmer.post; end                                                              else begin ShowMessage('У Вас есть не заполненные записи');CanClose:=false;dbgrid1.SetFocus;end;                                                      end;

end;

Сейчас сделаем запуск справочника «Единиц измерения» из главной формы. Для этого выбираем в меню Project -> Options…

и видим следующее окно:

Выбираем Forms и перемещаем Form_ed_izmer из Auto-create forms  в Avalable forms.

Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Единицы измерения

И пишем следующий обработчик события:

procedure TForm_general.N2Click(Sender: TObject); begin f:=0; //проверяем, активна ли наша форма if ActiveMDIChild.Caption<>'Единицы измерения' then begin //если нет то ищем ее среди неактивных  и если находим, то показываем ее for i:=0 to form_general.MDIChildCount-1 do if form_general.MDIChildren[i].Caption='Единицы измерения' then begin MDIChildren[i].Show;f:=1;end; end                                                else f:=1; //если форма еще не создана, то создаем ее if f<>1 then Tform_ed_izmer.Create(Application);

end;

Переменные f и I описываем в разделе var

var   Form_general: TForm_general;   f,i:integer; //f:=1 если подчиненная форма уже запущена и f:=0 если нет

Вот и все готово, запускаем проект

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]