Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Problema con DelphiTwain

Hola a tod@s.

Tengo un formulario con un componente DelphiTwain para escanear que llama a otro formulario con otro componente DelphiTwain para escanear otros documentos. El problema es que cuando se escanea desde uno de ellos el escaneo desde el otro formulario no funciona, se sale después de seleccionar el dispositivo que quieres utilizar para escanear. Es como si se quedara algo en memoria al utilizarlo desde un formulario que luego estorbara en el otro.

Una cosa que hago siempre por si acaso es un UnloadLibrary para volver a cargarlas de nuevo.

¿Alguien me da alguna idea?

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me ha parecido entender que tienes el componente en cada uno de los formularios, ¿escaneas desde ambos?, en caso contrario, quita el que está en el formulario que no usas, puede que se estén "estorbando" mútuamente
Responder Con Cita
  #3  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Ahítevisto.... voy a probar.
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Bueno... a ver....

Estoy pensando que a los dos formularios se puede entrar de manera independiente o uno desde el otro. Podría poner un componente común en algún lado pero ¿no se embrollará mucho el tema para manejar los eventos desde uno u otro formulario?
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Vale. Lo veo...

Voy a crear una unidad común que contenga el componente y llamarla desde donde me haga falta con una función que me devuelva la imagen o lo que sea.

Gracias y un saludo casimiro.
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Vale, ya tengo la imagen en la unidad nueva que he creado con el componente que va a ser común del DelphiTwain. Ahora... ¿cómo puedo hacer para recoger la imagen que se captura desde el evento OnTwainAdquire desde el formulario que lo llama?.

Me explico... ¿cómo lo haría para hacer la llamada desde un formulario al que contiene el componente DelphiTwain y recoger la imagen escaneada?.

Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y por qué no tienes mejor sólo un formulario donde se escanea, almacenas, etc.?.
Desde otros formularios podrás consultar lo escaneado/almacenado, abrir ese form de escaner, etc.

Edito: yo lo que hago es tener el módulo de escaner en un TFrame que 'incrusto' en el formulario que me haga falta, así estoy siempre tratando con un sólo módulo de escaner.
Responder Con Cita
  #8  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
yo lo que hago es tener el módulo de escaner en un TFrame que 'incrusto' en el formulario que me haga falta, así estoy siempre tratando con un sólo módulo de escaner.
No he usado nunca el TFrame, ¿qué diferencias tiene con un formulario normal? ¿cómo lo "incrustras" en un formulario? ¿qué tienes en el TFrame, un botón que ponga "Escanear"? ¿quien mató a Laura Palmer?
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un TFrame es un formulario "especial", que permite ser incrustado en cualquier otro formulario. Si necesitas hacer algún cambio en el frame, esos cambios se "propagan" a todos los formularios que tengan incrustado ese frame, ya que realmente es el mismo para todos.
Su uso es simple, lo añades al proyecto normalmente: file->new->delphi files->frame.
Luego, cuando quieres incrustarlo en un formulario: añades el componentes "frame" (está en la paleta "standar") y se abre una ventana de diálogo con todos los frames que tienes, seleccionas el que quieras y... listo, ya tienes el frame incrustado en el formulario.
La ventaja principal es que si tienes que hacer cualquier cambio en el módulo de escaner (en este caso) sólo tendrás que hacerlo en un sitio y todos los demás formularios que lo tengan incrustado verán los cambios.
Es como un formulario heredado, tan sólo que se "incrusta" en otro formulario.
Responder Con Cita
  #10  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Vale, hasta ahí lo entiendo, pero.... supongamos que yo creo el frame que llama de forma automática al driver del escaner y captura la imagen, ¿cómo la uso desde el formulario que lo llama?
__________________
Be water my friend.
Responder Con Cita
  #11  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues anteponiendo el nombre del formulario frame, formularioframe.componentequesea.propiedadquequieras
Haz una prueba sencilla, crea un nuevo proyecto con un formulario y luego crea un frame.
Seguidamente vuelve al formulario y le añades el componente frame (paleta 'standar'), verás que sencillo.
Responder Con Cita
  #12  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Oido cocina.... voy
