Un code dont je ne suis pas l'auteur et qui me semble devoir figurer dans cette section.
Ce sujet est issu des fils :
http://user.services.openoffice.org/fr/ ... 48#p110048
http://user.services.openoffice.org/fr/ ... =8&t=23632
Les programmes utilisant le tableur nécessitent souvent des interactions avec l'utilisateur, et parmi celles-ci la saisie de référence.
Le but est d'afficher d'un dialogue le permettant aussi bien au clavier qu'à la souris, à l'instar de ce que propose OOo :
Ceci s'obtient par la création d'un listener dont la documentation se trouve ici :
http://wiki.services.openoffice.org/wik ... _Selection
L'exemple issu de ce fil du forum anglophone, complète cela par la gestion de l'image du bouton d'appel.
Le programme va "rechercher" dans les ressources l'image utilisée par OOo. L'URL est celle-ci :
Code : Tout sélectionner
aProps(0).Value = "private:graphicrepository/formula/res/refinp1.png"
Code : Tout sélectionner
C:\Program Files\OpenOffice.org 3\Basis\share\config\images.zip\formula\res\refinp1.png
Code : Tout sélectionner
REM ***** BASIC *****
Private oDialog As Object
Private oRangeSelectionListener As Object
Private bNotInRefMode As Boolean
Private bDialogShown As Boolean
Private nExecute As Integer
Sub RangeSelection
DialogLibraries.loadLibrary("Standard")
oDialog = CreateUnoDialog( _
DialogLibraries.getByName("Standard").getByName("Dialog1"))
' position of the image is version dependent
oGP = CreateUnoService("com.sun.star.graphic.GraphicProvider")
Dim aProps(0) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "URL"
aProps(0).Value = "private:graphicrepository/formula/res/refinp1.png"
oGraphic = oGP.queryGraphic(aProps)
btn_rangeselection = oDialog.getControl("btn_rangeselection").getModel()
btn_rangeselection.ImagePosition = com.sun.star.awt.ImagePosition.Centered
btn_rangeselection.Graphic = oGraphic
bDialogShown = True
bNotInRefMode = True
While bDialogShown
If bNotInRefMode Then
If oDialog.execute() = 0 and bNotInRefMode Then bDialogShown = False
End If
Wait 500
WEnd
If nExecute = 1 Then
msgbox oDialog.getControl("edit_range").getText()
End If
oDialog.dispose()
End Sub
' ok button pressed
Sub OKPressed
bDialogShown = False
nExecute = 1
oDialog.endExecute()
End Sub
' cancel button pushed
Sub Canceled( ev )
bDialogShown = False
nExecute = 0
oDialog.endExecute()
End Sub
Sub SelectDataRange( ev )
' datarange select button pushed
oController = ThisComponent.getCurrentController()
Dim aProps(2) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "InitialValue"
aProps(0).Value = oDialog.getControl("edit_range").getText()
aProps(1).Name = "Title"
aProps(1).Value = "Select Data Range"
aProps(2).Name = "CloseOnMouseRelease"
aProps(2).Value = False
oRangeSelectionListener = CreateUnoListener( "RangeSelection_", _
"com.sun.star.sheet.XRangeSelectionListener")
'oDialog.setVisible(False)
bNotInRefMode = False
oDialog.endExecute()
oController.addRangeSelectionListener(oRangeSelectionListener)
oController.startRangeSelection(aProps())
End Sub
' range selection listener
Sub RangeSelection_done( ev )
oRange = ThisComponent.getCurrentSelection()
'mri ev.Source
If oRange.supportsService( "com.sun.star.sheet.SheetCellRange" ) Then
oDialog.getControl("edit_range").setText( ev.RangeDescriptor )
End If
bNotInRefMode = True
'oDialog.execute()
oController = ThisComponent.getCurrentController()
oController.removeRangeSelectionListener(oRangeSelectionListener)
End Sub
Sub RangeSelection_aborted( ev )
'oDialog.setVisible(True)
oController = ThisComponent.getCurrentController()
oController.removeRangeSelectionListener(oRangeSelectionListener)
bNotInRefMode = True
End Sub
Sub RangeSelection_disposing( ev )
End Sub