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

  1. #21
    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
    Points : 8 078
    Points
    8 078
    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

  2. #22
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008

  3. #23
    Membre averti
    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
    Points : 378
    Points
    378
    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

  4. #24
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 455
    Points : 5 900
    Points
    5 900
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #25
    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
    Points : 8 078
    Points
    8 078
    Par défaut

    Merci pour ta participation

  6. #26
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 30
    Points
    30
    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 : 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
    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
    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
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci pour ta participation

  8. #28
    Aos
    Aos est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 187
    Points
    187
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    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 : 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
    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 : 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
     
    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 éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    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 : 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
     
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    uses ...
     
    [Fonctions mathematiques]
     
    implementation
    Genial non ?

  11. #31
    Membre averti
    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
    Points : 378
    Points
    378
    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

  12. #32
    Membre averti
    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
    Points : 378
    Points
    378
    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

  13. #33
    Membre averti
    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
    Points : 378
    Points
    378
    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

  14. #34
    Membre averti
    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
    Points : 378
    Points
    378
    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

  15. #35
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 42
    Points : 22
    Points
    22
    Par défaut Version hors-ligne
    est-ce que peut-on avoir une version hors-ligne de la Faq ?

  16. #36
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 104
    Points : 1 547
    Points
    1 547
    Billets dans le blog
    5
    Par défaut Ajout à Comment lister les fichiers d'un répertoire
    Bonjour
    je vous propose d'ajouter le texte ci dessous à la QR Comment lister les fichiers d'un répertoire

    Pour lister les fichier d'un répertoire il suffit d'utiliser TDirectory qui est déclaré dans l'unité System.IOUtils de la rtl.

    Exemple liste tous les fichiers appartenant au répertoire d:\monrepertoire commençant par nav_ et ayant pour extension .xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    var
      Fichiers: TArray<string>;
      nomF: string;
     
    begin
      Fichiers := TDirectory.GetFiles('d:\monrepertoire','nav_*.xml');
      for nomF in Fichiers do
      begin
       .........//traitement des fichiers
      end;


    A ajouter aussi le liens ci dessous dans les références
    http://docwiki.embarcadero.com/Libra...System.IOUtils

  17. #37
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 365
    Points : 41 921
    Points
    41 921
    Billets dans le blog
    65
    Par défaut
    Je suis mitigé, cela dépend de la version de Delphi utilisé, n'oublions pas qu'il y a encore de nombreux utilisateurs de D7 (et même D6)

    il faut donc avant tout retrouver la version d'origine (je suis remonté jusqu'à D2010, je gagerai que cela date de D2009 et l'apparition de l'unicode sans toutefois apporter une certitude) donc il faudrait écrire cet avertissement.

    De plus dans ce cas de figure, certaines autres FAQ pourraient aussi bénéficier d'un addenda exemple : pour obtenir les répertoires spéciaux, toujours dans l'unité IOUtils mais pas les même versions TPath.getpublicpath etc...

  18. #38
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 104
    Points : 1 547
    Points
    1 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Je suis mitigé, cela dépend de la version de Delphi utilisé, n'oublions pas qu'il y a encore de nombreux utilisateurs de D7 (et même D6)
    Je comprends ce point de vue. Cependant il faudrait quand même moderniser un peu la FAQ car même s'il y a toujours des utilisateurs de vieilles versions il y en a pas mal de nouvelles.
    Préciser que cette fonctionnalité est disponible qu'à partir de la version 9 ne présente pour moi aucun inconvénient

  19. #39
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 365
    Points : 41 921
    Points
    41 921
    Billets dans le blog
    65
    Par défaut
    Alors je suggère ceci


    A partir des versions qui proposent l'unité IOUtils ou des versions proposant System.IOUtils (XE+)
    Pour lister les fichier d'un répertoire il suffit d'utiliser TDirectory qui est déclaré dans cette unité de la rtl.

    Exemple liste tous les fichiers appartenant au répertoire d:\monrepertoire commençant par nav_ et ayant pour extension .xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    var
      Fichiers: TArray<string>;
      nomF: string;
     
    begin
      Fichiers := TDirectory.GetFiles('d:\monrepertoire','nav_*.xml');
      for nomF in Fichiers do
      begin
       .........//traitement des fichiers
      end;


    Rapprochez-vous de la documentation de votre version pour d'autres informations sur cette unité évoluant régulièrement
    http://docwiki.embarcadero.com/Libra...vious_Versions
    étant donné que je dois pouvoir modifier cette FAQ, je suis prêt à le faire si validée

  20. #40
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 104
    Points : 1 547
    Points
    1 547
    Billets dans le blog
    5
    Par défaut
    Ca me va parfaitement

Discussions similaires

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

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