Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 34 sur 34
  1. #21
    Rédacteur
    Avatar de Pedro
    Inscrit en
    octobre 2003
    Messages
    5 417
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 5 417
    Points : 6 930
    Points
    6 930

    Par défaut

    Citation Envoyé par HumanTool Voir le message
    Bonjour,
    il semblerait que j'eusse oublié une partie du code pour la faq pourriez la mettre à jour :
    Euh... C'est à dire que l'on a plus de 800 QR dans cette FAQ donc ça serait sympa si tu nous disais où est ce que tu veux remplacer
    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

  2. #22
    Modérateur
    Avatar de Cl@udius
    Homme Profil pro Claude Renouleaud
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Renouleaud
    Âge : 51
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 8 960
    Points
    8 960
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  3. #23
    Membre confirmé Avatar de HumanTool
    Homme Profil pro Guillaume ROQUES
    Chef de projet NTIC
    Inscrit en
    janvier 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume ROQUES
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 273
    Points : 298
    Points
    298

    Par défaut

    Oups
    désolé j'avais édité mon message pour le spécifier mais ça n'a pas pris ....mauvaise excuse je sais mais bon c'est vrai !!

    Cl@udius : Oui c'est ça

    Encore désolé et merci
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  4. #24
    Membre Expert Avatar de anapurna
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    1 581
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2002
    Messages : 1 581
    Points : 1 826
    Points
    1 826

    Par défaut [QR]Comment ajouter un boutton dans un TStringGrid ?

    Alcatîz : ajouté à la nouvelle FAQ, merci pour cette contribution

    [QR]Comment ajouter un bouton dans un TStringGrid ?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    //dans le formcreate 
      MaStringGrid.DoubleBuffered := True;
      MaStringGrid.ControlStyle := StringGrid2.ControlStyle + [csClickEvents];
     
    ...
     
    // dans le ondrawcell du stringGrid
    // la condition peut etre un numero de colonne ou de ligne 
       if  maCondition Then
         if (csClicked in (sender as TstringGrid).ControlState) Then
           DrawFrameControl((sender as TstringGrid).Canvas.Handle, Rect,DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_PUSHED )
         else
           DrawFrameControl((sender as TstringGrid).Canvas.Handle, Rect, FC_BUTTON, DFCS_BUTTONPUSH )
    voila vous avez un jolie bouton dans les cellules

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #25
    Rédacteur
    Avatar de Pedro
    Inscrit en
    octobre 2003
    Messages
    5 417
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 5 417
    Points : 6 930
    Points
    6 930

    Par défaut


    Merci pour ta participation
    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

  6. #26
    Futur Membre du Club
    Inscrit en
    octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : octobre 2008
    Messages : 35
    Points : 18
    Points
    18

    Par défaut Comment interagir avec le midi.

    Alcatîz : QR ajoutée à la nouvelle FAQ, merci pour cette contribution

    Sous Delphi 6

    Je vous met déjà un petit programme inspiré par celui de Sub0:

    Code :
    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
    Unit Unit1;
    Interface
    Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
         Controls, Forms, Dialogs, ExtCtrls, mmSystem, StdCtrls;
       {mmSystem vous permet d'avoir accès aux fonctions de contrôle midi}
    {----------------------------------------------------------------}
    Type
      TForm1 = Class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Procedure FormCreate(Sender: TObject);
        Procedure FormDestroy(Sender: TObject);
        Procedure Button1MouseDown(Sender: TObject;
          Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        Procedure Button1MouseUp(Sender: TObject;
          Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      End;
        const
       Hpc=$100; Hpdm=$10000;
     
    Var Form1: TForm1;
      MidiOut: hMidiOut;
     
    Implementation
    {----------------------------------------------------------------}
    {$R *.dfm}
     
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Var Res: DWORD; msg: String;
    Begin
      Res := midiOutOpen(@MidiOut, MIDI_MAPPER, Handle, 0, CALLBACK_WINDOW);
     
    //La partie qui est çi-dessous peut être omise. Mais vous donneras des indications en cas d'erreur
      If Res <> 0 Then Begin
        Case Res Of
          MMSYSERR_BADDEVICEID: msg := 'Device invalide';
          MMSYSERR_ALLOCATED: msg := 'Erreur d''allocation mémoire';
          MMSYSERR_NOMEM: msg := 'Pas assez de mémoire';
          MIDIERR_NOMAP: msg := 'Midi mapper non trouvé';
          MIDIERR_NODEVICE: msg := 'Device non trouvé';
        Else msg := 'Erreur inconnue';
        End;
        MessageBox(Form1.Handle, pChar(msg), 'Error', MB_OK);
        Close;
      End;
    //-------------------------------------------------------------------------------------------------
     
    End;
     
     
    {La procédure çi dessous vous permet d'arrêter tout événement midi à la sortie du programme}
    {rien ne vous empêche de vous faire un petit boutton “Panic” dans le programme à partir de ça, au cas ou un noteOff n'aie pas été détécté}  
    Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      midiOutShortMsg(MidiOut, $00007BB0);
      midiOutClose(MidiOut);
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.Button1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     
    Begin
      midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($99));
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.Button1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Begin
      midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($89));
       end;
     
    {----------------------------------------------------------------}
    End.
    Petite explication:
    midiOutShortMsg(MidiOut, 007F2599) vous permet de jouer un click de métronome sur le canal 10 au volume 127

    midiOutShortMsg(MidiOut, 007F2589)
    Le volume c'est 7F en hexadécimal
    Le click c'est 25
    99 Le premier neuf veut dire jouer la note, le deuxieme 9 sur le canal 10
    (car les canaux vont de 0 à 9).
    Dans la deuxième phrase 8 veut dire qu'on arrête la note sur le même canal.

    Vous remarquerez que j'ai omis les premiers octets (00) qui sont de toutes façon inutilisé.

    En ce qui concerne l'écriture
    midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($99));

    Je vous explique. Celà permet de modifier les valeurs à l'intérieur de la phrase.

    Si j'utilise la variable 'Note' par exemple pour pouvoir jouer une note sur le canal 1,
    j'écrirai
    midiOutShortMsg(MidiOut, ($7F*Hpdm)+(Note*Hpc)+($80));
    ou 'Hpdm' et 'Hpc' sont des constantes.

    J'aurais pu écrire,
    midiOutShortMsg(MidiOut, ($7F*$10000)+(Note*$100)+($80)); !
    Si vous voulez interagir sur cette commande, vous pourrez écrire par exemple,
    midiOutShortMsg(MidiOut, (Volume*$10000)+(Note*$100)+(8*$10)+Canal));
    ou Volume, Note et Canal sont des variables évidemment.

    Attention avec les procédures Button1MouseDown et up. Si vous faîtes un copier coller des procédures et que vous rajoutez le bouton après, ça ne marche pas. Aucun son ne sort. Du moins pas chez moi !

    Enfin un fichier PDF ou vous trouverez tous ce qu'il vous faut.

    http://www.oktopus.hu/imgs/MANAGED/H...cification.pdf

  7. #27
    Rédacteur
    Avatar de Pedro
    Inscrit en
    octobre 2003
    Messages
    5 417
    Détails du profil
    Informations forums :
    Inscription : octobre 2003
    Messages : 5 417
    Points : 6 930
    Points
    6 930

    Par défaut

    Merci pour ta participation
    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

  8. #28
    Aos
    Aos est déconnecté
    Membre actif
    Inscrit en
    janvier 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 189
    Points : 151
    Points
    151

    Par défaut Comment connaitre sur quel composant est la focalisation ?

    Alcatîz : intégré à la nouvelle FAQ Delphi, merci pour cette contribution

    Le composant TForm dispose de ActiveControl, qui permet de savoir sur quel composant de la form est le focus.

    Exemple :

    Code :
    1
    2
    3
     
    // renvoie le nom du composant sur lequel il y a le focus.
    ShowMessage(maForm.ActiveControl.name);
    Ça semble peut être "basique", mais j'ai pas mal cherché avant que l'on me présente cette astuce J'étais déjà à parcourir tout les composants et à tester si le focus était bien sur lui...

  9. #29
    Membre Expert Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 162
    Points
    1 162

    Par défaut

    Alcatîz : ces deux QR ont été intégrées dans la nouvelle FAQ, merci pour la contribution

    (QR) Delphi 2009, mettre une sélection multilignes en commentaire rapidement :

    A l'aide de la souris ou du clavier, sélectionnez plusieurs ligne, ensuite appuyez sur CTRL+/
    Ce raccourcis clavier permet de mettre la sélection en commentaire (ajout de // à chaque début de ligne).
    Rappelez le raccourcis pour supprimer les commentaires.
    Très utile.




    (QR) Delphi 2009, générique, taille, type, nom du type des paramètres générique :

    Avec Delphi 2009 et l'apparition des type générique (classe ou enregistrement) il faut bien sur pouvoir avoir des informations sur les types.

    Delphi nous fournis donc quelques fonctions utiles par le biais de quelques unités :
    Generics.Defaults, TypInfo, IntfInfo

    Les fonctions :

    SizeOf -> vous la connaissez surement, elle permet de récupérer la taille en octet d'un type, cette dernière est compatible avec les types générique.

    TypeInfo -> permet de récupérer des informations sur le type (type entier, flottant, ordinal, enregistrement, classe, interface ...).

    GetTypeData -> permet de récupérer des informations sur la donnée du type
    (type byte, word, single, char, string, widechar ...)

    GetTypeName -> permet de récupérer le nom du type (integer, byte, string ...)

    Default -> mets la donnée à sa valeur nulle (zero, nil)


    mise en place :

    au moment de la déclaration de votre classe ou record générique vous pouvez imaginer cette déclaration :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    type
      TGenericPoint<T> = record
      public
        X, Y : T;
      public
        function _Size: integer; // renvois la taille du type T
        function _Info: pTypeInfo; // renvois les infos du type T
        function _Data: pTypeData; // renvois les infos de la données du type T
        function _Name: string; // renvois le nom du type T
        procedure _Zero; // mets à zéro X et Y peu importe le type de T
      end;
     
      TSmallPoint = TGenericPoint<SmallInt>;
      TPoint = TGenericPoint<Integer>; 
      TPointF = TGenericPoint<Single>;
      TBigPoint = TGenericPoint<Int64>;
      TBigPointF =  TGenericPoint<Double>;
    voila pour l'interface, voyons l'implémentation :

    Code :
    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
     
    function TGenericPoint<T>._Name: string;
    begin
      result := GetTypeName(TypeInfo(T));
    end;
     
    function TGenericPoint<T>._Size: integer;
    begin
      result := SizeOf(T) shl 1;
    end;
     
    function TGenericPoint<T>._Info: pTypeInfo;
    begin
      result := pTypeInfo(TypeInfo(T));
    end;
     
    function TGenericPoint<T>._Data: pTypeData;
    begin
      result := pTypeData(GetTypeData(_Info));
    end;
     
    procedure TGenericPoint<T>._Zero;
    begin
      X := Default(T);
      Y := Default(T);
    end;




    Voila pour le moment.

  10. #30
    Membre Expert Avatar de Dr.Who
    Inscrit en
    septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : septembre 2009
    Messages : 980
    Points : 1 162
    Points
    1 162

    Par défaut

    Alcatîz : intégré dans la nouvelle FAQ, merci pour cette contribution

    (QR) Delphi 2007..2010 : facilitez la lecture des unités grâce à la directive $REGION

    La direction $REGION introduite depuis Delphi 2007 (si pas d'erreur) permet de créer, comme son nom l'indique une region de code dans une unité. Facilitant ainsi la lecture, l'écriture de cette dernière.

    très simple à utiliser :

    Code :
    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
     
    uses ...
     
    {$REGION 'Fonctions Mathematiques'}
      {$REGION 'Sinus +aide'}{
        Sinus
     
          Donne la taille de vos sinus
     
        Parametres :
        Retour :
      }{$ENDREGION}
     
    function Sinus(const Acthoum: TKlenex): TBeurk;
     
      {$REGION 'Cosinus +aide'}{
        Cosinus
     
          Donne la taille des sinus de votre colocataire, nécessite un colocataire.
     
        Parametres :
        Retour :
      }{$ENDREGION}
     
    function Cosinus(const Coloc: TColoc; const Atchoum: TKlenex): TBeurk;
     
    {$ENDREGION}
     
    implementation
    Et une fois que les regions seront repliées, nous verront dans l'IDE ceci :

    replis des aides :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    uses ...
     
    {$REGION 'Fonctions Mathematiques'}
     
      [Sinus +aide]
    function Sinus(const Acthoum: TKlenex): TBeurk;
     
      [Cosinus +aide]   
    function Cosinus(const Coloc: TColoc; const Atchoum: TKlenex): TBeurk;
     
    {$ENDREGION}
     
    implementation
    replis de toutes les regions :

    Code :
    1
    2
    3
    4
    5
    6
     
    uses ...
     
    [Fonctions mathematiques]
     
    implementation
    Genial non ?

  11. #31
    Membre confirmé Avatar de HumanTool
    Homme Profil pro Guillaume ROQUES
    Chef de projet NTIC
    Inscrit en
    janvier 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume ROQUES
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 273
    Points : 298
    Points
    298

    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 :
    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
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  12. #32
    Membre confirmé Avatar de HumanTool
    Homme Profil pro Guillaume ROQUES
    Chef de projet NTIC
    Inscrit en
    janvier 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume ROQUES
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 273
    Points : 298
    Points
    298

    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 :
    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
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  13. #33
    Membre confirmé Avatar de HumanTool
    Homme Profil pro Guillaume ROQUES
    Chef de projet NTIC
    Inscrit en
    janvier 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume ROQUES
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 273
    Points : 298
    Points
    298

    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 :
    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 :
    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
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  14. #34
    Membre confirmé Avatar de HumanTool
    Homme Profil pro Guillaume ROQUES
    Chef de projet NTIC
    Inscrit en
    janvier 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume ROQUES
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 273
    Points : 298
    Points
    298

    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 :
    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 :
    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
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •