Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Componentes lectores DigitalPersona

Saludos

Para aquel que lo recuerde, en este tema habia solicitado un poco de ayuda referente a los lectores de huella digital. Bueno, al fin y al cabo me he decidido por un lector de los U.Are.U (DigitalPersona)

En concreto el que cayo en mis manos es un DigitalPersona U.are.U 4000B

Para lograr comunicarme con el desde Delphi hago uso de SDK "DigitalPersona One Touch for Windows"

Cuestion, es andar metiendose con controles ActiveX, OLE, Variants.. ese tipo de cosas que cuando uno esta programando y apreta . o control + espacio y no sale nada, son todas llamadas a metodos "misteriosos"

En fin, luego de estudiar un poco, decidi crearme un componente wrapper para poder manejar facilmente el lector. Creo que esta lejos de ser perfecto, asi que bienvenidas sean las criticas/sugerencias. Al parecer cumple bien, será cuestion de probarlo en produccion

Lo tengo alojado en un repositorio en GitLab. Esta liberado bajo la licencia BSD (la de 3 cláusulas). Asi que basicamente pueden usarlo a su antojo como si fuera suyo

El funcionamiento es bastante similar al GRFingerPrint que publico Al Gonzalez hace algun tiempo. Es decir, este componente lo unico que hace es facilitarle la vida al programador delphi; el verdadero trabajo lo hace el SDK. De hecho es requisito que se importen las librerias ActiveX de DigitalPersona (estan en el repo para que la instalacion sea click and run)

Trate de hacerlo mas sencillo posible, asi que minimize todo a dos componentes:

1. TDPFingerPrintEnroll --> Usado para registrar huellas digitales, mediante el tipico proceso de 4 lecturas de un dedo. Hace uso del control ActiveX que se provee en el SDK. Funciona estilo "TxxDialog", es decir, tiene su metodo Execute

Para los Delphinianos: La verdad no se me ocurrio mejor idea que crear una instancia del control ActiveX y luego meterle como Parent un TForm. El form se visualiza con ShowModal al llamar a Execute y se proveen 2 botones (mrOk y mrCancel). Sencillisimo

Hay 3 eventos posibles:
- AfterExecute: Creo que su nombre lo dice todo. Basicamente se dispara cuando se cierra el TForm que comentaba antes. Provee bastante informacion util, como por ejemplo cada dedo con su huella capturada. Para ello cree unos tipos de datos para identificar facilmente a cada dedo (usando enumerativos y set, y helpers para que sea aun mas facil)

- OnFigerEnroll: Se dispara al registrar una nueva huella. Devuelve el dedo en cuestion y el template generado en string

- OnFingerPrintDeleted: Se dispara al eliminar una de las huellas registradas. Para eliminar una huella registrada en el control ActiveX, se debe hacer click sobre uno de los dedos que estan como registrados (color verde).

Solo publica una propiedad: MaxFingerPrintsAllowed, la cual indica la cantidad maxima de huellas que se puede registrar

2. TDPFingerPrintReader --> Representa nuestro lector, en estado de "capturando". Es decir, si esta activo, cada vez que se apoye el dedo en el lector, nuestra aplicacion en cuestion se entera a traves de los eventos.

Creo que el mas importante de los eventos de este componente es el OnCaptured, que se va a disparar cuando se capture una lectura exitosa (de calidad optima para verificacion). Este evento es importante porque nos provee una referencia a una interface de tipo IFingerComparer

IFingerComparer es una interface que viene "cargada" con el template de la huella capturada y lista para comparar contra las que tenemos almacenadas en nuestro soporte externo (en el 99.99% de los casos una BD :))

Para ello, emplearemos el metodo CompareTo

Asi de sencillo:

Verificacion:

Código Delphi [-]
procedure TFMain.DPFingerPrintReader1Captured(Reader: TDPFingerPrintReader; FingerComparer: IFingerComparer);
begin
  while not XXX.Eof do
  begin
    if FingerComparer.CompareTo(XXX.FieldByName('Huella').AsString) then
    begin
      ShowMessage('Encontrado!');
      Break;
    end;

    XXX.Next;
  end;
end;

Registracion:

Código Delphi [-]
procedure TFMain.DPFingerPrintEnroll1AfterExecute(Sender: TDPFingerPrintEnroll; 
const FingerPrints: TFingerPrints;  EnrolledFingers: TFingerSet; const Result: Boolean);
var
  LFinger: TFinger;
  FingerPrint: string;
begin
  XXX.SQL.Text := ' INSERT INTO Huellas (IdPersona, Dedo, Huella) VALUES (:IdPersona, :Dedo, :Huella) ';
  XXX.ParamByName('IdPersona').DataType:= ftInteger;
  XXX.ParamByName('Dedo').DataType:= ftInteger;
  XXX.ParamByName('Huella').DataType:= ftString;
  XXX.Prepare;

  for LFinger := Low(TFinger) to High(TFinger) do
  begin
    if not LFinger in EnrolledFingers then
      Continue;
  
    XXX.ParamByName('IdPersona').AsInteger := AlgunId;
    XXX.ParamByName('Dedo').AsInteger := LFinger;
    XXX.ParamByName('Huella').AsString:= Huella;
    XXX.Execute;
  end;
end;

Instalacion: https://gitlab.com/ortuagustin/TDPFi...ster/README.md

Proximamente en Español, pero deberia entenderse ya que el propio Delphi esta en Ingles.

