[Résolu][Calc] Fonction Presse papier sous LibO 6
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
[Résolu][Calc] Fonction Presse papier sous LibO 6
Bonjour,
Les fonctions BASIC pour le presse papier (vider, remplir, lire) trouvéeshttps://forum.openoffice.org/fr/forum/v ... 4&p=186906 fonctionnaient parfaitement en version Libre Office 5 mais plantage en version 6
Version: 6.0.7.3 (x64)
Build ID: dc89aa7a9eabfd848af146d5086077aeed2ae4a5
Threads CPU : 2; OS : Windows 6.1; UI Render : par défaut;
Locale : fr-FR (fr_FR); Calc: group
Les fonctions Function EmptyClipboard Lib "user32" () As Long et Function SetClipboardData Lib "user32" _
(ByVal wFormat As Long, ByVal hMem As Long) As Long ne fonctionnent plus
Est-ce une histoire de 64 bits à la place de 32 ?
Merci de vos avis si vous avez rencontré ce pb
Cordialement
Les fonctions BASIC pour le presse papier (vider, remplir, lire) trouvéeshttps://forum.openoffice.org/fr/forum/v ... 4&p=186906 fonctionnaient parfaitement en version Libre Office 5 mais plantage en version 6
Version: 6.0.7.3 (x64)
Build ID: dc89aa7a9eabfd848af146d5086077aeed2ae4a5
Threads CPU : 2; OS : Windows 6.1; UI Render : par défaut;
Locale : fr-FR (fr_FR); Calc: group
Les fonctions Function EmptyClipboard Lib "user32" () As Long et Function SetClipboardData Lib "user32" _
(ByVal wFormat As Long, ByVal hMem As Long) As Long ne fonctionnent plus
Est-ce une histoire de 64 bits à la place de 32 ?
Merci de vos avis si vous avez rencontré ce pb
Cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Denis_21 le 20 mars 2019 16:24, modifié 2 fois.
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc]Fonction Presse papier et version 6
Dans le fil que tu donnes, pourquoi ne suis-tu pas la piste que j'évoque ?
As-tu au moins vérifié que la bibliothèque user32 existait ?Denis_21 a écrit :Est-ce une histoire de 64 bits à la place de 32 ?
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: [Calc] Fonction Presse papier sous LibO 6
Bonjour,
Comment reproduit-on le plantage ?Denis_21 a écrit : mais plantage en version 6
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
Re: [Calc] Fonction Presse papier sous LibO 6
Bonjour,
Dans le module1 lancer la procédure qui devrait mettre une phrase dans le presse-papier
Dans le module1 lancer la procédure qui devrait mettre une phrase dans le presse-papier
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
Re: [Calc] Fonction Presse papier sous LibO 6
Oui User32 et Kernel32 sont bien en c:\windows\system32
elles sont liées à Windows, il n'y a eu que le changement de LibO5 en LibO6
elles sont liées à Windows, il n'y a eu que le changement de LibO5 en LibO6
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Fonction Presse papier sous LibO 6
Et donc...
Sauf à vouloir se retrouver dans la situation où tu es.
Je ne vois aucun intérêt à utiliser des DLL propriétaires Windows.Dude a écrit :Dans le fil que tu donnes, pourquoi ne suis-tu pas la piste que j'évoque ?
Sauf à vouloir se retrouver dans la situation où tu es.
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: [Calc] Fonction Presse papier sous LibO 6
Je n'ai pas de plantage mais seulement l'affichage des boites de dialogue (en anglais) cérites dans la Macro.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
Re: [Calc] Fonction Presse papier sous LibO 6
Sur le fond, Dude a raison, il faut éviter des Dll Windows pour pleins de raisons et préférer le Dispatcher
C'est ce que je fais quand il s'agit de copier des cellules ou zones Calc dans le presse-papier mais s'agissant de champs de formulaire, je n'arrive pas à copier directement la valeur d'un champ de formulaire dans le presse-papier
Je dois passer par 2 étapes, copie de la valeur du champ dans une cellule puis cellule dans le presse-papier
Cela fonctionne mais c'est loin d'être élégant
Voir exemple joint simple à partir une boite de dialogue
Peut-être faut-il faire évoluer le titre, il s'agit là de copier un champ de formulaire dans le presse papier à partir du Dispatcher
Merci
C'est ce que je fais quand il s'agit de copier des cellules ou zones Calc dans le presse-papier mais s'agissant de champs de formulaire, je n'arrive pas à copier directement la valeur d'un champ de formulaire dans le presse-papier
Je dois passer par 2 étapes, copie de la valeur du champ dans une cellule puis cellule dans le presse-papier
Cela fonctionne mais c'est loin d'être élégant
Voir exemple joint simple à partir une boite de dialogue
Peut-être faut-il faire évoluer le titre, il s'agit là de copier un champ de formulaire dans le presse papier à partir du Dispatcher
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Fonction Presse papier sous LibO 6
Il faut se servir du service SystemClipboard.
Un peu complexe car il faut le coupler à de l'écoute sur les opérations de transfert avec le presse-purée.
Il suffit d'ajouter une routine pour la copie et les 3 listeners afférents.
On notera la déclaration en global d'une variable pour le transfert.
Puis de corriger ton code existant en y ajoutant simplement deux lignes :
Un peu complexe car il faut le coupler à de l'écoute sur les opérations de transfert avec le presse-purée.
Il suffit d'ajouter une routine pour la copie et les 3 listeners afférents.
On notera la déclaration en global d'une variable pour le transfert.
Code : Tout sélectionner
' Du code fourni depuis le forum OpenOffice
' https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=60087
Global sTransfert$
Sub CopieDansPP()
Dim oDude as object
oPP = createUnoService ("com.sun.star.datatransfer.clipboard.SystemClipboard")
oTR = createUnoListener("TR_", "com.sun.star.datatransfer.XTransferable")
oPP.setContents(oTR, oDude)
End sub
Function TR_getTransferData(aF as com.sun.star.datatransfer.DataFlavor )
If (aF.MimeType = "text/plain;charset=utf-16") Then TR_getTransferData = sTransfert
End Function
Function TR_getTransferDataFlavors()
Dim aF as new com.sun.star.datatransfer.DataFlavor
aF.MimeType = "text/plain;charset=utf-16"
aF.HumanPresentableName = "Unicode-Text"
TR_getTransferDataFlavors = Array(aF)
End Function
Function TR_isDataFlavorSupported(aF as com.sun.star.datatransfer.DataFlavor) as Boolean
TR_isDataFlavorSupported = (aF.MimeType = "text/plain;charset=utf-16")
End Function
Code : Tout sélectionner
Sub CopierChampFormulaireDansPressePapier(oev as object)
Dim oDocument as object, oFeuille as object, oCellule as object
Dim monChamp as object, monTexte as string
monChamp=oev.source.context.GetControl("monChamp")
sTransfert = monChamp.text
CopieDansPP()
end sub
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
Re: [Calc] Fonction Presse papier sous LibO 6
Très fort et propre, ça fonctionne parfaitement
J'ai aussi le problème symétrique pour coller le presse-papier dans un champ de formulaire, comme pour remplir le presse-papier, je m'en sors avec une bidouille Dispatcher et cellule intermédiaire mais lourd et pas très élégant
Avant de mettre résolu, pour être complet sur le sujet, est-il possible récupérer le contenu du presse-papier sans passer par les fonctions API
Merci
J'ai aussi le problème symétrique pour coller le presse-papier dans un champ de formulaire, comme pour remplir le presse-papier, je m'en sors avec une bidouille Dispatcher et cellule intermédiaire mais lourd et pas très élégant
Avant de mettre résolu, pour être complet sur le sujet, est-il possible récupérer le contenu du presse-papier sans passer par les fonctions API
Merci
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Fonction Presse papier sous LibO 6
Encore un problème XY !
Franchement, je ne vois toujours pas l'intérêt de passer par un tiers pour de l'échange de donnée.
Tiers qui est du ressort du système d'exploitation et dont tu ne peux maîtriser le contenu.
Pour cette opération, on utilise un service de conversion afin de récupérer du texte brut :
A toi ensuite d'adapter suivant le contexte pour coller l'information.
Franchement, je ne vois toujours pas l'intérêt de passer par un tiers pour de l'échange de donnée.
Tiers qui est du ressort du système d'exploitation et dont tu ne peux maîtriser le contenu.
Pour cette opération, on utilise un service de conversion afin de récupérer du texte brut :
Code : Tout sélectionner
Function RecupDepuisPP() As String
oPP = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
oSC = createUnoService("com.sun.star.script.Converter")
oContenu = oPP.getContents
oType = oContenu.getTransferDataFlavors()
For i = 0 To UBound(oType)
If oType(i).MimeType = "text/plain;charset=utf-16" Then Exit For
Next i
RecupDepuisPP = oSC.convertToSimpleType _
(oContenu.getTransferData(oType(i)), _
com.sun.star.uno.TypeClass.STRING)
End Function
-
- Membre lOOyal
- Messages : 43
- Inscription : 04 août 2017 08:08
[Résolu] [Calc] Fonction Presse papier sous LibO 6
Fonctionne parfaitement
Fonctions mise dans le presse papier et récupération à privilégier (enfin selon moi surtout pour du simple texte) effectivement par rapport au Dispatcher ou API
Grand merci
Cordialement
Fonctions mise dans le presse papier et récupération à privilégier (enfin selon moi surtout pour du simple texte) effectivement par rapport au Dispatcher ou API
Grand merci
Cordialement
LibreOffice Version: 6.0.7.3 (x64)
Win 7 Professionnel
Win 7 Professionnel