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 :

Utilisation ActiveX Tpdf


Sujet :

C++Builder

  1. #1
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut Utilisation ActiveX Tpdf
    salut,

    J'ai un petit probleme pour l'utilisation de l'ActiveX Acrobat reader,
    au moment d'utiliser la fonction "PrintPages(long from,long to)"

    Apr�s avoir charger mon fichier j'utilise :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
              int num_page=2;
              Pdf1->PrintPages(num_page,num_page);
    et l� ,Acrobat m'affiche l' avertissement:
    "ATTENTION! Un script a demand� l'impression d'un fichier acrobat.Il peut s'agir d'un document complet.Voulez vous continuer l'"

    Pas de probleme si je reponds oui ou non (cependant je ne veux pas de message).Miracle dans cette boite il ya une case � cocher : "ne plus afficher ce message", que je coche...

    Et l� , l'impression via printPages ne fonctionne plus.(Plus de message ,mais pas d'impression).
    ( Le seul moyen pour retrouver le message d'alerte c'est d'aller dans les configuration d'acrobat etde faire r�initialiser les avertissements)..

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    Par d�faut
    Bon ,apparement c'est un bug d'acrobat, l'ActiveX acrobat n'�tant pas support� officiellement, aucune correction n'est pr�vue...

    J'ai donc d�cid� de simuler l'envoi de la touche entr�e sur la boite de dialogue.

    Voil� comment faire pour ceux que �a interresse :

    (necessaire seulement si vous devez imprimer 1 page specifique d'un document pdf/ sinon utilisez plutot shellexecute)

    Apr�s une petite enquete gr�ce � windowsspy(modifi�) on s'apercoit
    qu'envoyer directement le message "touche entr�e apuy�e" � la boite
    de dialog ou au bouton ok ne sert � rien c'est le label (Static) comprenant
    le texte qui peut recevoir le message "entree"(=oui valider l'impression).

    Donc on doit :
    1) trouver la boite de dialog de confirmation d'acrobat (API FindWindow)
    2) comme le label n'a pas d'id (GWL_ID,donc introuvable avec GetItemCtrId ou GetWindowLong )
    il faut trouver le label(Static) dans cette boite de dialog (API EnumWindowProc )
    3) envoyer le message "touche entree" � ce label.

    contrainte:attendre que la boite s'affiche.


    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
     
     
    // code de simulation de l'appui sur la touche ENTREE
    BOOL CALLBACK EnumChildProc(hwndChild, lParam)
    HWND hwndChild;
    LPARAM lParam;
    {
        char Texte[250];
        char classname[250];
        GetWindowText(hwndChild,Texte,sizeof(Texte));
        GetClassName( hwndChild,classname,sizeof(classname));
        String ClassName=String(classname);
        String Text1=String(Texte);
        	//if(ClassName=="Static" && Text1!=""){   
        	//il y a 4 "static" dont 1 seul  qui contient le texte, bizarrement parfois le programme nedetecte aucun texte 
     
        //envoie du message à tous les labels
        if(ClassName=="Static" ){
            // simulationde la touche entree   
            SendMessage(hwndChild,WM_KEYDOWN,VK_RETURN,0);
            SendMessage(hwndChild,WM_KEYUP,VK_RETURN,0);
     
        }
        return TRUE;
    }
     
    //fonction  à associer à un evenement OnTimer d'un timer crée dynamiquement
    // code de recherche de la boite de dialoque et du label (Static) à l'intérieur de cette fenetre
    void __fastcall TForm1::TimerAction(TObject * Sender)
    {
            HWND Hdl=NULL;
     
            //recherche de la boite de dialogue
            Hdl = FindWindow("#32770","Adobe Acrobat"); //les parametres classe et nom ont été trouvé avec windowspy
     
            if(Hdl!=NULL){
                    RECT rcClient;
                    ::GetClientRect(Hdl, &rcClient);
                    // on enumère tous 
                    EnumChildWindows(Hdl, EnumChildProc,(LPARAM) &rcClient);
                    //ok=true;
                    TIMER_PRINT->Enabled=false;
                    delete (TTimer*)Sender;
            }
    }
     
    void __fastcall TForm1::ImprimerPdf()
    {
     
     
                    Pdf1->printPages(num_page,num_page);
                    Application->ProcessMessages();
     
                    // on utilise un Timer qui contrôlera toutes les 50 ms 
                    // si la fenetre existe et le cas echéant, la fermera
                    TTimer * ATimer = new TTimer(this);
                    ATimer->Enabled=false;
                    ATimer->Interval=50;
                    ATimer->OnTimer=TimerAction;
                    ATimer->Enabled=true;
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probl�me utilisation Activex
    Par Wassim123 dans le forum Interfaces Graphiques
    R�ponses: 0
    Dernier message: 02/12/2008, 11h14
  2. utiliser activex dans ma page web
    Par asrekik dans le forum ASP
    R�ponses: 0
    Dernier message: 09/02/2008, 21h34
  3. utilisation activex vlc
    Par gentelmand dans le forum VB 6 et ant�rieur
    R�ponses: 1
    Dernier message: 20/11/2007, 00h31
  4. Utilisation ActiveX Word
    Par Tiwaz dans le forum C++Builder
    R�ponses: 1
    Dernier message: 14/03/2007, 22h48
  5. BDS - Utilisation ActiveX ShDocVw.dll
    Par RamDevTeam dans le forum Delphi .NET
    R�ponses: 5
    Dernier message: 20/09/2006, 18h43

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