unit UnitProduto;

interface

uses
  clipbrd, Windows, variants, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask, DBCtrls, ComCtrls, Buttons, ExtCtrls, Db, DBTables,
  ExtDlgs, Grids, DBGrids, Menus, ActnList, ToolWin;

type
THackDBGrid = class(TDBGrid);

  Tfproduto = class(TForm)
    opendialog: TOpenPictureDialog;
    ActionList1: TActionList;
    novo: TAction;
    voltar: TAction;
    avancar: TAction;
    foco: TAction;
    formatartb: TAction;
    gravar: TAction;
    cancelar: TAction;
    imprimir: TAction;
    fimagem: TAction;
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    Panel13: TPanel;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label1: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    ToolBar1: TToolBar;
    btnPrimeirop: TSpeedButton;
    btnVoltarp: TSpeedButton;
    btnAvancarp: TSpeedButton;
    btnUltimop: TSpeedButton;
    Panel3: TPanel;
    Panel16: TPanel;
    btnnovop: TSpeedButton;
    Panel17: TPanel;
    btngravarp: TSpeedButton;
    Panel18: TPanel;
    btncancelarp: TSpeedButton;
    Panel19: TPanel;
    Panel15: TPanel;
    SpeedButton2: TSpeedButton;
    Panel20: TPanel;
    Panel22: TPanel;
    btimprimirp: TSpeedButton;
    DBEdit9: TDBEdit;
    DBEdit10: TDBEdit;
    DBGrid3: TDBGrid;
    TabSheet3: TTabSheet;
    Panel14: TPanel;
    Panel1: TPanel;
    GroupBox4: TGroupBox;
    Label15: TLabel;
    Label16: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    DBNavigator3: TDBNavigator;
    DBEdit8: TDBEdit;
    DBEdit12: TDBEdit;
    Edit2: TEdit;
    DBEdit2: TDBEdit;
    DBEdit1: TDBEdit;
    GroupBox5: TGroupBox;
    Label33: TLabel;
    Bevel3: TBevel;
    Bevel4: TBevel;
    Label31: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label34: TLabel;
    ToolBar4: TToolBar;
    btnPrimeirop1: TSpeedButton;
    btnVoltarp1: TSpeedButton;
    btnAvancarp1: TSpeedButton;
    btnUltimop1: TSpeedButton;
    Panel31: TPanel;
    Panel32: TPanel;
    btnnovop1: TSpeedButton;
    Panel33: TPanel;
    btngravar1: TSpeedButton;
    Panel34: TPanel;
    btncancelar1: TSpeedButton;
    Panel35: TPanel;
    SpeedButton1: TSpeedButton;
    Panel37: TPanel;
    Panel38: TPanel;
    btimprimir1: TSpeedButton;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    DBEdit15: TDBEdit;
    DBEdit16: TDBEdit;
    DBEdit17: TDBEdit;
    DBEdit18: TDBEdit;
    DBEdit20: TDBEdit;
    DBEdit25: TDBEdit;
    image1: TDBImage;
    SpeedButton3: TSpeedButton;
    Panel2: TPanel;
    Panel4: TPanel;
    dsgrupo: TDataSource;
    Label2: TLabel;
    DBEdit3: TDBEdit;
    Panel5: TPanel;
    StatusBar1: TStatusBar;
    SpeedButton21: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    DBGrid2: TDBGrid;
    Panel6: TPanel;
    Panel7: TPanel;
    DBGrid1: TDBGrid;
    ajuda: TAction;
    procedure FormActivate(Sender: TObject);
    procedure EditNumeroKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit2Exit(Sender: TObject);
    procedure DBEdit1Exit(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure novoExecute(Sender: TObject);
    procedure voltarExecute(Sender: TObject);
    procedure avancarExecute(Sender: TObject);
    procedure focoExecute(Sender: TObject);
    procedure formatartbExecute(Sender: TObject);
    procedure DBGrid3KeyPress(Sender: TObject; var Key: Char);
    procedure btngravarpClick(Sender: TObject);
    procedure btncancelarpClick(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure btnPrimeiropClick(Sender: TObject);
    procedure btnVoltarpClick(Sender: TObject);
    procedure btnAvancarpClick(Sender: TObject);
    procedure btnUltimopClick(Sender: TObject);
    procedure btnnovopClick(Sender: TObject);
    procedure btnnovop1Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure gravarExecute(Sender: TObject);
    procedure btngravar1Click(Sender: TObject);
    procedure cancelarExecute(Sender: TObject);
    procedure imprimirExecute(Sender: TObject);
    procedure btimprimirpClick(Sender: TObject);
    procedure btimprimir1Click(Sender: TObject);
    procedure btncancelar1Click(Sender: TObject);
    procedure DBEdit8KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Label20Click(Sender: TObject);
    procedure Label21Click(Sender: TObject);
    procedure Label22Click(Sender: TObject);
    procedure Label23Click(Sender: TObject);
    procedure DBEdit9KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit10KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit12KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Label24Click(Sender: TObject);
    procedure fimagemExecute(Sender: TObject);
    procedure image1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnPrimeirop1Click(Sender: TObject);
    procedure btnVoltarp1Click(Sender: TObject);
    procedure btnAvancarp1Click(Sender: TObject);
    procedure btnUltimop1Click(Sender: TObject);
    procedure DBEdit15Exit(Sender: TObject);
    procedure Label25Click(Sender: TObject);
    procedure TabelaProdutoPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure SpeedButton3Click(Sender: TObject);
    procedure DBEdit9Exit(Sender: TObject);
    procedure DBEdit10Exit(Sender: TObject);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure DBGrid1Enter(Sender: TObject);
    procedure DBGrid1Exit(Sender: TObject);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton21Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure DBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit13KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit14KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ajudaExecute(Sender: TObject);

  private
     procedure AppHint(Sender : TObject);
    { Private declarations }
  public
NUM:Integer;
    { Public declarations }
  end;

var
  fproduto: Tfproduto;

implementation

uses UnitMenu, UnitRelatorioProduto, ulistaproduto, udm, shellapi;

procedure tfproduto.AppHint(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := Application.Hint;
end;

{$R *.DFM}

procedure Tfproduto.FormActivate(Sender: TObject);
begin
          THackDBGrid(DBGrid3).FixedCols := 3;
          THackDBGrid(DBGrid2).FixedCols := 9;
end;

procedure Tfproduto.EditNumeroKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if Key = VK_F12 then begin
   DBGrid2.SetFocus;
   Application.CreateForm (tflistaproduto, flistaproduto);
       flistaproduto.table1.Open;
      flistaproduto.st := 'Produto';
     flistaproduto.ShowModal;
    flistaproduto.Release;
end;
end;

procedure Tfproduto.Edit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
  bookmark : tbookmarkstr;
begin
     if key = 13 then begin

     bookmark := fdm.tbproduto.Bookmark;

     try
      fdm.tbproduto.DisableControls;
    try
      IF Edit2.Text <> '' THEN BEGIN
        fdm.tbproduto.First;
          While not fdm.tbproduto.Eof do begin
           fdm.tbproduto.Edit;
           fdm.tbproduto['vrunit'] := (fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value + ((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value / 100 * StrToFloat(Edit2.Text));

            fdm.tbproduto['vrvenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value +
            ((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('vendapercent') as tfloatfield).Value / 100);

            fdm.tbproduto['Revenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value +
             ((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('revendapercent') as tfloatfield).Value / 100);


           fdm.tbproduto.Next;
           end;

    end;
    finally

    fdm.tbproduto.EnableControls;
    end;
    finally
    fdm.tbproduto.Bookmark := bookmark;
    end;

     END;

end;

procedure Tfproduto.DBEdit2Exit(Sender: TObject);
  var
  bookmark : tbookmarkstr;
begin
     bookmark := fdm.tbproduto.Bookmark;


     try
      fdm.tbproduto.DisableControls;
    try

         fdm.tbproduto.First;
          While not fdm.tbproduto.Eof do begin
           fdm.tbproduto.Edit;
            fdm.tbproduto['vrvenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value +
            ((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('vendapercent') as tfloatfield).Value / 100);
             fdm.tbproduto.Next;
              end;
    finally

    fdm.tbproduto.EnableControls;
    end;
    finally
    fdm.tbproduto.Bookmark := bookmark;
     end;

        btngravarpclick(self);
end;

procedure Tfproduto.DBEdit1Exit(Sender: TObject);
  var
  bookmark : tbookmarkstr;
begin
     bookmark := fdm.tbproduto.Bookmark;

     try
      fdm.tbproduto.DisableControls;
    try
         fdm.tbproduto.First;
          While not fdm.tbproduto.Eof do begin
           fdm.tbproduto.Edit;
            fdm.tbproduto['Revenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value +
             ((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('revendapercent') as tfloatfield).Value / 100);
             fdm.tbproduto.Next;
              end;
    finally

    fdm.tbproduto.EnableControls;
    end;
    finally
    fdm.tbproduto.Bookmark := bookmark;
     end;

        btngravarpclick(self);
end;

procedure Tfproduto.Image1Click(Sender: TObject);
 var
  pt, st : String;
begin

        st := 'C';

        if inputquery ('Opções','Digite "C" para cadastrar' + #13 + 'Digite "A" para alterar:', st) then

          if (st ='C') or (st= 'c') then begin
           Opendialog.execute;
            fdm.tbproduto.edit;
             fdm.tbproduto['imagem'] := opendialog.FileName;
              image1.picture.LoadFromFile (opendialog.FileName);
               end else


    if (st ='A') or (st= 'a') then begin
     if fdm.tbproduto['imagem'] <> null then begin
      pt := fdm.tbproduto['imagem'] ;
       if FileExists(pt) then
        ShellExecute(handle, 'open', pchar(pt), '', '', SW_SHOWNORMAL)
         end else
          Messagedlg('Não há imagem para este produto !!!',mterror,[mbok],0);
           end else
           Messagedlg('Esta opção não é válida !!!',mterror,[mbok],0);









end;

procedure Tfproduto.novoExecute(Sender: TObject);
begin
       if pagecontrol1.ActivePageIndex = 0 then begin
         fdm.tbgrupo.Insert;
          DBEdit9.SetFocus;
           btngravarp.Enabled:=true;
            btncancelarp.Enabled:=true;

        end else if pagecontrol1.ActivePageIndex = 1 then begin
         fdm.tbproduto.Insert;

        with fdm.query1 do begin
         close;
          sql.clear;
           sql.add('select max(codigo) as codigo from tbproduto');
            open;
         end;

        if fdm.query1['codigo'] <> null then
         fdm.tbproduto['codigo'] := fdm.query1['codigo'] + 1
        else
        fdm.tbproduto['codigo']:='1';

        fdm.query1.close;

            fdm.tbproduto['un'] := 'PC';

          DBEdit14.SetFocus;
           btngravar1.Enabled:=true;
            btncancelar1.Enabled:=true;
        end;

end;

procedure Tfproduto.voltarExecute(Sender: TObject);
begin
       if pagecontrol1.ActivePageIndex = 0 then
         btnvoltarpclick(self)

        else if pagecontrol1.ActivePageIndex = 1 then
         btnvoltarp1click(self)


end;

procedure Tfproduto.avancarExecute(Sender: TObject);
begin
       if pagecontrol1.ActivePageIndex = 0 then
         btnavancarpclick(self)

        else if pagecontrol1.ActivePageIndex = 1 then
          btnAvancarp1click(self);
end;

procedure Tfproduto.focoExecute(Sender: TObject);
begin


       if pagecontrol1.ActivePageIndex = 0 then begin
        if dbgrid3.focused = true then
         dbedit9.setfocus
        else dbgrid3.setfocus;
        end else

       if pagecontrol1.ActivePageIndex = 1 then begin
        if dbgrid2.focused = true then
         dbedit8.setfocus
        else dbgrid2.setfocus;
        end;
end;

procedure Tfproduto.formatartbExecute(Sender: TObject);
begin
 (fdm.tbproduto.fieldbyname ('codigo') as tfloatfield).displayformat := '000000';
  (fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).displayformat := '###,##0.00';
   (fdm.tbproduto.fieldbyname ('vrvenda') as tfloatfield).displayformat := '###,##0.00';
    (fdm.tbproduto.fieldbyname ('revenda') as tfloatfield).displayformat := '###,##0.00';

end;

procedure Tfproduto.DBGrid3KeyPress(Sender: TObject; var Key: Char);
begin
        if key = #13 then
          DBGrid3.SelectedIndex :=  DBGrid3.SelectedIndex + 1;

        if key = #27 then
          DBGrid3.SelectedIndex :=  DBGrid3.SelectedIndex - 1;
end;

procedure Tfproduto.btngravarpClick(Sender: TObject);
begin
        gravarexecute(self);
end;

procedure Tfproduto.btncancelarpClick(Sender: TObject);
begin
        cancelarexecute(self);
end;

procedure Tfproduto.SpeedButton2Click(Sender: TObject);
begin
        fmenu.Produto1Click(self);
end;

procedure Tfproduto.SpeedButton1Click(Sender: TObject);
begin
        fmenu.Produto1Click(self);
end;

procedure Tfproduto.btnPrimeiropClick(Sender: TObject);
begin
        fdm.tbgrupo.first;
end;

procedure Tfproduto.btnVoltarpClick(Sender: TObject);
begin
        fdm.tbgrupo.Prior;
end;

procedure Tfproduto.btnAvancarpClick(Sender: TObject);
begin
        fdm.tbgrupo.next;
end;

procedure Tfproduto.btnUltimopClick(Sender: TObject);
begin
        fdm.tbgrupo.last;
end;

procedure Tfproduto.btnnovopClick(Sender: TObject);
begin
        novoexecute(self);
end;

procedure Tfproduto.btnnovop1Click(Sender: TObject);
begin
        novoexecute(self);
end;

procedure Tfproduto.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then begin
  key := #0;
       Perform(WM_nextdlgctl,0,0);
 end Else if Key = #27 then
   Perform(WM_nextdlgctl,1,0);
end;

procedure Tfproduto.gravarExecute(Sender: TObject);
begin
       if pagecontrol1.ActivePageIndex = 0 then begin
        fdm.tbgrupo.edit;
         fdm.tbgrupo.post;
          btngravarp.Enabled:= false;
           btncancelarp.Enabled:= false;
            end

        else if pagecontrol1.ActivePageIndex = 1 then begin
        fdm.tbproduto.edit;
         fdm.tbproduto.post;
          btngravar1.Enabled:= false;
           btncancelar1.Enabled:= false;
           end;

end;

procedure Tfproduto.btngravar1Click(Sender: TObject);
begin
        gravarexecute(self);
end;

procedure Tfproduto.cancelarExecute(Sender: TObject);
begin
       if pagecontrol1.ActivePageIndex = 0 then begin
        fdm.tbgrupo.Cancel;
         btngravarp.Enabled:= false;
          btncancelarp.Enabled:= false;
           end

        else if pagecontrol1.ActivePageIndex = 1 then begin
        fdm.tbproduto.Cancel;
         btngravar1.Enabled:= false;
          btncancelar1.Enabled:= false;
           end;

end;

procedure Tfproduto.imprimirExecute(Sender: TObject);
var
bookmark : tbookmarkstr;

begin

  fmenu.logotipoExecute(self);

          Application.CreateForm (TFrProduto,FrProduto);

 if pagecontrol1.ActivePageIndex = 0 then begin

  if fileexists (extractfilepath(paramstr(0)) + '\imagem\logo.bmp') then begin
  FrProduto.image1.Picture.assign(clipboard);
  clipboard.clear;
  end;
  if fileexists (extractfilepath(paramstr(0)) + '\imagem\dado.txt') then
   FrProduto.memo1.lines.loadfromfile(extractfilepath(paramstr(0)) + '\imagem\dado.txt');

   if application.MessageBox('Deseja imprimir apenas este grupo?', 'Imprimir', 4 + MB_ICONQUESTION )= mrno then
    fdm.tbproduto.MasterFields := '';
      FrProduto.quickgrupo.Previewmodal;
       end;

   if pagecontrol1.ActivePageIndex = 1 then begin

  if fileexists (extractfilepath(paramstr(0)) + '\imagem\logo.bmp') then begin
  FrProduto.image2.Picture.assign(clipboard);
  clipboard.clear;
  end;
  if fileexists (extractfilepath(paramstr(0)) + '\imagem\dado.txt')then
   FrProduto.memo2.lines.loadfromfile(extractfilepath(paramstr(0)) + '\imagem\dado.txt');

   bookmark := fdm.tbproduto.Bookmark;

   if application.MessageBox('Deseja imprimir apenas este grupo?','Imprimir', 4 + MB_ICONQUESTION)= mrno then
    fdm.tbproduto.MasterFields := ''
   else FrProduto.ltitulo.Caption :='PRODUTOS CADASTRADOS - GRUPO: ' + DBEdit8.Text;
     FrProduto.quickproduto.Previewmodal;

   end;
      FrProduto.Release;
       fdm.tbproduto.MasterFields := 'SIGLA';

    fdm.tbproduto.Bookmark := bookmark;

 end;


procedure Tfproduto.btimprimirpClick(Sender: TObject);
begin

        imprimirexecute(self);

end;

procedure Tfproduto.btimprimir1Click(Sender: TObject);
begin

        imprimirexecute(self);
end;

procedure Tfproduto.btncancelar1Click(Sender: TObject);
begin
        cancelarexecute(self);
end;

procedure Tfproduto.DBEdit8KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = 40 then fdm.tbgrupo.Next;
        if key = 38 then  fdm.tbgrupo.prior;
        if key = vk_f3 then label22click(self);
end;

procedure Tfproduto.Label20Click(Sender: TObject);
Var
       Codigo:String;

begin

     if InputQuery ('Localizar', 'Entre com a sigla do grupo:',Codigo ) then
       if not  fdm.tbgrupo.Locate ('sigla',uppercase(Codigo),[]) then
         showmessage('Sigla não localizada!');


end;

procedure Tfproduto.Label21Click(Sender: TObject);
Var
       Codigo:String;

begin

     if InputQuery ('Localizar', 'Entre com a nome do grupo:',Codigo ) then
       if not  fdm.tbgrupo.Locate ('grupo',uppercase(Codigo),[]) then
         showmessage('Grupo não localizado!');

end;

procedure Tfproduto.Label22Click(Sender: TObject);
Var
       Codigo:String;

begin

     if InputQuery ('Localizar', 'Entre com a sigla grupo:',Codigo ) then
       if not  fdm.tbgrupo.Locate ('sigla',uppercase(Codigo),[]) then
         showmessage('Grupo não localizado!');

end;

procedure Tfproduto.Label23Click(Sender: TObject);
Var
       Codigo:String;

begin

     if InputQuery ('Localizar', 'Entre com nome do grupo:',Codigo ) then
       if not  fdm.tbgrupo.Locate ('grupo',uppercase(Codigo),[]) then
         showmessage('Nome não localizado!');

end;

procedure Tfproduto.DBEdit9KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f3 then label20click(self);
        
end;

procedure Tfproduto.DBEdit10KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f3 then label21click(self);
end;

procedure Tfproduto.DBEdit12KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f3 then label23click(self);
end;

procedure Tfproduto.Label24Click(Sender: TObject);
Var
       Codigo:String;

begin

     if InputQuery ('Localizar', 'Entre com código:',Codigo ) then
       if not fdm.tbproduto.Locate ('codigo',Codigo,[]) then
         showmessage('Este código não está cadastrado, ou pertence a outro grupo.' + #13 +
          'Clique em consulta, para verificar!');

end;

procedure Tfproduto.fimagemExecute(Sender: TObject);
 var
  pt : String;
begin
     if dbgrid2.Focused = true then begin
      if image1.visible = false then
       image1.show
        else
       image1.Hide;
       if fdm.tbproduto['imagem'] <> null then begin
       pt := fdm.tbproduto['imagem'] ;
       if fileexists (pt) then
        image1.Picture.LoadFromFile (pt);
        end else
      image1.Picture.LoadFromFile (extractfilepath(paramstr(0)) + '\imagem\imagem.wmf');
    end;
end;

procedure Tfproduto.image1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

        if key = 27 then
         image1.Hide;
end;

procedure Tfproduto.btnPrimeirop1Click(Sender: TObject);
begin
        fdm.tbproduto.First;
end;

procedure Tfproduto.btnVoltarp1Click(Sender: TObject);
begin
        fdm.tbproduto.prior;
end;

procedure Tfproduto.btnAvancarp1Click(Sender: TObject);
begin
        fdm.tbproduto.next;
end;

procedure Tfproduto.btnUltimop1Click(Sender: TObject);
begin
        fdm.tbproduto.last;
end;

procedure Tfproduto.DBEdit15Exit(Sender: TObject);
begin
        fdm.tbproduto.edit;
         fdm.tbproduto['vrvenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value
         +((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('vendapercent') as tfloatfield).Value / 100);

          fdm.tbproduto['Revenda'] :=(fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value
           +((fdm.tbproduto.fieldbyname ('vrunit') as tfloatfield).Value * (fdm.tbgrupo.fieldbyname ('revendapercent') as tfloatfield).Value / 100);
end;

procedure Tfproduto.Label25Click(Sender: TObject);
Var
       produto:String;

begin

     if InputQuery ('Localizar', 'Entre com produto:',produto ) then
       if not fdm.tbproduto.Locate ('produto',uppercase(produto),[]) then
         showmessage('Este produto não está cadastrado, ou pertence a outro grupo.' + #13 +
          'Clique em consulta, para verificar!');



end;

procedure Tfproduto.TabelaProdutoPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
        showmessage('Este produto já foi cadastrado, ou existe campos (nome e descrição) vazios');
         abort;
end;

procedure Tfproduto.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
        IF btngravar1.Enabled = true then begin
         case application.MessageBox('Deseja salvar as alterações?', 'Sair de Cadastro de Produto',mb_yesnocancel + MB_ICONQUESTION )of

         idyes : begin
         fdm.tbproduto.edit;
          fdm.tbproduto.post;
           canclose:=true;
            end;

         idno : begin
          fdm.tbproduto.cancel;
           canclose:=true;
            end;

         idcancel :
           canclose:=false;
end;
end;
end;

procedure Tfproduto.SpeedButton3Click(Sender: TObject);
var
MSG, st : STRING;
begin

     if fdm.tbproduto['produto'] <> null then
      st := fdm.tbproduto['produto'];

     if fdm.tbproduto['descricao'] <> null then
      st := st + ' ' + fdm.tbproduto['descricao'];


    with fdm.query1 do begin
     close;
      sql.clear;
       sql.add ('select distinct fantasia from tbpedidoitem where nome = "'+ st + '"');
        open;
         end;

    while not fdm.query1.Eof do begin
    if fdm.query1['fantasia'] <> null then
    msg := msg + fdm.query1['fantasia']+ #13;
    fdm.query1.next;
    end;

    showmessage('CLIENTES QUE CONSOMEM ' + St+':'+ #13+ #13 + msg);
end;

procedure Tfproduto.DBEdit9Exit(Sender: TObject);
begin
        fdm.tbproduto.Last;

        while not fdm.tbproduto.Bof do begin
         fdm.tbproduto.edit;
          fdm.tbproduto['sigla'] := fdm.tbgrupo['sigla'];
           fdm.tbproduto.prior;
            end;
end;

procedure Tfproduto.DBEdit10Exit(Sender: TObject);
begin
        fdm.tbproduto.Last;

        while not fdm.tbproduto.Bof do begin
         fdm.tbproduto.edit;
           fdm.tbproduto['grupo'] := fdm.tbgrupo['grupo'];
           fdm.tbproduto.prior;
            end;
end;

procedure Tfproduto.DBGrid1ColExit(Sender: TObject);
begin
       if dbgrid2.selectedindex in [3] then begin
        DBEdit2Exit(self);
         DBEdit1Exit(self);
          end;

end;

procedure Tfproduto.DBGrid1Enter(Sender: TObject);
begin

        btngravarpclick(self);

       if (fdm.tbgrupo['sigla']=null) or (fdm.tbgrupo['grupo']=null) then begin
        showmessage('Preencha o grupo ');
         dbedit12.setfocus;
          end else keypreview := false;

end;

procedure Tfproduto.DBGrid1Exit(Sender: TObject);
begin
        keypreview := true;
end;

procedure Tfproduto.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
        if key = #13 then
          DBGrid2.SelectedIndex :=  DBGrid2.SelectedIndex + 1;

        if key = #27 then
          DBGrid2.SelectedIndex :=  DBGrid2.SelectedIndex - 1;

end;

procedure Tfproduto.SpeedButton4Click(Sender: TObject);
begin

    if Application.MessageBox('Deseja apagar este produto?','Deletar',4 + MB_ICONQUESTION) = mrYes then
      fdm.tbproduto.delete;

end;

procedure Tfproduto.SpeedButton21Click(Sender: TObject);
begin

    if Application.MessageBox('Se este grupo for apagado, todos os produtos (cadastrados neste grupo) apagarão também. Deseja continuar?','Deletar',4 + MB_ICONQUESTION) = mrYes then begin

        fdm.tbproduto.Last;

        while not fdm.tbproduto.Bof do begin
         fdm.tbproduto.delete;
          fdm.tbproduto.prior;
           end;
            if fdm.tbproduto['codigo'] <> null then
            fdm.tbproduto.delete;
             fdm.tbgrupo.delete;

         end;

end;

procedure Tfproduto.SpeedButton5Click(Sender: TObject);

begin

    if Application.MessageBox(pchar('Atenção, este comando deverá usá-lo, caso tenha apagado produtos e pretende que os códigos deletados sejam usados por outros produtos, sendo assim, todos os produtos receberão um novo código, em ordem crescente. Continuar?'),'Reorganizar Código',4 + MB_ICONWARNING) = mrYes then

     if fmenu.permissao = 'T' then begin

     fdm.tbproduto.MasterFields := '';
      num := 0;
       fdm.tbproduto.DisableControls;

     fdm.tbproduto.First;

     while not fdm.tbproduto.Eof do begin
      fdm.tbproduto.Edit;
       num := num + 1;
        fdm.tbproduto['codigo'] := num;
         fdm.tbproduto.Next;
          end;

     fdm.tbproduto.MasterFields := 'sigla';
     fdm.tbproduto.EnableControls;

            end else
             showmessage('Esta opção está disponível, só para o administrador!!!');
end;

procedure Tfproduto.DBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f4 then begin
         if image1.Visible = false then
          fimagemexecute(self)
         else
          image1.Hide;
        end;
end;

procedure Tfproduto.DBEdit13KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f3 then label24click(self);
end;

procedure Tfproduto.DBEdit14KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if key = vk_f3 then label25click(self);
end;

procedure Tfproduto.FormClose(Sender: TObject; var Action: TCloseAction);
begin
        Application.OnHint := nil;
end;

procedure Tfproduto.FormCreate(Sender: TObject);
begin
Application.OnHint := AppHint;
end;

procedure Tfproduto.ajudaExecute(Sender: TObject);
var
  Comp: Trichedit; // * variável Comp da classe TMemo
  texto : string;
begin
  Comp := Trichedit.Create (Self);  // * cria o componente Memo
  Comp.Parent := Self;    // * exibe o componente criado

  if fileexists (extractfilepath(paramstr(0)) + '\ajuda\ajudaproduto.txt') then
   comp.lines.loadfromfile (extractfilepath(paramstr(0)) + '\ajuda\ajudaproduto.txt');

  texto := comp.Text;
  comp.Destroy;

  Showmessage (texto);


end;

end.


