[Résolu][Writer] Effectuer un rétro-appel

Discussions et questions sur tout ce qui concerne la programmation sous StarOffice NeoOffice ou OpenOffice.org tous langages et tous modules confondus.

Modérateur: Vilains modOOos

Règles du forum
:alerte: 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 !

[Résolu][Writer] Effectuer un rétro-appel

Messagepar jean-christophe » 30 Oct 2009 12:29

Bonjour,

Comment déclencher l'appel d'une fonction passée en paramètre ? (callback)

Exemple :
Code: Tout sélectionner   AgrandirRéduire
Sub Fonc1(sVal as String)
sVal = "Toto"
End Sub

Sub Fonc2(pFunc as ???)
dim sText as String
pFunc(sText)
End Sub


Sub Main()
Fonc2(Fonc1)
End Sub


Un lien qui parle de ce sujet :
viewtopic.php?f=8&t=17509

Code: Tout sélectionner   AgrandirRéduire
sub callByName(sFonction as string ,aParams as variant)
dim oDS as object       'objet dispatch helper utilisé pour le call de la sub
dim sURL as string      'string qui contient l'URL de la fonction a appeler

on error goto CallByName_error

   'initilisation objet dispatchhelper
   oDS = createUnoService("com.sun.star.frame.DispatchHelper")

   'initialisation de l'URL du script Basic a appeler : Standard,CallByName."+sFonction+"?language=Basic&location=document
   'le script est dans la bibliothèque Standard du document contenant les macro
   'le script a appeler est dans le module CallByName
   'le nom du script basic a appeller est dans la variable sFonction
   sURL = "vnd.sun.star.script:Standard."+getModule(sFonction)+"."+sFonction+"?language=Basic&location=document"
     
   'appel du script
   oDS.executeDispatch(ThisComponent.CurrentController.frame,sURL,"",0,aParams())
   
   exit sub
CallByName_error:
   on error resume next
   msgbox "erreur dans la procédure CallByName"
   on error goto 0
end sub

'détermine le module basice de la bibliothèque standard qui contient la sub à exécuter
'-------------------------------------------------------------------------------------
function getModule(sFunction as string) as string
CONST LibraryName = "Standard"

dim oLib as object      'objet libarie Standard
dim aModules()         'tableau de tous les modules de la librairie Standard
dim iC as Integer      'indice de boucle
dim sModule   'le module à analyser (texte basic)

on error goto getModule_error

   oLib = BasicLibraries.getByName( LibraryName )   'initialise l'objet librarie
   getModule = ""
   aModules = oLib.getElementNames()         'initialise le tableau qui contient tous les modules
   for iC = 0 to ubound(aModules)            'pour chacun des modules
      sModule = oLib.getByName(aModules(iC))   'charge le contenu texte du module dans la variable Smodule
       if RegExpFind(sModule, sFunction) <> "-1" then
          getModule = aModules(iC)
          exit function
       end if
   next iC
   exit function
getModule_error:
   on error resume next
   msgbox "erreur dans la procédure getModule"
   on error goto 0
end function
OOo 3.1 Windows XP SP2
jean-christophe
Membre OOorganisé
Membre OOorganisé
 
Messages: 75
Inscrit le: 12 Fév 2007 11:54

Retour vers Macros et API

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 3 invités