IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Numerisation des données (TWAIN) !!


Sujet :

Composants VCL Delphi

  1. #1
    nil
    nil est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Numerisation des données (TWAIN) !!
    bonsoir,

    voila je voudrais bien faire une application concernant l'archivage numerique des données a partir du scanner, pour faire cela j'ai installer mon scaner (hp) ensuite j'ai recuperer un composant TWAINCTRL (activX)
    mais je n'ai aucune information sur son mode d'emploi (son fonctionnement).
    j'ai trouvé egalement sur le net un autre composant le TWAIN (http://delphipage.free.fr/twain.html) mais j'ai du mal a istaller ce composant sur delphi7 et delphi6.

    si vous avez la moindre idee, ou bien une autre methode pour faire l'archivage numerique n'hesitez pas a me la filer merci d'avance.

    NB:le lien qui existe dans developpez.com n'existe pas ca concerne le composant twainy qui fait le meme travail que twain (archivage numerique) voici le lien http://atlantis.developpez.com/twain/.

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut


    Trouvé ceci, pas essayé :
    http://vcl.vclxx.org/DELPHI/D32FREE/TWAINY.ZIP

    pour remplacer le lien invalide dans le tutot d'Atlantis.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Nil
    bonjour
    personnellement j'utilise DelphiTwain
    http://delphitwain.sourceforge.net
    un petit bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    procedure Tmdi.scanner1Click(Sender: TObject);
    var
    x,y:extended;
    begin
    if DelphiTwain1.LoadLibrary then begin
    DelphiTwain1.LoadSourceManager();
        if scanner <> -1 then
          DelphiTwain1.Source[scanner].Loaded := TRUE;
            DelphiTwain1.Source[scanner].SetIPixelType(tbdBw);
    DelphiTwain1.Source[scanner].GetIPhysicalHeight(y,rcGet);
           DelphiTwain1.Source[scanner].GetIPhysicalWidth(x,rcGet);
            DelphiTwain1.Source[scanner].SetIBitDepth(1);
            DelphiTwain1.Source[scanner].SetIXResolution(300);
          DelphiTwain1.Source[scanner].SetIYResolution(300);
            DelphiTwain1.Source[scanner].SetImagelayoutFrame(0,0,x,y);
           DelphiTwain1.Source[scanner].TransferMode :=ttmMemory;
            DelphiTwain1.Source[scanner].ShowUI:=false;
            DelphiTwain1.Source[scanner].Enabled := TRUE;
     
      end
      else ShowMessage('T''as pas de bol mon grand!!');
    end;
     
    procedure Tmdi.DelphiTwain1TwainAcquire(Sender: TObject;
      const Index: Integer; Image: TBitmap; var Cancel: Boolean);
    var
    g:trect;
    a,b:integer;
    dm:TZPrinter;
    init_res:tpoint;
    begin
    dm:=TZPrinter.Create;
          with dm do try
            Orientation:= zoPortrait;
            init_res:=resolution;;
           Resolution:= Point(720,720);
            a:=Pagewidth;
            b:=Pageheight;
            g:=rect(0, 0,a,b);
            Title := 'Photocopie';
            StartDoc;
            try
              Canvas.StretchDraw((g),Image);
              EndPage;
              EndDoc;
              Resolution:= init_res;
            except
              AbortDoc;
              raise;
            end;
          finally
            Free;
          end;
    end;
    la première procédure c'est quand tu appuies sur ton bouton ou ton menu etc.
    la seconde c'est l'évènement "ontwainacquire"
    il y a sur le site un fichier d'aide très bien fait
    et c'est en open source
    tu peux sauter toute la partie destinée au tzpinter
    moi je me sert de ce compo pour régler la définition de l'imprimante
    voilu

  4. #4
    nil
    nil est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    merci infniment, nomutilisateur c vraiment ce que je voulais faire !

  5. #5
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    J'utilise actuellement ce composant dans une application Delphi. Il fonctionne parfaitement bien avec mon scanner. Cependant j'aurais souhaité savoir si vous connaitriez le(s) paramètre(s) à modifier ou comment s'y prendre pour pouvoir scanner plusieurs documents à la suite (car je possède un scanner à chargement de feuilles). Ceci est en effet possible avec l'application livrée avec mon scanner mais je n'ai pas trouvé au niveau du composant Twain.

    merci d'avance pour votre aide ou votre lecture !!

  6. #6
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut DelphiTwain en core boggé
    Bonjour.

    Attention. Le composant TDelphiTwain semble encore boggé.
    Il s'ajit de la propriété Language. Sur un machine avec WINDOWS 2000 Pro, cette propriété est tout simplement inopérente. Sur une autre machine que ce soit sous WINDOWS 98 ou XP, la simple pose du composant sur une fiche plante avec le message "erreur de vérification d'étendue". J'ai tenté de mettre des sécurités, rien à faire.
    Finallement, j'ai supprimé cette propriété et le composant fonctionne parfaitement.

    Pour ce qui est de scanner plusieurs images par lot comme certains programmes, j'y travaille justement depuis quelque temps pour un de mes programme de traitement d'image. Dès que ce sera fait je communiquerais le source.

  7. #7
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup ! et bon courage pour le développement !
    Sinon sur le site :
    http://delphitwain.sourceforge.net/
    dans : Full twain features, il est possible de numériser plusieurs images à la suite. Mais en effet, lors de la sauvegarde il n'y a pas création d'une image globale les regroupants toutes.

  8. #8
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut TDelphiTawain modification
    Bon! J'ai cherché. Suprimmer la propriété Language est une erreur. Seul la prévisualisation fonctionne.
    Il semble que sur certaine versions de WINDOWS (patch pas à jour ??)
    le tlUserLocale dans le constructeur de l'objetTTWainIdentity.

    Je l'ai donc forcé à tlFrench.

    Pour pouvoir faire plusieurs acquisitions en évitant que le pilote du scanner TWain32 ne se ferme, il faut ajouter une propriété et sa gestion.

    Ca marche Nickel.
    Voici les codes à modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    // Modification de TDelphiTwain
     
    implementation
     
    {Units used bellow}
    uses
      Messages;
     
    Var
       FCloseAfterAquir : Boolean;
     
     
     
    { TTwainIdentity object implementation }
     
    {Object being created}
    {$IFNDEF DONTUSEVCL} constructor TTwainIdentity.Create(AOwner: TComponent);
    {$ELSE} constructor TTwainIdentity.Create(AOwner: TObject); {$ENDIF}
    begin
      {Allows ancestor to work}
      inherited Create;
     
      {Set initial properties}
      FillChar(Structure, sizeof(Structure), #0);
      //Language := tlUserLocale;
      Language := tlFrench;
      CountryCode := 1;
      MajorVersion := 1;
      VersionInfo := 'Application name';
      Structure.ProtocolMajor := TWON_PROTOCOLMAJOR;
      Structure.ProtocolMinor := TWON_PROTOCOLMINOR;
      Groups := [tgImage, tgControl];
      Manufacturer := 'Application manufacturer';
      ProductFamily := 'App product family';
      ProductName := 'App product name';
     
      fOwner := AOwner; {Copy owner pointer}
    end;
     
     
     
    // Objet TDelphiTwain à modifier ainsi
     
    protected
        {Returns the default source}
        function GetDefaultSource: Integer;
        {Creates the virtual window}
        procedure CreateVirtualWindow();
        {Clears the list of sources}
        procedure ClearDeviceList();
        Procedure SetCloseAfterAquir(Value : Boolean);
     
     
    private
        {Event pointer holders}
        fOnSourceDisable: TOnSourceNotify;
        fOnAcquireCancel: TOnSourceNotify;
        fOnTwainAcquire: TOnTwainAcquire;
        fOnSourceSetupFileXfer: TOnSourceNotify;
        fOnSourceFileTransfer: TOnSourceFileTransfer;
        fOnAcquireError: TOnTwainError;
        fOnAcquireProgress: TOnAcquireProgress;
        FCloseAquir : Boolean;
     
     
    published
        {Default transfer mode to be used with sources}
        property CloseAfterAquir : Boolean read FCloseAquir write SetCloseAfterAquir;
     
    // Ajouter la procedure
    Procedure TDelphiTwain.SetCloseAfterAquir(Value : Boolean);
    begin
       FCloseAquir := Value;
       FCloseAfterAquir := Value;
    end;
     
     
     
    // Modifier le constructeur donner une valeur par défaut à FCloseAfterAquir 
    {Object being created}
    constructor TDelphiTwain.Create{$IFNDEF DONTUSEVCL}(AOwner: TComponent){$ENDIF};
    begin
      {Let the ancestor class also handle the call}
      inherited;
     
      {Create source list}
      DeviceList := TPointerList.Create;
      {Clear variables}
      fSourcesLoaded := 0;
      fHandle := 0;
      @fTwainProc := nil;
      SelectDialogDisplayed := FALSE;
      fSourceManagerLoaded := FALSE;
      fHasEnumerated := FALSE;
      fTransferMode := ttmMemory;
      {Creates the virtual window which will intercept messages}
      {from Twain}
      CreateVirtualWindow();
      {Creates the object to allow the user to set the application}
      {information to inform twain source manager and sources}
      fInfo := TTwainIdentity.Create(Self);
      AppInfo := @fInfo.Structure;
      FCloseAfterAquir := True;
    end;
     
     
     
     
    // Modifier la procedure TransfertImage à la fin
    {Method to transfer the images}
    procedure TTwainSource.TransferImages();
    var
      {To test if the image transfer is done}
      Cancel, Done   : Boolean;
      {Return code from Twain method}
      rc     : TW_UINT16;
      {Handle to the native Device independent Image (DIB)}
      hNative: TW_UINT32;
      {Pending transfers structure}
      PendingXfers: TW_PENDINGXFERS;
      {File transfer info}
      Info: TW_SETUPFILEXFER;
      {Image handle and pointer}
      ImageHandle: HBitmap;
      PixelType  : TW_INT16;
    begin
      {Set the transfer mode}
      .
      .
      .
      .
      .
        {Disable source}
      //Enabled := False;
      Enabled := Not FCloseAfterAquir;
    end;
    Merci de vérifier de votre coté et de me tenir au courant.

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Dans l'appli exemple, on peut scanner avec un chargeur, une liste d'images est constituée en mémoire, il suffit de la parcourir et d'enregistrer les images une par une.
    La liste est remplie sur l'évènement OnTwainAcquire

  10. #10
    gmc
    gmc est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 40
    Points : 33
    Points
    33
    Par défaut
    Oui je tenais à préciser que j'ai trouvé quelque chose qu'il faut faire pour continuer la numérisation sans que le scanner (à chargement de feuille) s'arrete au bout de la première page :
    Mettre à true la variable "cancel' utilisée en paramètre dans la procédure TwainTwainAcquire ! c'est tout bête mais ca marche !! bonne utilisation

  11. #11
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut
    Salut tous le monde!

    à tous qui ont utilisé ou installer le composant DelphiTwain.
    S'ils vous plait comment je pouvais installer ce composant?
    J'ai trouvais dans le dossier contenant DelphiTwain que des fichier d'extension .Pas , ce qui signifie qu'il n'ya pas un composant visuel.

    Merci d'avance!

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 5
    Points
    5

  13. #13
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Bonjour a tous,
    j'utilise également Delphi Twain. J'aimerai créer un aperçu de ce qui se trouve dans le Scanner et après sélectionner la zone à scanner (TRect?) pour éviter de scanner tout le document... Enfaite comme dans toute sles interfaces de scannage (hp, canon, ...). Mais gérer cela depuis mon application sans "User interface".......
    Je pense que pour l'aperçu : Mettre résolution très basse, mais peut-être il exsiste déjà une fonction qui fais cela?
    Pour la sélection de zone je n'ai rien trouver... Qu'elle est la fonction qui me permetrai de lui dire de scanner de Left<->Right Top<->Bottom?? Merci d'avance
    PS : Quelqu'un sait comment installer se composant sur Delphi 2006?? Car je ne peux pas installer de packages .pas ou je ne sais pa comment...

  14. #14
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Personne ne voit comment faire?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  2. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  3. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  4. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo