OLE OpenOffice et Windev

Signaler
Messages postés
2
Date d'inscription
lundi 30 juin 2008
Statut
Membre
Dernière intervention
26 juillet 2010
-
Messages postés
2
Date d'inscription
lundi 30 juin 2008
Statut
Membre
Dernière intervention
26 juillet 2010
-
Bonjour à tous.
Comme vous avez vu dans le titre mon problème concerne WINDEV, mais en faite le problème et plutôt du coté de la programmation de open office.

Je désire piloter OpenOffice, il y a beaucoup d'exemple pour Windev et j'arrive à réaliser la plus part des fonctions désirées, sauf une !
Mon problème est sur la fonction CréateUnoListener.

par exemple
sub SetupKeyHandler
oController = thisComponent.currentController
IannzExampleKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")
oController.addKeyHandler(IannzExampleKeyHandler) ' Enregistre le listener
end sub

Après plusieurs jour de recherche sur le net, je n'ai pas trouvé le moyen de convertir cette procédure. Par-contre j'ai trouvé beaucoup qui recherchais le moyen de la convertir dans différent langage !
J'ai trouvé ce code :
[url]http://files.codes-sources.com/fichier.aspx?id=44651&f=OOoTools.pas#/url
qui converti pas mal de fonction OpenOffice (cela m'a bien aidé) mais pas pour CréateUnoListener.

Y a t il quelqu'un d'expérimenté en Basic OpenOffice ici ?
Merci de votre aide.

1 réponse

Messages postés
2
Date d'inscription
lundi 30 juin 2008
Statut
Membre
Dernière intervention
26 juillet 2010

Bonjour a tous,

Je continue l'état d'avancement, Il y a du mieux !! :)

Comme indiqué ici , il semblerais que pour gérer un listener il faut un programme tiers, soit une dll ActiveX voir le lien

[url]http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Bridge/Automation_Objects_with_UNO_Interfaces#Examples/url

Dll ( nouvelle dll trouvée sur le web ici : http://www.oehive.org/project/OOCalcLib un peu plus complète que la precedente)
La classe s'appelle "Listener" et la dll "OOoevent.dll" Dll faite en VB6
Option Explicit

PUBLIC Event disposing(Source)
PUBLIC Event terminate(Source)
PUBLIC Event notifyevent(eventname, Source)
PRIVATE interfaces(0) As string

PUBLIC Property Get Bridge_ImplementedInterfaces() As Variant
Bridge_ImplementedInterfaces = interfaces
END Property

PRIVATE Sub Class_Initialize()
interfaces(0) = "com.sun.star.document.XEventListener" 'document level
END Sub

'create A sub FOR EACH OOoevent TO be trapped
PUBLIC Sub disposing(ByVal Source As object)
MsgBox "disposing call"
RaiseEvent disposing(Source)
END Sub

'these two dont appear TO work odd!
PUBLIC Sub terminate(ByVal Source As object)
RaiseEvent terminate(Source)
END Sub

'IF this worked would solve ALL problems
PUBLIC Sub notifyevent(ByVal eventname As string, ByVal Source As object)
MsgBox "notifyevent"
RaiseEvent notifyevent(eventname, Source)
END Sub


quand au code Windev
DocEventListener est un objet OLE dynamique
DocEventListener = allouer un objet OLE("OOoevent.Listener")
oDocument>>AddEventListener(DocEventListener)


Quand je lance le prog, ouverture de Oo OK, enregistremment du Listener ci-desus OK, et a la fermerture du Document Oo j'ai bien le MsgBox "disposing call"
Quand au "notifyevent", il ne se passe rien ! je pense que c'est une classe qu'il faut appeller pour en registrer l'évenement désiré dans Oo ? pas sur :?

J'ai envoyé un mail a celui qui a posté la dll, voici sa réponse


'create a Public Event Matching the OOoevent sub below 'so it gets passed back to calling program 'To fire this event, use RaiseEvent with the following syntax:
'RaiseEvent xxxxxx[(arg1, arg2, ... , argn)] in the 'corresponding Sub below 'Event can be trapped in calling prog by 'objEventListener:enable-events("OOoEvents").
'and creating int proc called OOoevents.xxxxx

Public Event disposing(source)
Public Event terminate(source)
Public Event notifyevent(eventname, source)

Private interfaces(0) As String

Public Property Get Bridge_ImplementedInterfaces() As Variant
Bridge_ImplementedInterfaces = interfaces End Property

Private Sub Class_Initialize()
'interfaces(0) = "com.sun.star.lang.XEventListener" 'works good in OOo
V2
interfaces(0) = "com.sun.star.document.XEventListener"
End Sub

'create a sub for each OOoevent to be trapped Public Sub disposing(ByVal source As Object)
RaiseEvent disposing(source)
End Sub
Public Sub terminate(ByVal source As Object)
RaiseEvent terminate(source)
End Sub

Public Sub notifyevent(ByVal eventname As String, ByVal source As Object)
RaiseEvent notifyevent(eventname, source) End Sub


This will fire on the notifyevent so it passes across the event and the source of the event then you can handle the notify event in youre program as you did for the disposing .



Faut il appeler "notifyevent" ? avec quel paramètres?


je tourne un peu en rond !
est ce que tout cela parle a quelqu'un ?
Merci de votre aide.