Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources et autres ressources pour la rubrique Delphi.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/11/2008, 18h27   #21
Pedro
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 406
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 406
Points : 6 771
Points : 6 771
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

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2008, 18h39   #22
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
Serait-ce ceci ? Comment coller sous OpenOffice ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2008, 12h55   #23
HumanTool
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 272
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 34
Localisation : France

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

Informations forums :
Inscription : janvier 2006
Messages : 272
Points : 293
Points : 293
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)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2008, 18h35   #24
anapurna
Membre Expert
 
Avatar de anapurna
 
Développeur informatique
Inscription : 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 914
Points : 1 914
Par défaut [QR]Comment ajouter un boutton dans un TStringGrid ?

[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
__________________
Citation:
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
anapurna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2008, 19h47   #25
Pedro
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 406
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 406
Points : 6 771
Points : 6 771

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

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2008, 16h15   #26
ornitho
Candidat au titre de Membre du Club
 
Inscription : octobre 2008
Messages : 35
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : octobre 2008
Messages : 35
Points : 10
Points : 10
Par défaut Comment interagir avec le midi.

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
ornitho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2008, 19h06   #27
Pedro
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 406
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 406
Points : 6 771
Points : 6 771
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

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2009, 11h19   #28
Aos
Membre habitué
 
Inscription : janvier 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 189
Points : 143
Points : 143
Par défaut Comment connaitre sur quel composant est la focalisation ?

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...
Aos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2009, 14h05   #29
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
(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.
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2009, 14h19   #30
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
(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 ?
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 17h14   #31
HumanTool
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 272
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 34
Localisation : France

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

Informations forums :
Inscription : janvier 2006
Messages : 272
Points : 293
Points : 293
Par défaut Automation export PDF Word

[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)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 17h20   #32
HumanTool
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 272
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 34
Localisation : France

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

Informations forums :
Inscription : janvier 2006
Messages : 272
Points : 293
Points : 293
Par défaut Automation export PDF Excel

[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)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 17h43   #33
HumanTool
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 272
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 34
Localisation : France

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

Informations forums :
Inscription : janvier 2006
Messages : 272
Points : 293
Points : 293
Par défaut Automation export PDF OpenOffice Writer

[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)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 17h50   #34
HumanTool
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 272
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 34
Localisation : France

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

Informations forums :
Inscription : janvier 2006
Messages : 272
Points : 293
Points : 293
Par défaut Automation export PDF OpenOffice Calc

[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)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web