PD: Si bien es interesante el tema de crear componentes en Delphi, esta es mi primera experiencia. Lo digo para que los mas veteranos no me maten :D

Última edición por AgustinOrtu fecha: 02-09-2015 a las 06:17:41.
Responder Con Cita
  #2  
Antiguo 02-09-2015
Avatar de Combat-F2D
Combat-F2D Combat-F2D is offline
Miembro
 
Registrado: may 2003
Ubicación: Toletum
Posts: 454
Poder: 22
Combat-F2D Va por buen camino
muchisimas gracia spor tu aprte; super interesante
__________________
online
Responder Con Cita
  #3  
Antiguo 02-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #4  
Antiguo 02-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Gracias por compartirlo Agustín

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 02-09-2015
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.237
Poder: 20
ElKurgan Va camino a la fama
Gracias por compartir

Saludos
Responder Con Cita
  #6  
Antiguo 03-09-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
PD: Si bien es interesante el tema de crear componentes en Delphi, esta es mi primera experiencia. Lo digo para que los mas veteranos no me maten
¡Jo! Traquilo, este colega es pacífico.

Me da gusto saber que has creado esta solución, Agustín. Sólo felicitarte por atreverte a hacer tu primer componente en Delphi.

El mundo de las bibliotecas es fascinante, aunque sólo si te matan reconocen tus esfuerzos.
Responder Con Cita
  #7  
Antiguo 08-09-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aunque vayas a usar un lector digital, tu pregunta realmente no está relacionada con ese tema. Por favor otro hilo para exponer tu duda.

// Saludos
Responder Con Cita
  #8  
Antiguo 13-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Gracias a todos por los comentarios

Al, acá en Argentina el "no me maten" viene a decir algo así como "sed blandos conmigo" . Al escribir a veces me dejo llevar y me olvido de esos pequeños detalles

En fin, quería comentarles que el componente lo pude instalar en 10 Seattle sin modificarle nada y funciona muy bien.
Responder Con Cita
  #9  
Antiguo 15-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pues bien, resulta que ahora tengo problemas

No logro encontrar el motivo, pero basicamente cualquier evento tanto del componente como el de los controles ActiveX se comen las excepciones

es decir, hacer algo como esto:

Código Delphi [-]
  raise Exception.Create('Una excepcion');

Y no pasa nada

La unica forma de "atraparla" es con Run (F9). Es decir, desde el IDE y con el depurador si veo la excepcion. Sino no. Trate de seguirla y termina en codigo ASM del que poco entiendo. Probe las siguiente variantes:

Código Delphi [-]
  try
    { generar excepcion }
  except
    raise;
  end;


Código Delphi [-]
  try
    { generar excepcion }
  except
    RaiseLastOsError;
  end;

Y fracase estripotosamente

Esto sucede en una aplicacion con solo el componente que diseñe yo o bien su contraparte COM. Es decir, la "culpa" esta ahi; pero no tengo ningun manejador OnApplicationException o similar. Tampoco hay un bloque que coma excepciones, o al menos no lo he visto (pero eso deberia ser rastreable usando el depurador). Es mas, si coloco un componente ApplicationEvents, en su evento OnException nunca llega la excepcion en cuestion

Creo que hay algo del modelo COM que se me escapa.

A ver si alguien puede arrojar un poco de luz

Edito:

Aun mas confundido. Esto hace aparecer la excepcion pero...

Código Delphi [-]
  try
    { generar excepcion }
  except
    on E: Exception do
    begin
      Result := False;
      ShowException(E, ExceptAddr);
    end;
  end;

...no me gusta para NADA, aunque es MUCHO peor no poder ver las excepciones

Última edición por AgustinOrtu fecha: 15-09-2015 a las 03:07:24.
Responder Con Cita
  #10  
Antiguo 26-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por vinicc Ver Mensaje
Gracias
Crea un hilo para tu pregunta. gracias.
Responder Con Cita
  #11  
Antiguo 24-08-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.494
Poder: 21
MAXIUM Va camino a la fama
¿Actualizaciones para Delphi 10?

[dcc32 Error] Unit1.pas(13): E2003 Undeclared identifier: 'TFingerPrints'
[dcc32 Error] Unit1.pas(13): E2003 Undeclared identifier: 'TFingerSet'
[dcc32 Error] Unit1.pas(29): E2005 'TFingerPrints' is not a type identifier
[dcc32 Error] Unit1.pas(29): E2005 'TFingerSet' is not a type identifier
Responder Con Cita
  #12  
Antiguo 24-08-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.494
Poder: 21
MAXIUM Va camino a la fama
Responder Con Cita
  #13  
Antiguo 24-08-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.494
Poder: 21
MAXIUM Va camino a la fama
Responder Con Cita
  #14  
Antiguo 24-08-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿El fabricante no tiene nada?
Responder Con Cita
  #15  
Antiguo 24-08-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.494
Poder: 21
MAXIUM Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿El fabricante no tiene nada?
Creo que me queda trabajar con los dll y la guía SDK del fabricante



Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda Lector de Huellas DigitalPersona KingOfDragons Varios 34 12-11-2018 08:48:32
Lectores Biometricos Zk Y Uau hackpro Varios 7 26-02-2014 23:43:24
Ayuda con lectores de barras dape Varios 6 30-04-2010 13:59:11
DigitalPersona One Touch SDK mmusashi OOP 2 23-02-2010 05:33:23
Para los lectores del club eduarcol Humor 6 17-05-2005 19:11:16


La franja horaria es GMT +2. Ahora son las 00:45:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi