Verdana; COLOR: black; FONT-SIZE: 10pt">O componente TDataSource (que chamamos de "DtSrc") possui uma propriedade chamada State que informa o estado atual da tabela. Possui também o evento OnStateChange que é chamado a cada vez que o estado da tabela é alterado. Podemos controlar a propriedade Enabled dos botões a partir deste evento, com o seguinte código:
procedure TFrmFichaPai.DtSrcStateChange(Sender: TObject);
const
Estados: array [TDataSetState] of string =
('Fechado','Consultando','Alterando','Inserindo',
'','','','','','','','','');
begin
btnIncluir.Enabled := DtSrc.State in [dsBrowse,dsInactive];
btnGravar.Enabled := DtSrc.State in [dsInsert,dsEdit];
btnCancelar.Enabled := DtSrc.State in [dsInsert,dsEdit];
btnExcluir.Enabled := DtSrc.State in [dsBrowse];
btnProcurar.Enabled := DtSrc.State in [dsBrowse,dsInactive];
StsBr.Panels[0].Text := Estados[DtSrc.State];
end;
Observe que o array de strings é baseado na enumeração TDataSetState, que contém os possíveis estados da tabela. Este array é usado na última linha de código para preencher o primeiro painel da StatusBar (que chamamos de "StsBr"). Inicialmente este evento não será chamado, pois a tabela está fechada. Assim, coloque "Fechado" na propriedade Text do primeiro painel.
Outra funcionalidade importante que adicionamos ao cadastro é a de verificar se os campos requeridos foram preenchidos. Declare, na seção private, a função Verifica_Campos_Em_Branco e implemente-a da seguinte forma:
function TFrmFichaPai.Verifica_Campos_Em_Branco: Boolean;
var cont: Integer;
begin
Result:=True; //assume que estão todos preenchidos
for cont:= 0 to DtSrc.DataSet.FieldCount - 1 do
if DtSrc.DataSet.Fields[cont].Required then
if (DtSrc.DataSet.Fields[cont].IsNull) or
(DtSrc.DataSet.Fields[cont].AsString='') then
begin
MessageDlg('Preencha o campo "' +
DtSrc.DataSet.Fields[cont].DisplayLabel + '"',
mtWarning,[mbOk],0,mbOk,nil);
Result:=False; //significa que encontrou um campo em branco
Break; //interrompe o laço for
end;
end;