Здравствуйте! Хочу показать работу (обработка базы данных предприятий) ,в которой не знаю как запрограммировать две кнопки: "Удалить" предприятие и "Изменить" данные о предприятии. Помогите, пожалуйста. Кнопку "Удалить" попробовал обработать, но получается какая-то ахинея.
Причина: Col должно изменяться ДО записи в базу, а не ПОСЛЕ. Отсюда и глюки. Чуть-чуть поправил (заодно подкорректировал интерфейс: теперь после добавления/правки содержимого базы СтрингГрид обновляется автоматически, и фокус в ЛистБоксе остается на скорректированном элементе).
В общем...(Показать/Скрыть)
procedure MakeAction(Append: boolean; Index: Integer); var T : TMyRec; res, curr : Integer; begin // Так. Надо новую запись? Значит, поля очистить, и поставить в заголовок // формы и кнопку соотв. текст, чтоб пользователь знал, что делается. if Append then begin for curr := 1 to 7 do (Form2.FindComponent('Edit' + IntToStr(curr)) as TEdit).Clear; form2.sb1.Caption := 'Добавить предприятие'; Form2.Caption := 'Новое предприятие'; end else // Значит, будем править... Сообщаем пользователю begin T := records[Index]; for curr := 1 to 7 do (Form2.FindComponent('Edit' + IntToStr(curr)) as TEdit).Text := T.Arr[curr]; form2.sb1.Caption := 'Изменить данные'; Form2.Caption := 'Изменение данных'; end;
// Это делается в любом случае form2.sb1.Enabled := true;
// А теперь - внимание: не надо привязываться к состоянию компонентов. // Для того, чтобы узнать результат выполнения модальной формы достаточно // посмотреть на ее ModalResult. Если форма закрыта крестиком - то там будет // mrCancel, если кнопкой - будет то, что присвоено по нажатию кнопки... res := form2.ShowModal; //показываем вторую форму и получаем её результат if res = mrOk then begin // Если нажата кнопка подтверждения - переносим поля из формы в структуру for curr := 1 to 7 do T.Arr[curr] := (Form2.FindComponent('Edit' + IntToStr(curr)) as TEdit).Text;
if Append then begin inc(index); //увеличили кол-во предприятий в базе на 1 col := index; // <--- Вот этого для корректной работы не хватало... end;
records[index] := T; //добавляем эту новую запись на нужное место savedb;//сохраняем новую базу loaddb;//открываем файл базы заново, чтобы увидеть результат операции
with form1 do begin lb1.SetFocus; lb1.ItemIndex := Pred(Index); lb1Click(lb1); end; end;
// Реализация нажатия кнопки "Добавить" тоже изменилась:
procedure TForm1.SpeedButton1Click(Sender: TObject);// добавить новое предпр. с данными begin MakeAction(true, Col); // раньше был вызов функции, теперь - процедура end;