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

Contribuez Delphi Discussion :

Venez participer à la FAQ Delphi ! [FAQ]


Sujet :

Contribuez Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Par défaut Venez participer à la FAQ Delphi !
    Bonjour,

    Comme vous le savez, la FAQ Delphi contient les questions fréquemment posées sur les forums Delphi et Delphi et bases de données. Malgré nos efforts, elle peut néanmoins contenir des erreurs, nous vous remercions donc de nous les signaler si vous en trouvez.

    Par ailleurs, si vous avez des Questions/Réponses (QRs) intéressantes à proposer dont vous êtes l'auteur, vous pouvez les poster à la suite de ce topic en respectant le format donné ci-après. Ces questions doivent être relatives à des problèmes précis que vous avez rencontrés lors du développement de votre application ou alors une question frequemment posée sur le forum. Il vous est demandé, par conséquent, de préciser la version de Delphi, les composants que vous utilisez (éditeurs, gratuits, personnels) ainsi que la section dans laquelle vous souhaitez voir votre QR publiée.
    La FAQ Delphi aimerait rester la plus technique possible.
    Nous encourageons donc les developpeurs (débutants ou expériementés) à consulter l'aide afin d'utiliser les fonctions standards qui résolvent bien des problèmes avant de proposer une QR.

    Pour soumettre une QR, il vous est demandé de la présenter de cette façon :
    [QR]Comment bien présenter une nouvelle QR ?

    Vous devez présenter le titre en couleur comme ci-dessus et écrire le texte de votre QR ici. Soyez clair et précis sans écrire un livre. Une QR est une réponse simple à une question courante.
    Vous pouvez ajouter des liens dans votre texte en utilisant la balise URL.
    Dans le texte si vous citez une fonction de Delphi, mettez la déclaration en gras. Exemple : pour connaitre la position de la souris utiliser la fonction GetCursorPos(). Bien sur dans les balises code il ne faut pas mettre de mise en forme. La coloration est faite au moment de la publication sur le site.
    Vous pouvez utiliser le gras l'italique ou le souligné mais pas les tailles de polices ni la couleur.
    De même ne mettez pas de smiley dans le texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Le code doit toujours être entre les balises CODE
    // Indenter correctement votre code afin de nous éviter une reprise
    // manuelle ensuite
    Begin
      ShowMessage('Hem.');
      ShowMessage('Avez-vous compris ?');
      If Reponse='OUI'
        Then ShowMessage('OK')
        Else ShowMessage('Relisez tout');
    End;
    En fin de QR, vous pouvez ajouter les liens qui peuvent être utiles en complément.
    Ensuite, vous pourrez éventuellement ajouter vos remarques. Si la QR est fournie avec des fichiers (par exemple, un projet présentant le fonctionnement du code) veuillez les placer dans un fichier .zip et nous communiquer le lien où on pourra le télécharger.

    Il est également possible d'envoyer votre QR par mail (avec éventuellement en pièces jointes les sources) à l'adresse faqdelphi _AT_ redaction-developpez.com


  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Par défaut
    Bonjour,

    L'adresse de la FAQ est exclusivemement réservée à vos propositions pour la FAQ. Si par ailleurs, vous souhaitez rédiger un article, merci de prendre contact directement avec un des membres de l'équipe Delphi ou le DRH par MP.

    Par ailleurs, les questions techniques (ou non) doivent être postées sur le forum. Toute demande par mail sera purement et simplement ignorée.

    Merci.

  3. #3
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut Comment obtenir un handle de fenêtre (HWND) de console
    Roland Chastain : intégré dans la nouvelle FAQ, merci pour cette contribution

    J'ai trouvé ça par hasard et je ne l'ai pas trouvé dans la FAQ (enfin j'ai trouvé ceci Comment cacher la fenêtre d'une application console ? mais il me semble intéressant de rajouter ça à part)
    http://support.microsoft.com/kb/124103/fr

    Le but est d'obtenir le Handle de la fenêtre de l'application console.
    Pour ce faire on va générer un titre unique et chercher la fenêtre qui à ce titre.

    Code DELPHI : 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
    function GetConsoleHwnd : HWND ;
    var
        NewWindowTitle : string ;
        OldWindowTitle : string ;
    begin
          SetLength(NewWindowTitle, 1024) ;
     
          // Récupère le titre courant
          GetConsoleTitle(PChar(OldWindowTitle), 1024);
     
          NewWindowTitle := Format('%d/%d', [GetTickCount, GetCurrentProcessId]);
     
           // Change le titre
           SetConsoleTitle(PChar(NewWindowTitle));
     
           // Attend pour que le titre de la fenêtre soit changé
           Sleep(40);
     
           // Charche le nouveau titre
           Result := FindWindow(nil, PChar(NewWindowTitle)) ;
     
           // Restore le titre originnal.
           SetConsoleTitle(OldWindowTitle);
    end ;

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Merci pour cette proposition et ta participation
    On va traiter tout ça
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    Alcatîz : mise à jour effectuée, merci.

    [QR]Comment change-t-on la couleur de fond d'un élément de radiogroup ?[QR]

    Mise à jour de http://delphi.developpez.com/faq/?pa...fondradiogroup

    Depuis Delphi 7 (peut-être avant) on peut directement acceder à la propriété
    Buttons[Index] du Radiogroup ce qui donne accès toutes ses propriétés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure RGB_ColorItem(RadioGroup: TRadioGroup; ItemIndex: Byte; Color: 
    Tcolor); 
    begin 
      RadioGroup.Buttons[ItemIndex].Color := Color; 
    end;
    Voici ma modeste contribution

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Merci pour ta contribution gaabne
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    Alcatîz : mise à jour effectuée, merci.

    salut:
    je tiens a proposé une MAJ pour la question énuméré dans la FAQ.
    Comment envoyer un e-mail avec Delphi ?

    la solution proposé ne gère pas les connections SSL.

    [QR] Comment envoyer un e-mail avec Delphi?

    les fichiers .cer seront obtenus auprès de votre fournisseur de services.

    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
    var
      IdMessage: TIdMessage;
      IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
      IdSMTP: TIdSMTP;
      Message: TStrings;
      i: Integer;
      Fichiers: Array Of String;
    begin
      IdMessage := TIdMessage.Create(nil); //création dynamique du composant
     
      IdMessage.From.Address := 'expediteur@domaine.com';
     
      //Ces deux lignes peuvent-être répétées autant de fois que vous désirez 
      //d'adresse de réponse et/ou de destinataire
      IdMessage.ReplyTo.Add.Address := 'expediteur@domaine.com';
      IdMessage.Recipients.Add.Address := 'destinataire@domaine.com' ;
     
      IdMessage.Subject := 'Sujet du message';
     
      IdMessage.ContentType := 'multipart/alternative'; //Message 'découpé' en plusieurs parties
     
      Message := Memo1.Lines; //par exemple... il faut juste que ce soit un TStrings !
     
      //Ici on va créer les différentes parties du message
      //Au cas où le client ne gère pas les messages HTML :
      With TIdText.Create(IdMessage.MessageParts, Message) Do
      Begin
        ContentType := 'text/plain';
        Body.Insert(0, 'Ce message est un message HTML. Configurez votre client de courrier électronique' +
       'pour le visionner de manière appropriée');
      end;
     
      //Ajout du message au format HTML (en supposant que Message contient du HTML) :
      with TIdText.Create(IdMessage.MessageParts, Message) do
        ContentType := 'text/html';
     
      //Et maintenant, l'ajout des pièces jointes :
      //Le tableau de strings Fichiers doit être remplis avec les chemins complets des fichiers à inclure
      for i := Low(Fichiers) to High(Fichiers) do
        TIdAttachment.Create(IdMessage.MessageParts, Fichiers[i]);
     
      //On passe ensuite à l'envoi du message:
      IdSMTP := TIdSMTP.Create(nil) ; //Création dynamique du composant
     
      IdSMTP.Port := 25; //Le port SMTP standard... 
      IdSMTP.Host := 'smtp.serveur.com';  //Le serveur auquel se connecter
     
    // paramétrage de la connexion SSL.
    If SSLConnect Then
     begin
       IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
       IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile :='RootCert.cer';
       IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile := 'Certificat.cer';
       IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile := '';
       IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv3;
     end;
     
      //Ensuite on se connecte et on envoit le message, en gérant les erreurs, tant qu'à faire !
      Try
        Try
          IdSMTP.Connect;
          IdSMTP.Send(IdMessage);
        except
          on e: exception do MessageDlg(e.Message, mtError, [mbOK], 0);
        end;
      finally
        IdSMTP.Disconnect;
        IdSMTP.Free;
        IdMessage.Free;
      end;
     
    end ;

  8. #8
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut Automation export PDF Word
    Alcatîz : QR intégrée à la nouvelle FAQ, merci pour cette contribution

    [QR]Comment exporter au format PDF sous Word ?
    Voici un code d'exemple, il faut bien sur l'adapter selon votre projet.
    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
     
    procedure SavePdf(const AFileName: String);
    var
        WdApp, WdDoc: Variant;
        FichierPDF: String;
    const
        WdExportFormat  = 17;           // wdExportFormatPDF
        WdExportOptimizeFor = 0;        // wdExportOptimizeForPrint
        WdExportRange = 0;              // wdExportAllDocument
        WdExportItem = 0;               // wdExportDocumentContent
        WdExportCreateBookmarks = 0;    // wdExportCreateNoBookmarks
    begin
        try
            WdApp := CreateOleObject('Word.Application');
            if VarType(WdApp) <> VarDispatch then Abort;
     
            WdApp.Visible := False;
            WdApp.DisplayAlerts := wdAlertsNone;
            WdDoc := WdApp.Documents.Open(AFileName);
     
            // Change l'extension du nom du fichier en pdf
            FichierPDF := StringReplace(AFileName, ExtractFileExt(AFileName), '.pdf', []);
            WdDoc.ExportAsFixedFormat(FichierPDF,
                                        WdExportFormat, False, WdExportOptimizeFor,
                                        WdExportRange, 1, 1, WdExportItem, True, True,
                                        WdExportCreateBookmarks, True, True, False);
            WdApp.Quit;
        except
            on E: Exception do
            ....
        end;
        WdDoc := Unassigned;
        WdApp := Unassigned;
    end;
    La méthode ExportAsFixedFormat de word oblige a saisir les deux premier paramètres, les suivants étant optionels.
    Je vous invite à lire la MSDN pour des infos détaillées sur chaque argument :
    ExportAsFixedFormat(OutputFileName, ExportFormat, OpenAfterExport, OptimizeFor, Range, From, To, Item, IncludeDocProps, KeepIRM, CreateBookmarks, DocStructureTags, BitmapMissingFonts, UseISO19005_1, FixedFormatExtClassPtr)

    Ce code est fonctionnel sous Delphi version XE et les composants Word2000. Avec XE3, il existe une unité Word2010 qui contient les constantes citées ci-dessus.

    Liens utiles :
    http://msdn.microsoft.com/en-us/libr...ice.12%29.aspx

  9. #9
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut Automation export PDF Excel
    Alcatîz : QR intégrée à la nouvelle FAQ, merci pour cette contribution

    [QR]Comment exporter au format PDF sous Excel ?
    Voici un code d'exemple, il faut bien sur l'adapter selon votre projet.
    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
     
    procedure SavePdf(const AFileName: String);
    var
        XlApp, XlBook, XlSheet: Variant;
        FichierPDF: String;
    const
        XlFixedFormatType = $00000000;  // xlTypePDF
        XlQuality = $00000000;          // xlQualityStandard
    begin
        try
            XlApp := CreateOleObject('Excel.Application');
            if VarType(XlApp) <> VarDispatch then Abort;
            XlApp.Visible := False;
            XlApp.DisplayAlerts := False;
     
            XlBook := XlApp.WorkBooks.Open(AFileName);
            XlSheet := XlBook.Sheets[1];
            XlSheet.Activate;
     
            // Change l'extension du nom du fichier en pdf
            FichierPDF := StringReplace(AFileName, ExtractFileExt(AFileName), '.pdf', []);
                 XlSheet.ExportAsFixedFormat(XlFixedFormatType, FichierPDF,
                                        XlQuality, True, False, 1, 1, False);
              XlApp.Quit;
        except
            on E: Exception do
            ....
        end;
        XlSheet := Unassigned;
        XlBook := Unassigned;
        XlApp := Unassigned;
    end;
    La méthode ExportAsFixedFormat de Excel oblige a saisir les deux premier paramètres, les suivants étant optionels.
    Je vous invite à lire la MSDN pour des infos détaillées sur chaque argument :
    ExportAsFixedFormat(Type, Filename, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr)

    Ce code est fonctionnel sous Delphi version XE et les composants Excel2000. Avec XE3, il existe une unité Excel2010 qui contient les constantes citées ci-dessus.

    Liens utiles :
    http://msdn.microsoft.com/en-us/libr...ice.12%29.aspx

  10. #10
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut Automation export PDF OpenOffice Writer
    Alcatîz : QR intégrée à la nouvelle FAQ, merci pour cette contribution

    [QR]Comment exporter au format PDF sous Writer ?
    Voici un code d'exemple, il faut bien sur l'adapter selon votre projet.
    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
     
    procedure SavePdf(const AFileName: String);
    var
        AApp, ADeskTop, AUno, ALocale, MyDoc, MyProp: Variant;
        FichierPDF: String;
    begin
        try
            AApp := CreateOleObject('com.sun.star.ServiceManager');
            ADeskTop := CreateUnoService('com.sun.star.frame.Desktop');
            AUno := CreateUnoService('com.sun.star.frame.DispatchHelper');
            ALocale := CreateUnoService('com.sun.star.Lang.Locale');
     
            MyDoc := ADesktop.LoadComponentFromURL('file:///' + StringReplace(AFileName , '\', '/',[rfReplaceAll]), '_default', 0, FileProp);
     
            // Change l'extension du nom du fichier en pdf
            FichierPDF := StringReplace(AFileName, ExtractFileExt(AFileName), '.pdf', []);
     
            // Propriété pour l'export
            MyProp := VarArrayCreate([0, 1], varVariant);
            MyProp[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[0].Name := 'URL';
            MyProp[0].Value := 'file:///' + StringReplace(FichierPDF, '\', '/',[rfReplaceAll]);
            MyProp[1] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[1].Name := 'FilterName';
            MyProp[1].Value := 'writer_pdf_Export';
     
            AUno.executeDispatch(ADesktop.CurrentFrame, '.uno:ExportDirectToPDF', '', 0, MyProp);
     
            MyDoc.Close(True);
            ADeskTop.Terminate;
        except
            on E: Exception do
            ....
        end;
        MyDoc := Unassigned;
        AApp := Unassigned;
    end;
    Il existe deux méthode d'export sous open office
    - ExportToPDF
    - ExportDirectToPDF
    Les deux aboutissent au même résultat mais la première affiche la fenêtre d'options d'exportation de PDF alors que la seconde "exporte directement".
    Il est toutefois possible de spécifier des valeurs, qui sont présentes dans la fenêtre d'options, en créant une propriété FilterData.
    Dans ce cas, il faudra modifier le code pour :
    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
     
            MyProp := VarArrayCreate([0, 2], varVariant);
            MyProp[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[0].Name := 'URL';
            MyProp[0].Value := 'file:///' + StringReplace(FichierPDF, '\', '/',[rfReplaceAll]);
            MyProp[1] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[1].Name := 'FilterName';
            MyProp[1].Value := 'writer_pdf_Export';
     
            // Créer autant de propriété que voulue mais penser a changer la taille du tableau
            MyFilterData := VarArrayCreate([0, 0], varVariant);
            MyFilterData[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyFilterData[0].Name := 'DisplayPDFDocumentTitle';
            MyFilterData[0].Value := True;
     
            MyProp[2].Name := 'FilterData';
            MyProp[2].Value := MyFilterData;
    Je vous invite à lire la documentation officielle pour des infos détaillées sur chaque argument dans les sections "PDF Export filter data" et "Filter data demo".

    Ce code est fonctionnel sous Delphi version XE, openOffice 3.4.1 et LibreOffice 4.0

    Liens utiles :
    http://wiki.openoffice.org/wiki/API/...als/PDF_export

  11. #11
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut Automation export PDF OpenOffice Calc
    Alcatîz : QR intégrée à la nouvelle FAQ, merci pour cette contribution

    [QR]Comment exporter au format PDF sous Calc?
    Voici un code d'exemple, il faut bien sur l'adapter selon votre projet.
    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
     
    procedure SavePdf(const AFileName: String);
    var
        AApp, ADeskTop, AUno, ALocale, MySheet, MyBook, MyProp: Variant;
        FichierPDF: String;
    begin
        try
            AApp := CreateOleObject('com.sun.star.ServiceManager');
            ADeskTop := CreateUnoService('com.sun.star.frame.Desktop');
            AUno := CreateUnoService('com.sun.star.frame.DispatchHelper');
            ALocale := CreateUnoService('com.sun.star.Lang.Locale');
     
            MyBook := ADesktop.LoadComponentFromURL('file:///' + StringReplace(AFileName , '\', '/',[rfReplaceAll]), '_default', 0, FileProp);
            // Activer la première feuille
            MySheet := MyBook.getSheets.getByIndex(0);
            MyBook.getCurrentController.setActiveSheet(MySheet);
     
            // Change l'extension du nom du fichier en pdf
            FichierPDF := StringReplace(AFileName, ExtractFileExt(AFileName), '.pdf', []);
     
            // Propriété pour l'export
            MyProp := VarArrayCreate([0, 1], varVariant);
            MyProp[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[0].Name := 'URL';
            MyProp[0].Value := 'file:///' + StringReplace(FichierPDF , '\', '/',[rfReplaceAll]);
            MyProp[1] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[1].Name := 'FilterName';
            MyProp[1].Value := 'calc_pdf_Export';
     
            AUno.executeDispatch(ADesktop.CurrentFrame, '.uno:ExportDirectToPDF', '', 0, MyProp);
     
            MyBook.Close(True);
            ADeskTop.Terminate;
        except
            on E: Exception do
            ....
        end;
        MySheet := Unassigned;
        MyBook := Unassigned;
        AApp := Unassigned;
    end;
    Il existe deux méthode d'export sous open office
    - ExportToPDF
    - ExportDirectToPDF
    Les deux aboutissent au même résultat mais la première affiche la fenêtre d'options d'exportation de PDF alors que la seconde "exporte directement".
    Il est toutefois possible de spécifier des valeurs, qui sont présentes dans la fenêtre d'options, en créant une propriété FilterData.
    Dans ce cas, il faudra modifier le code pour :
    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
     
            MyProp := VarArrayCreate([0, 2], varVariant);
            MyProp[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[0].Name := 'URL';
            MyProp[0].Value := 'file:///' + StringReplace(FichierPDF , '\', '/',[rfReplaceAll]);
            MyProp[1] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyProp[1].Name := 'FilterName';
            MyProp[1].Value := 'writer_pdf_Export';
     
            // Créer autant de propriété que voulue mais penser a changer la taille du tableau
            MyFilterData := VarArrayCreate([0, 0], varVariant);
            MyFilterData[0] := AApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
            MyFilterData[0].Name := 'DisplayPDFDocumentTitle';
            MyFilterData[0].Value := True;
     
            MyProp[2].Name := 'FilterData';
            MyProp[2].Value := MyFilterData;
    Je vous invite à lire la documentation officielle pour des infos détaillées sur chaque argument dans les sections "PDF Export filter data" et "Filter data demo".

    Ce code est fonctionnel sous Delphi version XE, openOffice 3.4.1 et LibreOffice 4.0

    Liens utiles :
    http://wiki.openoffice.org/wiki/API/...als/PDF_export

  12. #12
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 42
    Par défaut Version hors-ligne
    est-ce que peut-on avoir une version hors-ligne de la Faq ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/06/2014, 22h42
  2. Venez participer à la FAQ IB/FB !
    Par Emmanuel Lecoester dans le forum Firebird
    Réponses: 3
    Dernier message: 04/03/2007, 09h46

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