FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).
Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.
L'équipe Delphi de Developpez.com.
L'ouverture d'un document s'effectue grâce à la fonction LoadComponentFromURL. La particularité d'OpenOffice.org est la manipulation des noms de fichiers sous la forme d'URL. Ainsi pour l'ouverture du fichier C:\Documents and Settings\Jerome\Mes documents\demo.sxw il faudra passer comme paramètre à la fonction le nom de fichier suivant :
file:///C:/Documents and Settings/Jerome/Mes documents/demo.sxw
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | var OpenDesktop : Variant; LoadParams : Variant; NomFichier : AnsiString; begin OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop'); LoadParams := VarArrayCreate([0, -1], varVariant); NomFichier := StringReplace('C:\Documents and Settings\Jerome\Mes documents\demo.sxw' , '\', '/', [rfReplaceAll, rfIgnoreCase]); Document := openDesktop.LoadComponentFromURL( 'file:///'+NomFichier, '_blank', 0, LoadParams); end; |
Comme pour l'ouverture d'un document, nous devons utiliser la fonction LoadComponentFromURL. Au lieu de passer comme paramètre l'URL du fichier, nous allons passer un des paramètres suivant, selon le type de document que l'on souhaite obtenir :
- private:factory/swriter : Document Traitement de texte Writer
- private:factory/scalc : Document Tableur Calc
- private:factory/sdraw : Document dessin Draw
- private:factory/simpress Document présentation Impress
- private:factory/smath : Document Formule mathématique
- private:factory/swriter/GlobalDocument : Document Maitre
- Traitement de texte private:factory/swriter/web : Document HTML
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 | var OpenDesktop : Variant; LoadParams : Variant; begin OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop'); LoadParams := VarArrayCreate([0, -1], varVariant); Document := openDesktop.LoadComponentFromURL( 'private:factory/swriter', '_blank', 0, LoadParams); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var OpenDesktop : Variant; LoadParams : Variant; CoreReflection : Variant; PropertyValue : Variant; begin OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop'); LoadParams := VarArrayCreate([0, 0], varVariant); CoreReflection := OpenOffice.createInstance('com.sun.star.reflection.CoreReflection'); CoreReflection .forName('com.sun.star.beans.PropertyValue') .createObject(PropertyValue); PropertyValue.Name := 'ReadOnly'; PropertyValue.Value := true; LoadParams[0] := PropertyValue; Document := OpenDesktop.LoadComponentFromURL( 'private:factory/swriter', '_blank', 0, LoadParams); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 | Var DocumentExist:Boolean; Begin DocumentExist := not (VarIsEmpty(Document) or VarIsNull(Document)); end; |
Après l'ouverture d'un document il est pratique d'obtenir la confirmation du type de document ouvert La fonction SupportsService permet d'obtenir ce renseignement.
Function SupportsService (argument : string): boolean;
L'argument correspond a l'application testée :
- com.sun.star.sheet.SpreadsheetDocument : Tableur Calc
- com.sun.star.text.TextDocument :Traitement de texte Writer
- com.sun.star.drawing.DrawingDocument : Logiciel de dessinDraw
- com.sun.star.formula.FormulaProperties : Editeur de Formule mathématique Math
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | if (Document.SupportsService('com.sun.star.sheet.SpreadsheetDocument')) then Showmessage('Document Tableur') else if (Document.SupportsService('com.sun.star.text.TextDocument')) then Showmessage('Document Traitement de texte') else if (Document.SupportsService('com.sun.star.drawing.DrawingDocument')) then Showmessage('Document Dessin') else if (Document.SupportsService('com.sun.star.formula.FormulaProperties')) then Showmessage('Document Formule mathématique') else Showmessage('Type de Document inconnu'); |
La fonction StoreAsURL est l'équivalent de la fonction enregistrer sous.
Code delphi : | Sélectionner tout |
1 2 3 | Begin document.storeAsUrl('file:///c:/test.sxw', VarArrayCreate([0, -1], varVariant)); end; |
Pour imprimer le document avec l'imprimante par défaut
Code delphi : | Sélectionner tout |
1 2 3 | begin document.print(VarArrayCreate([0, -1], varVariant)); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Var printerDesc : variant; PrinterOpt : variant; PropertyValue : Variant; CoreReflection : Variant; begin CoreReflection := OpenOffice.createInstance('com.sun.star.reflection.CoreReflection'); CoreReflection .forName('com.sun.star.beans.PropertyValue') .createObject(propertyValue); PrinterDesc :=VarArrayCreate([0, 0], varVariant); propertyValue.Name:= 'Name'; propertyValue.Value := 'FinePrint pdfFactory Pro'; PrinterDesc[0] := propertyValue; Document.setPrinter(PrinterDesc); printerOpt := VarArrayCreate([0, -1], varVariant); document.print(PrinterOpt); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Var PrinterOpt : variant; PropertyValue : Variant; CoreReflection : Variant; begin CoreReflection := OpenOffice.createInstance('com.sun.star.reflection.CoreReflection'); CoreReflection .forName('com.sun.star.beans.PropertyValue') .createObject(propertyValue); printerOpt := VarArrayCreate([0, 1], varVariant); propertyValue.Name := 'Pages'; propertyValue.Value := '1-2'; printerOpt[0] := propertyValue; propertyValue.Name := 'CopyCount'; propertyValue.Value := 2; printerOpt[1] := propertyValue; document.print(PrinterOpt); end; |
En utilisant la fonction dispose, le contrôle va être libéré et l'application fermée.
Si vous n'avez pas enregistré le document, celui ci ne sera pas sauvegardé.
Code delphi : | Sélectionner tout |
1 2 3 | begin Document.dispose; end; |
Il existe deux façons de coller sous OpenOffice :
- soit en utilisant le service de macro uno,
- soit en récupérant les informations directement du presse-papier.
La première solution est simple :
Code delphi : | Sélectionner tout |
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 78 79 | function IsNullEmpty(AObject: Variant): Boolean; begin Result := VarIsEmpty(AObject) or VarIsNull(AObject) or VarIsClear(AObject); end; function CreateUnoService(const AServiceName: String): Variant; begin try Result := AApp.createInstance(AServiceName); except end; end; procedure StartOpenOffice; begin try if not IsNullEmpty(AApp) then AApp := Unassigned; 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'); except on E: Exception do begin AApp := Unassigned; Abort; end; end; end; function PasteClipBoard: String; var OOoClip, OOoClipContents, OOoTypes: Variant; I: Integer; begin Result := ''; try OOoClip := CreateUnoService('com.sun.star.datatransfer.clipboard.SystemClipboard'); OOoClipContents := OOoClip.getContents; OOoTypes := OOoClipContents.getTransferDataFlavors; For I := VarArrayLowBound(OOoTypes, 1) to VarArrayHighBound(OOoTypes, 1) do begin if OOoTypes[i].HumanPresentableName = 'Unicode-Text' then begin Result := String(OOoClipContents.getTransferData(OOoTypes[i])) + #13#10; Break; end; end; except on E: Exception do begin CTErrorDlg('OfficeReportCreation', [E.Message]); Abort; end; end; end; procedure TForm1.PasteClipBoard; var OOoServer, OOoDesktop, OOoDisp, OOoDocument: variant; begin // On vérifie qu'il n'y a pas déja un service openoffice d'instancié if not isNullEmpty(OOoServer) then OOoServer := Unassigned; Screen.Cursor:= crHourglass; try OOoServer := CreateOleObject('com.sun.star.ServiceManager'); OOoDesktop := CreateUnoService('com.sun.star.frame.Desktop'); OOoDisp := CreateUnoService('com.sun.star.frame.DispatchHelper'); OOoDocument := OOoDesktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, VarArrayCreate([0, -1], varVariant)); finally Screen.Cursor:= crDefault; end; OOoDisp.executeDispatch(OOoDesktop.CurrentFrame, '.uno:Paste', '', 0, VarArrayCreate([0, -1], varVariant)); end; |
Code delphi : | Sélectionner tout |
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | function IsNullEmpty(AObject: Variant): Boolean; begin Result := VarIsEmpty(AObject) or VarIsNull(AObject) or VarIsClear(AObject); end; function CreateUnoService(const AServiceName: String): Variant; begin try Result := AApp.createInstance(AServiceName); except end; end; procedure StartOpenOffice; begin try if not IsNullEmpty(AApp) then AApp := Unassigned; 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'); except on E: Exception do begin AApp := Unassigned; Abort; end; end; end; function PasteClipBoard: String; var OOoClip, OOoClipContents, OOoTypes: Variant; I: Integer; begin Result := ''; try OOoClip := CreateUnoService('com.sun.star.datatransfer.clipboard.SystemClipboard'); OOoClipContents := OOoClip.getContents; OOoTypes := OOoClipContents.getTransferDataFlavors; For I := VarArrayLowBound(OOoTypes, 1) to VarArrayHighBound(OOoTypes, 1) do begin if OOoTypes[i].HumanPresentableName = 'Unicode-Text' then begin Result := String(OOoClipContents.getTransferData(OOoTypes[i])) + #13#10; Break; end; end; except on E: Exception do begin CTErrorDlg('OfficeReportCreation', [E.Message]); Abort; end; end; end; procedure TForm1.PasteClipBoard; var OOoServer, OOoDesktop, OOoDocument, OOoClip, OOoClipContents, OOoTypes, VariantArr: Variant; I: Integer; AStr: String; begin // On vérifie qu'il n'y a pas déja un service openoffice d'instancié if not isNullEmpty(OOoServer) then OOoServer := Unassigned; Screen.Cursor:= crHourglass; try OOoServer := CreateOleObject('com.sun.star.ServiceManager'); OOoDesktop := CreateUnoService('com.sun.star.frame.Desktop'); // On crée un tableau de variant qui contiendra la propriété "cachée" du document VariantArr := VarArrayCreate([0, 0], varVariant); VariantArr[0] := OOoServer.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); VariantArr[0].Name := 'Hidden'; VariantArr[0].Value := True; OOoDocument := OOoDesktop.LoadComponentFromURL('private:factory/swriter','_blank',0,VariantArr); finally Screen.Cursor:= crDefault; end; try // On instancie le service openoffice gérant le presse papier OOoClip := CreateUnoService('com.sun.star.datatransfer.clipboard.SystemClipboard'); // On récupère le contenu de presse papier OOoClipContents := OOoClip.getContents; // On récupère les formats de données compatibles: Unicode-Text, Richtext, Bitmap, HTML-Text OOoTypes := OOoClipContents.getTransferDataFlavors; // L'objet récupéré nous donne accès aux propriétés: // HumanPresentableName : le nom du format des données façon "intelligible" ex.: Unicode-Text // MimeType : le nom du format des données ex.: text/plain;charset=utf-16 // DataType : le nom des classes d'objet à utiliser pour la conversion ex.: String AStr := ''; For I := VarArrayLowBound(oTypes, 1) to VarArrayHighBound(oTypes, 1) do begin // Ce qui nous intéresse, c'est de récupérer une chaine // donc on s'arrete dés que l'on a trouvé une données de type chaine if oTypes[i].HumanPresentableName = 'Unicode-Text' then begin // getTransferData retourne un variant, mais comme on sait que c'est une chaine on caste la valeur de retour. AStr := String(oClipContents.getTransferData(oTypes[i])) + #13#10; break; end; end; // Appel de la fonction getText qui retourne l'ensemble du texte du document sous forme d'objet, // sur lequel on appelle la fonction setString qui écrase le contenu par la valeur chaine OOoDocument.getText.setString(AStr); except on e:Exception do ShowMessage(e.Message + #13#10 + e.ClassName); end; end; |
Cette QR a été testée sous Delphi 7 entreprise et openoffice 2.0.1
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.