Esse artigo faz parte da revista Clube Delphi edição 30. Clique aqui para ler todos os artigos desta edição

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; ...

Quer ler esse conteúdo completo? Tenha acesso completo