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

C++Builder Discussion :

Imprimer avec l'assistant Photograhie Windows


Sujet :

C++Builder

  1. #21
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    L'activeX c'est l'enregistrement de wiaaut.dll par la commande dos RegSvr32. C'est la technique utilisée pour déclarer un ActiveX dans le système. Je voulais dire que je ne l'ai pas fait. Je vouslias voir avant comment le système se comporte sans.

    Par contre, voici le code Pascal transcrit en C++ et ça fonctionne sous Vista en natif (sans ActiveX):
    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
     
    #include <ComObj.hpp>
     
      Variant wzd;
      Variant vct;
     
      wzd = CreateOleObject("WIA.CommonDialog");
      vct = CreateOleObject("WIA.Vector");
     
      vct.Exec(Procedure("Add") << "C:\\Comic\\_P3dO Test\\A12_AS12-46-6826.jpeg");
      vct.Exec(Procedure("Add") << "C:\\Comic\\_P3dO Test\\A12_AS12-47-6899.jpeg");
     
      wzd.Exec(Procedure("ShowPhotoPrintingWizard") << vct);
     
      wzd = Unassigned;
      vct = Unassigned;
    Sinon oui je suis très motivé car j'ai un logiciel de traitement d'image mais l'impression n'est pas terrible, ceci me permettra de faire patienter mes clients en attendant que je fasse -peut-être un jour - mon propre wizard.

  2. #22
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,
    Citation Envoyé par yarp Voir le message
    L'activeX c'est l'enregistrement de wiaaut.dll par la commande dos RegSvr32. C'est la technique utilisée pour déclarer un ActiveX dans le système. Je voulais dire que je ne l'ai pas fait. Je vouslias voir avant comment le système se comporte sans.

    Par contre, voici le code Pascal transcrit en C++ et ça fonctionne sous Vista en natif (sans ActiveX):
    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
     
    #include <ComObj.hpp>
     
      Variant wzd;
      Variant vct;
     
      wzd = CreateOleObject("WIA.CommonDialog");
      vct = CreateOleObject("WIA.Vector");
     
      vct.Exec(Procedure("Add") << "C:\\Comic\\_P3dO Test\\A12_AS12-46-6826.jpeg");
      vct.Exec(Procedure("Add") << "C:\\Comic\\_P3dO Test\\A12_AS12-47-6899.jpeg");
     
      wzd.Exec(Procedure("ShowPhotoPrintingWizard") << vct);
     
      wzd = Unassigned;
      vct = Unassigned;
    Félicitations! J'aurai encore pu chercher pendant des heures ... La méthode Exec ... ralala. Si sous vista ça fonctionne, alors c'est cool, car justement, c'était un des tests à faire (donc merci encore).

    Par contre, c'est con qu'il ne sélectionne pas les 2 images par défaut (simulation du bouton "Sélectionner tout".). Oui oui, je chipote

    Bon, je crois que ça vaut une entrée dans la FAQ

  3. #23
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    J'ai trouvé la solutions dans les examples CBuilder. Il y avait un exemple avec Word.
    Le gros avantage de IDispatch c'est que ça fonctionne avec pleins de trucs.

    Par contre effectivement au niveau customization (comme les image sélectionnées) cela dépends de l'interface. Il faut regarder dans le MSDN ce qu'il y a. Et je ne me rappelle pas avoir vu grand chose. Sans doute des tucs non documentés.

  4. #24
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par yarp Voir le message
    J'ai trouvé la solutions dans les examples CBuilder. Il y avait un exemple avec Word.
    Le gros avantage de IDispatch c'est que ça fonctionne avec pleins de trucs.
    OK, ba je crois que la on en a une belle démontration.

    Citation Envoyé par yarp Voir le message
    Par contre effectivement au niveau customization (comme les image sélectionnées) cela dépends de l'interface. Il faut regarder dans le MSDN ce qu'il y a. Et je ne me rappelle pas avoir vu grand chose. Sans doute des tucs non documentés.
    Oué, enfin là, c'est pas trop le principal Je suis déjà super content d'avoir mes images dans l'interface, après, le reste, c'est du chipotage ... bien que ça serait bien utile quand même

  5. #25
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    moi aussi je suis super content

  6. #26
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Bravo a vous deux, je n'aurais pas trouve, par curiosite j'ai teste le code et j'ai une erreur sur la ligne
    wzd.Exec(Procedure("ShowPhotoPrintingWizard") << vct);
    Je pense que je n'ai pas le programme "ShowPhotoPrintingWizard", je pose la question bete ou trouver ce programme
    Encore une fois bravo et merci pour la lecon de programmation
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #27
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Il faut installer la dll wiauut.dll qui se trouve dans le SDK (copier dans System32 et installer avec RegSrv32). C'est en fait un ActiveX (WIA automation).
    Dans le cas ou l'ActiveX n'est pas installé, il doit y avoir moyen de le détecter. Mais le code ci-dessus est bien entendu simplifié, il faut toujours controler les appels faits à des Libraries, fonctions, API.
    Dans le cas présent, un exemple plus sophistiqué dans les exemples CBuilder cmontre comment faire (exemple OleWord2).
    Je me suis contenté de catchs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
      wzd = CreateOleObject("WIA.CommonDialog")
    }
    catch(...) {
    }
    C'est bête mais finalement je ne vais pas m'en servir. Le wizard ne prends que les fichiers dont le format est reconnu par WIA, je pensais qu'il afficherait au moins les icones. Domage.

  8. #28
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Bravo a vous deux, je n'aurais pas trouve, par curiosite j'ai teste le code et j'ai une erreur sur la ligne

    Je pense que je n'ai pas le programme "ShowPhotoPrintingWizard", je pose la question bete ou trouver ce programme
    Encore une fois bravo et merci pour la lecon de programmation
    Quelle erreur ?

  9. #29
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Quand lobject n'est pas installé IDispatch déclenche une exception quand on appel la classe. Cette erreur n'apparait qu'en mode Debug (en tout cas chez moi), c'est un message en clair disant qu'il ne connait pas la classe.

  10. #30
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    En effet !

    Je demande ça, car sous BCB2007, ça a été le festival:
    - "Invalid class string" - Normal, tant que le regsvr32 n'a pas été fait
    - Violation d'accès lors de l'appel à Exec (nouveauté Builder 2007/2009)
    - Erreur "Files must be a pathname to a valid image file or a vector of pathnames...", corrigé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vct.Exec(Procedure("Add") << AnsiString("C:\\toto.jpeg"));
    Mais au final, ça marche tip top (j'aurais jamais pensé à utiliser cet assistant d'impression sans ce thread ! )

  11. #31
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Sur cette ligne
    wzd.Exec(Procedure("ShowPhotoPrintingWizard") << vct);
    l'erreur est le fichier specifie est introuvable

    comme explique dans le SDK j'ai copie
    Copy the wiaaut.chm and wiaaut.chi files to your Help directory (usually located at C:\Windows\Help)
    Copy the wiaaut.dll file to your System32 directory (usually located at C:\Windows\System32)
    From a Command Prompt in the System32 directory run the following command:

    RegSvr32 WIAAut.dll
    y a t'il autre chose a faire
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  12. #32
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Bonsoir Blondelle,

    Citation Envoyé par blondelle Voir le message
    Sur cette ligne

    l'erreur est le fichier specifie est introuvable

    comme explique dans le SDK j'ai copie

    y a t'il autre chose a faire
    Il n'y a que cela à faire, ni plus ni moins. Yarp nous a montré comment faire le reste

  13. #33
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Tiens pour ceux que ça intéresse de visionner directement un fichier image avec l'aperçu Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      ShellExecute(0,"open","rundll32.exe","C:\\WINDOWS\\System32\\shimgvw.dll,ImageView_Fullscreen C:\\Test\\test.jpg",NULL,SW_NORMAL);
    }
    Testé et fonctionnel

  14. #34
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Le code fonctionne correctement l'erreur etait dans l'extension d'une image jpeg au lieu de jpg.
    Juste une question qui me vient comme cela cet utilitaire permettrait'il d'imprimer une image d'une WebCam ou d'un Scanner, avec le code necessaire bien sur
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  15. #35
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    D'après ce que j'ai pu lire, il est possible d'acquérir des images provenant de Webcam ou de scanner :

    Les méthodes à utiliser doivent être celles-ci :
    ShowAcquireImage :
    Displays one or more dialog boxes that enable the user to acquire an image from a hardware device. Returns an ImageFile object on success, otherwise Nothing

    ShowSelectDevice :
    Displays a dialog box that enables the user to select a hardware device for image acquisition. Returns the selected Device object on success, otherwise Nothing.

    ShowAcquisitionWizard
    Starts the Scanner and Camera Wizard. Returns Nothing.
    Tout est décrit dans le wiaaut.chm du dossier contenant le SDK

    A voir

  16. #36
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je viens de trouver comment utiliser Ole et Wia
    Le 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
     
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <utilcls.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant wzd, vct;
    wzd = Variant::CreateObject("WIA.CommonDialog");
    vct = Variant::CreateObject("WIA.Vector");
    vct.OleProcedure("Add", "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Grue_Atelier.jpg");
    vct.OleProcedure("Add", "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\YourBmpHere.bmp");
    wzd.OleProcedure("ShowPhotoPrintingWizard", vct);
    wzd = Unassigned;
    vct = Unassigned;
    }
    //---------------------------------------------------------------------------
    Cela ressemble plus a ce que l'on utilise avec Excel Word ..., ca va peut etre donner des idees tout ca
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #37
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Je viens de trouver comment utiliser Ole et Wia
    Le 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
     
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <utilcls.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant wzd, vct;
    wzd = Variant::CreateObject("WIA.CommonDialog");
    vct = Variant::CreateObject("WIA.Vector");
    vct.OleProcedure("Add", "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Grue_Atelier.jpg");
    vct.OleProcedure("Add", "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\YourBmpHere.bmp");
    wzd.OleProcedure("ShowPhotoPrintingWizard", vct);
    wzd = Unassigned;
    vct = Unassigned;
    }
    //---------------------------------------------------------------------------
    Cela ressemble plus a ce que l'on utilise avec Excel Word ..., ca va peut etre donner des idees tout ca
    Elles sont là mes OleProcedure!! Je me doutais bien que c'était possible par ce biais (pas pour autant que j'avais trouvé )

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Imprimer avec un service Windows (ServiceAccount.LocalSystem)
    Par dkmix dans le forum Services Windows
    Réponses: 0
    Dernier message: 07/02/2011, 10h37
  2. Imprimer avec window.print()
    Par jo281 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/01/2006, 08h58
  3. Imprimer avec window.print()
    Par jo281 dans le forum ASP
    Réponses: 4
    Dernier message: 11/01/2006, 21h37
  4. [Impression] Imprimer avec jbuilder
    Par joker34 dans le forum JBuilder
    Réponses: 3
    Dernier message: 15/11/2005, 13h15

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