__________________
Be water my friend.
Responder Con Cita
  #13  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Vale. Ya tengo un formulario con un frame incrustado en el que dandole a un botón llama al driver del escaner y escanea la imagen. El problema está en ¿cómo se entera el formulario original de que el escaner ha capturado la imagen para poder trabajar con ella? porque en el formulario principal cuando se pica el botón no se espera a que el driver se cierre y ahí no puede ser porque continua con la ejecución del código y en ese momento no hay imagen hasta que no salte el evento OnAdquire.

Edito: ¿O hay alguna forma de parar el código del formulario principal en espera de que se cierre el driver de la impresora?, es decir, como si fuera llamar al TFrame en modo Modal.
__________________
Be water my friend.

Última edición por newtron fecha: 14-01-2012 a las 18:59:47.
Responder Con Cita
  #14  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que me he perdido, a ver, me explico: tengo un formulario donde se escanea y se guarda lo escaneado en la base de datos (o en un fichero externo, a elegir). Todo lo que concierne al escaner se hace ahí. Es en ese formulario donde está el componente twain, donde se escanea.
Si lo llamo desde otro formulario, lo que hago es llamar a ese otro formulario donde se trabaja con el escaner.
¿Cómo se entera el formulario de que el otro ha terminado de escanear?, pues porque lo has abierto con un showmodal y ya ha terminado, se ha cerrado y ha vuelto el control al formulario que llamó al del escaner.
Responder Con Cita
  #15  
Antiguo 14-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Fracaso absoluto

A ver.

He creado el TFrame con el componente DelphiTwain y lo he incrustado dentro del formulario principal, me he percatado de que los eventos asociados al componente se pueden declarar en cada uno de los formularios y es lo que he hecho. El TFrame lo único que tiene es un botón que llama al driver del escaner. Todo funciona perfectamente pero cuando he hecho la misma operación en el formulario al que llama posteriormente me pasa lo mismo, una vez que selecciona el escaner de la lista de dispositivos se sale sin hacer nada.

Si llamo al escaner desde uno o desde otro funciona correctamente pero si escaneo en el primer formulario, llamo al segundo formulario y vuelvo a llamar al escaner ya no va.

Edito: como plan B se me ha ocurrido instalar otro componente twain para el otro formulario, ¿conoces algún otro?
__________________
Be water my friend.

Última edición por newtron fecha: 14-01-2012 a las 19:58:26.
Responder Con Cita
  #16  
Antiguo 14-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
...cuando he hecho la misma operación en el formulario al que llama posteriormente me pasa lo mismo, una vez que selecciona el escaner de la lista de dispositivos se sale sin hacer nada.
Si llamo al escaner desde uno o desde otro funciona correctamente pero si escaneo en el primer formulario, llamo al segundo formulario y vuelvo a llamar al escaner ya no va.
No sé si te entiendo pero no te comprendo, o es que te comprendo pero no te entiendo. Te explico como lo tengo hecho yo, puede que tú estés intentando conseguir algo distinto.

Yo tengo un formulario normal y corriente donde se escanea y se guarda lo escaneado (UFescanear). No hay ningún otro formulario en el programa donde se pueda escanear. Es en ese único formulario donde está el único componente twain.

Luego tengo un formulario (realmente es un frame) que se encarga de administrar las imágenes escaneadas, verlas, borrarlas, etc. (marcoDocumentosEscaner) En este formulario (frame) hay un botón "Escaner", que lo único que hace ese botón es abrir el formulario que indiqué antes (UFescanear), el que se dedica a escanear.

Cuando UFescanear ha terminado de escanear algo, lo cierro y vuelvo a estar en marcoDocumentosEscaner, refresco el dataset de documentos escaneados para que actualice el dbgrid y el usuario pueda pinchar en la fila donde ya aparece el nuevo documento escaneado. Donde además, como he dicho antes, también podrá verlo, ampliarlo, borrarlo, etc. Resumiendo, en marcoDocumentosEscaner se administra (ver, borrar, etc.) lo escaneado en UFescanear (que sólo escanea).

¿Por qué uso un marco en lugar de otro formulario 'normal'?, pues porque esa ventana (formulario) de administrar lo escaneado se muestra en diversas partes del programa, y entonces lo que hago es pegar/adjuntar/incrustar el marco en el formulario que lo necesito.

Y eso es todo, amigos
Y déjate de chapuzas de poner otro componente twain , seguro que lo que quieres hacer tiene solución 'lógica'
Responder Con Cita
  #17  
Antiguo 14-01-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Por si aporto algo, yo tengo un formulario con 10 fichas en las que se pueden escanear un maximo de 10 historias por paciente y utilizo un único componente Twain y guardo las imágenes así:
(es un resumen).
Código Delphi [-]
procedure TfrClientes.TwainTwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
begin
  Case nH of
  1bImage1.Picture.Assign(Image);
  2bImage2.Picture.Assign(Image);
  3bImage3.Picture.Assign(Image);
  4bImage4.Picture.Assign(Image);
  5bImage5.Picture.Assign(Image);
  end;

  Cancel := TRUE;  {Only want one image}
end;

procedure TfrClientes.SpeedButton1Click(Sender: TObject);
begin
nh:=1;
  {It is always recommended to load library dynamically, never forcing}
  {final user to have twain installed}
  if Twain.LoadLibrary then
  begin

    {Load source manager}
    Twain.SourceManagerLoaded := TRUE;
    {Allow user to select source}
    SelectedSource := Twain.SelectSource;
    if SelectedSource <> -1 then
    begin
      {Load source, select transference method and enable (display interface)}
      Twain.Source[SelectedSource].Loaded := TRUE;
      Twain.Source[SelectedSource].TransferMode := ttmMemory;
      Twain.Source[SelectedSource].Enabled := TRUE;
    end {if SelectedSource <> -1}

  end
  else
    showmessage('Twain is not installed.');
end;
.....
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #18  
Antiguo 15-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Gracias Marcos por tu aporte.

Casimiro, el problema es que yo lo que he metido en el TFrame es precisamente el componente DelphiTwain, y claro, en cada formulario en el que incrustro el mismo hace una copia del componente por lo que se comporta exactamente igual que como lo tenía originalmente con un componente DelphiTwain en cada formulario.

Voy a intentar darle la vuelta y crear un formulario modal que albergue el componente DelphiTwain para llamarlo desde distintos formularios pasandole la acción a realizar.

Ya os cuento.
__________________
Be water my friend.
Responder Con Cita
  #19  
Antiguo 15-01-2012
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Vale.

Ya he preparado un formulario modal que contiene el componente DelphiTwain y lo puedo llamar desde cualquier otro formulario sin problemas. Ahora me queda un pequeño detalle, a mi me gustaría que desde el formulario desde el que se pica en el botón de escanear de forma automática llamara al formulario que tiene el componente y directamente se abriera el driver del escaner. Si lo pongo de esa manera la pantalla del driver del escaner se queda oculta, sin embargo si pongo un botón en el formulario que tiene el componente y pico en él si que se abre de forma normal. ¿Alguna idea?.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #20  
Antiguo 15-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
el problema es que yo lo que he metido en el TFrame es precisamente el componente DelphiTwain, y claro, en cada formulario en el que incrustro el mismo hace una copia del componente por lo que se comporta exactamente igual que como lo tenía originalmente con un componente DelphiTwain en cada formulario..
Bueno, de esa forma también está bien, incluso mejor que la forma en que lo hago yo, ten en cuenta que no pone un twain en cada formulario, sino que es el mismo twain visto desde distinto sitio (form)

Cita:
Empezado por newtron Ver Mensaje
Vale. Ya he preparado un formulario modal que contiene el componente DelphiTwain y lo puedo llamar desde cualquier otro formulario sin problemas. Ahora me queda un pequeño detalle, a mi me gustaría que desde el formulario desde el que se pica en el botón de escanear de forma automática llamara al formulario que tiene el componente y directamente se abriera el driver del escaner. Si lo pongo de esa manera la pantalla del driver del escaner se queda oculta, sin embargo si pongo un botón en el formulario que tiene el componente y pico en él si que se abre de forma normal. ¿Alguna idea?.
Gracias y un saludo
Debe ser algún comportamiento derivado de que tú usas mdi, supongo, en sdi no ocurre eso
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
Instalar DelphiTwain en D7 marcoszorrilla Varios 6 26-12-2011 23:06:59
DelphiTWAIN y Bitmap:S mrnovice Gráficos 13 03-10-2008 23:43:10
DelphiTwain y SetImageLayoutFrame() mrnovice OOP 1 07-08-2008 14:36:09
DelphiTwain: Accesar propiedades de Scanner Roberto Angulo Gráficos 5 31-07-2008 21:38:17
Cancelar con DelphiTwain mrnovice OOP 3 07-07-2008 18:34:51


La franja horaria es GMT +2. Ahora son las 23:19:10.


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