Bonjour,

J'ai trouvé comment rafraîchir les contrôles de la fenêtre ou plutôt j'ai 
compris que la fenêtre est un objet graphiquement figé qu'il fallait recharger 
à chaque modification de contrôle.

Pour ceux qui souhaitent créer une boîte de dialogue non modal, soit une 
fenêtre que l'on peut laisser sur le côté de l'écran pour travailler avec, 
voici la démarche :

1) créer une boîte dialogue avec l'éditeur (pour la démonstration on appelera 
cette boite "MonDialogue") et y insérer au minimum un bouton "masquer" et une 
zone de liste par exemple

2) copier-coller le code OOBasic suivant (code de Bob que j'ai réactualisé) :

------------------------------------------------------------------------------------------------------

Option Explicit
Global ListeDialog(0) As String
Global oDialogModel As Object
Global oDialogControl As Object
Global oDialogList As Object

'------------------------------------------------------------------------------------------------------
'Sub principale que je lance avec un bouton d'une barre d'outils

Sub Main

' Chargement des librairies
GlobalScope.DialogLibraries.LoadLibrary("Standard")
GlobalScope.BasicLibraries.LoadLibrary ("Standard")

'Création du service boîte de dialogue
oDialogModel = createUnoService("com.sun.star.awt.UnoControlDialogModel" )

'Définition de la variable oDialogControl en tant que boîte de dialogue 
"MonDialogue" de l'éditeur
oDialogControl = createUnoDialog(DialogLibraries.Standard.MonDialogue)

'Création de la boîte de dialogue graphique figée - définition de la variable 
oDialogControl en tant que telle.
oDialogControl.setModel(oDialogModel)
oDialogControl.setVisible(true)

'------------------------------------------------------------------------------------------------------
'Sub associée à un bouton ou à un évenement sur la zone de liste

Sub ModificationZoneListe()

'définition d'un variable tableau pour contenir les éléments de la zone de liste
Dim ListeDialog()

'fermeture de la boîte de dialogue graphique figée
oDialogControl.setVisible(false)

'redefinition de la variable oDialogControl en tant que boîte de dialogue de 
l'éditeur
oDialogControl = createUnoDialog(DialogLibraries.Standard.DialogCCTP)

'définition de la variable oDialogList en tant que l'objet zone de liste nommée 
"ZoneListe"
oDialogList = oDialogControl.getControl("ZoneListe")

'
Saisir ici le traitement des informations de la zone de liste - modification de 
la variable ListeDialog()
'

' Vidage des éléments contenus dans la zone de liste
oDialogList.removeItems(0,oDialogList.getItemCount())

' Remplissage de la zone de liste avec la variable ListeDialog()
oDialogList.addItems(ListeDialog(),0)

'Création de la boîte de dialogue graphique figée
oDialogControl.setModel(oDialogModel)
oDialogControl.setVisible(true)

End Sub
'------------------------------------------------------------------------------------------------------
' Sub associée au bouton "Masquer"

Sub MasquerDialog()

oDialogControl.setVisible(false)

end sub
'------------------------------------------------------------------------------------------------------

Il reste encore plusieurs points a chercher :
- pouvoir fermer la fenêtre avec la croix de la barre de titre plutôt qu'un 
bouton
- mémoriser l'emplacement de la fenêtre pour éviter que celle-ci réapparaisse 
au milieu de l'écran
- pouvoir modifier la taille de la fenêtre
...

Bon codage à tous !

Gwénaël

Envoyez vos cartes de voeux depuis www.laposte.net
Elles seront ensuite distribuées par le facteur : pratique et malin !

Répondre à