unit fempleados;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtDlgs, Vcl.ImgList, Vcl.StdCtrls,
  Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Mask, Vcl.Grids, Vcl.DBGrids, Vcl.Imaging.jpeg,
  Vcl.Menus, frxExportPDF, frxClass, frxExportCSV, frxDBSet, Data.DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, frxExportBaseDialog;

type
  TEmpleados = class(TForm)
    PEmpleados: TPanel;
    Panel13: TPanel;
    DBGrid4: TDBGrid;
    Panel14: TPanel;
    Label39: TLabel;
    todosempleados: TCheckBox;
    tbuscarempleados: TEdit;
    Panel15: TPanel;
    Panel20: TPanel;
    Label47: TLabel;
    btecancelar: TButton;
    btemodificar: TButton;
    bteborrar: TButton;
    btenuevo: TButton;
    bteguardar: TButton;
    btesalir: TButton;
    Panel21: TPanel;
    peimagenes: TPanel;
    Imagee: TImage;
    imgfotoe: TImage;
    btEimagen: TButton;
    btEoKimagen: TButton;
    btactivarcamara: TButton;
    btdesactivarcamara: TButton;
    panelfotoe: TPanel;
    btactivarcamarae: TButton;
    Pempleadosdatos: TPanel;
    Label48: TLabel;
    Label49: TLabel;
    Label50: TLabel;
    Label51: TLabel;
    Label56: TLabel;
    Label57: TLabel;
    Label61: TLabel;
    Label62: TLabel;
    Label63: TLabel;
    Label65: TLabel;
    Label75: TLabel;
    Label41: TLabel;
    DBEdit39: TDBEdit;
    DBEdit40: TDBEdit;
    DBEdit41: TDBEdit;
    DBEdit42: TDBEdit;
    DBEdit44: TDBEdit;
    DBRadioGroup4: TDBRadioGroup;
    DBEdit49: TDBEdit;
    DBEdit50: TDBEdit;
    DBEdit51: TDBEdit;
    DBEdit53: TDBEdit;
    DBEdit63: TDBEdit;
    DBEdit45: TDBEdit;
    DBEdit36: TDBEdit;
    ImageList1: TImageList;
    OpenPictureDialog1: TOpenPictureDialog;
    MenubtAimagen: TPopupMenu;
    Cargar1: TMenuItem;
    Capturar1: TMenuItem;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Button2: TButton;
    informedb: TfrxDBDataset;
    rTarjeta: TfrxReport;
    frxCSVExport1: TfrxCSVExport;
    frxPDFExport1: TfrxPDFExport;
    qaux: TZQuery;
    procedure btEimagenClick(Sender: TObject);
    procedure btEoKimagenClick(Sender: TObject);
    procedure btactivarcamaraClick(Sender: TObject);
    procedure btdesactivarcamaraClick(Sender: TObject);
    procedure btenuevoClick(Sender: TObject);
    procedure bteborrarClick(Sender: TObject);
    procedure btemodificarClick(Sender: TObject);
    procedure bteguardarClick(Sender: TObject);
    procedure btecancelarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tbuscarempleadosEnter(Sender: TObject);
    procedure tbuscarempleadosExit(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btesalirClick(Sender: TObject);
    procedure Cargar1Click(Sender: TObject);
    procedure Capturar1Click(Sender: TObject);
    procedure todosempleadosClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure DBEdit40Exit(Sender: TObject);
    procedure DBEdit41Exit(Sender: TObject);
  private
    { Private declarations }
    hWndC,hWndC2 : THandle;
    procedure SetResolution(Width, Height: integer);
  public
    { Public declarations }
  end;

var
  Empleados: TEmpleados;
const
  WM_CAP_START         = WM_USER;
  WM_CONNECT           = WM_USER + 10;
  WM_DISCONNECT        = WM_USER + 11;
  WM_SAVEDIB                  = WM_USER + 25;
  WM_GET_VIDEOFORMAT          = WM_USER + 44;
  WM_SET_VIDEOFORMAT          = WM_USER + 45;
  WM_SET_PREVIEW              = WM_USER + 50;
  WM_SET_OVERLAY              = WM_USER + 51;
  WM_SET_PREVIEWRATE          = WM_USER + 52;
  WM_SET_SCALE                = WM_USER + 53;
  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;

function capCreateCaptureWindowA(lpszWindowName: PCHAR; dwStyle, x, y, nWidth, nHeight: integer; ParentWin: HWND; nId: integer): HWND; stdcall external 'AVICAP32.DLL';

implementation
uses fdatos, fprincipal;
{$R *.dfm}


procedure TEmpleados.btactivarcamaraClick(Sender: TObject);
begin
    Panelfotoe.Width:= 120;
    Panelfotoe.Height:= 120;
    hWndC := capCreateCaptureWindowA('Ventana de captura', WS_CHILD or WS_VISIBLE ,0, 0,Panelfotoe.Height,Panelfotoe.Width,Panelfotoe.Handle,0);

      if hWndC <> 0 then
      begin
        SendMessage(hWndC, WM_CONNECT, 0, 0);
        SendMessage(hWndC, WM_SET_SCALE, 1, 0);
        SendMessage(hWndC, WM_SET_PREVIEWRATE, 20, 0);
        SendMessage(hWndC, WM_SET_OVERLAY, 1, 0);
        SendMessage(hWndC, WM_SET_PREVIEW, 1, 0);
        SetResolution(Panelfotoe.Height,Panelfotoe.Width);

      end;
end;

procedure TEmpleados.btdesactivarcamaraClick(Sender: TObject);
begin
  if hWndC <> 0 then
  begin
    SendMessage(hWndC, WM_DISCONNECT, 0, 0);
  end;

end;

procedure TEmpleados.bteborrarClick(Sender: TObject);
begin
    dm.trabajadores.Delete;
end;

procedure TEmpleados.btecancelarClick(Sender: TObject);
begin
    dm.trabajadores.cancel;
    dm.trabajadores.MasterSource:=dm.dsqempleados;
    pempleadosdatos.Enabled:=false;
    PeImagenes.Visible:=true;
end;

procedure TEmpleados.bteguardarClick(Sender: TObject);
begin
    if not dm.qempleados.active then dm.qempleados.open;

    dm.trabajadores.Post;

    pempleadosdatos.Enabled:=false;
    PeImagenes.Visible:=true;
end;

procedure TEmpleados.btEimagenClick(Sender: TObject);
var
  PanelDC: HDC;
  Jpg : TJPEGImage;
  bmp : Tbitmap;
  imagen : TPicture;
  ext:string;
//  imagen : TJPEGImage;

begin

if (Sender as TButton).Caption ='Seleccione opción' then
begin
  bteimagen.Dragging; //('MenubtAimangen');
end;
if (Sender as TButton).Caption ='Cargar imagen' then
begin

  if OpenPictureDialog1.Execute then
  begin
//    imagen := TJPEGImage.Create;
    imagen := TPicture.Create;
    bmp:= TBitmap.Create;
    jpg:=TJPEGImage.Create;

    try

      ext:= ExtractFileExt(openpicturedialog1.FileName);
      if (ext='.jpg') or (ext='jpeg') then
      begin
{        jpg.LoadFromFile(OpenPictureDialog1.FileName);
        jpg.scale:=jshalf;
        jpg.CompressionQuality:=10;
        jpg.dibneeded;
        jpg.Compress;
        jpg.SaveToFile('c:\formagest\imagenes\'+dm.alumnosid.asstring+'.jpg');
        imagen.LoadFromFile(OpenPictureDialog1.FileName);//'c:\formagest\imagenes\'+dm.alumnosid.asstring+'.jpg');
        Bmp.Width:= Imagen.Width;
        Bmp.Height:= Imagen.Height;
        Bmp.Canvas.StretchDraw(canvas.ClipRect,bmp);// draw(0,0,Imagen.Graphic);//
        bmp.Assign(imagen.Graphic);
        Bmp.SaveToFile('c:\formagest\imagenes\'+dm.alumnosid.asstring+'.bmp'); }
        imgfotoe.Picture.LoadFromFile(OpenPictureDialog1.FileName);//'c:\formagest\imagenes\'+dm.alumnosid.asstring+'.bmp');
        bteokimagen.Visible:=true;
      end else
      begin
{          imagen.LoadFromFile(OpenPictureDialog1.FileName);
          Bmp.Width:= Imagen.Width;
          Bmp.Height:= Imagen.Height;
          Bmp.Canvas.StretchDraw(canvas.ClipRect,bmp);// draw(0,0,Imagen.Graphic);//
          bmp.Assign(imagen.Graphic);
          Bmp.SaveToFile('c:\formagest\imagenes\'+dm.alumnosid.asstring+'.bmp');}
          imgfotoe.Picture.LoadFromFile(OpenPictureDialog1.FileName);//'c:\formagest\imagenes\'+dm.alumnosid.asstring+'.bmp');
          bteokimagen.Visible:=true;
      end;
      imgfotoe.Visible:=true;
      {      dm.imagenes_alumnos.Append;
      dm.imagenes_alumnoside.Value:=dm.alumnoside.Asinteger;
      dm.imagenes_alumnosidalumno.Value:=dm.alumnosid.Asinteger;
      dm.imagenes_alumnosimagen.Assign(imagen);
      dm.imagenes_alumnos.Post;}
    finally
      imagen.Free;
    end;
  end;
end;
if (Sender as TButton).Caption ='Capturar imagen' then
begin
    if not Assigned(imgfotoe.Picture.Bitmap) then
    begin
        imgfotoe.Picture.Bitmap := TBitmap.Create;
    end
      else
      begin
        imgfotoe.Picture.Bitmap.Free;
        imgfotoe.picture.Bitmap := TBitmap.Create;
//        imgfoto.Stretch:=true;
      end;
      imgfotoe.Height:=120;
      imgfotoe.Width:=120;
      imgfotoe.Picture.Bitmap.Height := 120;
      imgfotoe.Picture.Bitmap.Width  := 120;
      PanelDC := GetDC(Panelfotoe.Handle);
      try
        BitBlt(imgfotoe.Picture.Bitmap.Canvas.Handle,
          0,0,Panelfotoe.Width, Panelfotoe.Height, PanelDC, 0,0, SRCCOPY);
      imgfotoe.Picture.Bitmap.SaveToFile('c:\controlgest\imagenes\'+dm.trabajadoresid.asstring+'.bmp');

      finally

        ReleaseDC(Handle, PanelDC);
        btEokimagen.Visible:=true;

      end;
end;

end;

procedure TEmpleados.btemodificarClick(Sender: TObject);
begin
    dm.trabajadores.Edit;
    pempleadosdatos.Enabled:=true;
    PeImagenes.Visible:=false;
    dbedit36.SetFocus;

end;

procedure TEmpleados.btenuevoClick(Sender: TObject);
var id:integer;
begin
    qaux.SQL.Clear;
    qaux.SQL.Add('select * from trabajadores');
    qaux.Open;
    if qaux.RecordCount>0 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('select max(id) from trabajadores');
      qaux.Open;
      id:=qaux.Fields[0].AsInteger;
    end else id:=1;
    dm.trabajadores.MasterSource:=nil;
    dm.trabajadores.Append;
    dm.trabajadoreside.value:=1;
    dm.trabajadoresempresa.value:=1;
    dm.trabajadoresID.Value:=id;
    dm.trabajadorespagarporbanco.Value:=0;
    pempleadosdatos.Enabled:=true;
    peimagenes.visible:=false;
    dbedit36.SetFocus;
end;

procedure TEmpleados.btEoKimagenClick(Sender: TObject);
var  imagen : TBitmap;
     imagen2: tPicture;
     archivo:TMemorystream;
     ext: string;
begin
if bteimagen.Caption ='Capturar imagen' then
begin
    imagen := TBitmap.Create;
    imagen2:= tPicture.Create;
    archivo:= tMemorystream.Create;
    try
      archivo.LoadFromFile('c:\controlgest\IMAGENES\'+dm.trabajadoresid.AsString+'.bmp');
//      archivo.loadFromFile(OpenPictureDialog1.FileName);
      ext:='.bmp';//ExtractFileExt(openpicturedialog1.FileName);
      imagen2.loadFromFile('c:\controlgest\IMAGENES\'+dm.trabajadoresid.AsString+'.bmp');
      imagee.Picture.LoadFromFile('c:\controlgest\IMAGENES\'+dm.trabajadoresid.AsString+'.bmp');
      imagee.Visible:=true;
      dm.trabajadores.edit;
//      dm.trabajadoresimagen.LoadFromFile('c:\controlgest\IMAGENES\'+dm.trabajadoresid.AsString+'.bmp');
//      dm.trabajadorestipoimagen.Value:=ext;
      dm.trabajadores.Post;

    finally
      imagen.Free;
    end;


end else
begin

    imagen := TBitmap.Create;
    imagen2:= tPicture.Create;
    archivo:= tMemorystream.Create;
    try
//      imagen.LoadFromFile('c:\FORMAGEST\IMAGENES\'+dm.alumnosid.AsString+'.bmp');
      archivo.loadFromFile(OpenPictureDialog1.FileName);
      ext:= ExtractFileExt(openpicturedialog1.FileName);
      imagen2.loadFromFile(OpenPictureDialog1.FileName);
      imgfotoe.Picture.LoadFromFile(OpenPictureDialog1.FileName);
      imgfotoe.Visible:=true;
      dm.trabajadores.edit;
//      dm.trabajadoresimagen.LoadFromFile(OpenPictureDialog1.FileName);
//      dm.trabajadorestipoimagen.Value:=ext;
      dm.trabajadores.Post;

    finally
      imagen.Free;
    end;
end;
    bteimagen.Caption:='Seleccione opción';
    panelfotoe.Visible:=false;
    imgfotoe.Visible:=false;
    btdesactivarcamara.Click;
    bteokimagen.Visible:=false;

end;
procedure TEmpleados.btesalirClick(Sender: TObject);
begin
   close;
end;

procedure TEmpleados.Button2Click(Sender: TObject);
begin

    informedb.Datasource:=dm.dsempleados;
    rtarjeta.Report.Clear;
    rtarjeta.LoadFromFile('c:\controlgest\informes\tarjeta2.fr3');
    rtarjeta.ShowReport();

end;

procedure TEmpleados.Capturar1Click(Sender: TObject);
begin
    bteimagen.Caption:='Capturar imagen';
    panelfotoe.Visible:=true;
    imgfotoe.Visible:=true;
    btactivarcamara.Click;
end;

procedure TEmpleados.Cargar1Click(Sender: TObject);
begin
   bteimagen.Caption:='Cargar imagen';
   bteimagen.Click;

end;

procedure TEmpleados.DBEdit40Exit(Sender: TObject);
begin
    dm.trabajadoresnombre.Value:=dm.trabajadoresapellidos.AsString+' '+dm.trabajadoresnombrecorto.AsString
end;

procedure TEmpleados.DBEdit41Exit(Sender: TObject);
begin
    dm.trabajadoresnombre.Value:=dm.trabajadoresapellidos.AsString+' '+dm.trabajadoresnombrecorto.AsString
end;

procedure TEmpleados.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    principal.temporizador.enabled:=true;
    dm.trabajadores.Close;
    dm.trabajadores.MasterSource:=nil;
    dm.trabajadores.Open;
    dm.qempleados.Close;
end;

procedure TEmpleados.FormShow(Sender: TObject);
begin
    principal.temporizador.enabled:=false;
    dm.trabajadores.open;
    dm.qempleados.open;

end;

procedure Templeados.SetResolution(Width, Height: integer);
var
  bi,bi2: BITMAPINFO;
begin
  SendMessage(hWndC, WM_GET_VIDEOFORMAT, sizeof(bi), Cardinal(@bi));
  bi.bmiHeader.biWidth:= Width;
  bi.bmiHeader.biHeight:= Height;

  if SendMessage(hWndC, WM_SET_VIDEOFORMAT, sizeof(bi), Cardinal(@bi)) <> 0 then
  begin
    SendMessage(hWndC, WM_DISCONNECT, 0, 0);
    SendMessage(hWndC, WM_CONNECT, 0, 0);

  end;
  SendMessage(hWndC2, WM_GET_VIDEOFORMAT, sizeof(bi2), Cardinal(@bi2));
  bi2.bmiHeader.biWidth:= Width;
  bi2.bmiHeader.biHeight:= Height;

  if SendMessage(hWndC2, WM_SET_VIDEOFORMAT, sizeof(bi2), Cardinal(@bi2)) <> 0 then
  begin
    SendMessage(hWndC2, WM_DISCONNECT, 0, 0);
    SendMessage(hWndC2, WM_CONNECT, 0, 0);

  end;

end;


procedure TEmpleados.tbuscarempleadosEnter(Sender: TObject);
begin
    tbuscarempleados.Text:='';

end;

procedure TEmpleados.tbuscarempleadosExit(Sender: TObject);
begin
    if tbuscarempleados.text<>'' then
    begin
        dm.filtro:='%'+tbuscarempleados.Text+'%';
        if todosempleados.Checked then dm.vertodos:=1 else dm.vertodos:=0;
        dm.qempleados.Close;
        dm.qempleados.open;
    end else
    begin
        dm.filtro:='';
        if todosempleados.Checked then dm.vertodos:=1 else dm.vertodos:=0;
        dm.qempleados.Close;
        dm.qempleados.open;
    end;
end;

procedure TEmpleados.todosempleadosClick(Sender: TObject);
begin
    if todosempleados.Checked=true then
    begin
        dm.vertodos:=1;
        dm.qempleados.Close;
        dm.qempleados.SQL.Clear;
        dm.qempleados.SQL.add('select * from trabajadores order by nombre asc');
        dm.qempleados.Open;
    end else
    begin
        dm.vertodos:=0;
        dm.qempleados.Close;
        dm.qempleados.SQL.Clear;
        dm.qempleados.SQL.add('select * from trabajadores where activo=1 order by nombre asc');
        dm.qempleados.Open;
    end;
end;

end.
