Page 1 sur 1
[Base] Maximiser un formulaire
Publié : 29 avr. 2012 13:16
par Piaf
Bonjour
Suite à
ce message du fil en question.
Bien que le sujet ai un peu débordé de la question posée, j'ai trouvé intéressant d'approfondir un peu.
Je propose donc deux macros testées sous Libre Office 3.5.2.2 et Open Office 3.3.0
La première est une compilation de réponses apportées à cette question dans le forum
Code : Tout sélectionner
Sub ResizeWindow
Dim vFrame as Object, vWindow as Object, vRect as Object, oForm as Object
Dim intHeight as Integer, intWidth as Integer, intXPos as Integer, intYPos as Integer
Dim oDisplayAccess, oDisplay, aRect as Object
oDisplayAccess = CreateUnoService("com.sun.star.awt.DisplayAccess")
oDisplay = oDisplayAccess.getByIndex(0)
aRect = oDisplay.WorkArea
oForm = thisComponent
vFrame = oForm.getCurrentController.getFrame()
vWindow = vFrame.getContainerWindow()
vRect = vWindow.getPosSize()
intXPos=0
intYPos=0
intHeight = aRect.Height
intWidth = aRect.Width
vWindow.setPosSize(intXPos, intYPos, intWidth, intHeight, com.sun.star.awt.PosSize.POSSIZE )
End Sub
La seconde est la mise en œuvre des propriétés relevées par JPL dans le message cité.
Code : Tout sélectionner
Sub MaximizeWindow
Dim oForm as Object, vFrame as Object, vWindow as Object
oForm = thisComponent
vFrame = oForm.getCurrentController.getFrame()
vWindow = vFrame.getContainerWindow()
vWindow.IsMaximized = true
End Sub
En espérant que ça puisse être utile.
A+
Re: [Base] Maximiser un formulaire , positionner un dialogue
Publié : 21 avr. 2014 13:45
par TChatenet
Bonjour ,
Merci pour cette contribution mais malheureusement "com.sun.star.awt.DisplayAccess" ne renvoie plus rien . Je crois avoir compris qu'il a été volontairement supprimé dans libre office
Par ailleurs les coordonnées des dialogues ainsi que leurs dimensions sont exprimées en unité ma pour , je cite " Map AppFont (ma) remplace l'unité Twips pour obtenir une meilleure indépendance vis-à-vis des plates-formes."
https://wiki.openoffice.org/wiki/FR/Doc ... Properties
Pour positionner convenablement les dialogues là ou on le souhaite il faut donc connaitre les dimensions de son écran en ma .
Je vous propose cette solution inspirée de mes diverses lectures à ce sujet . Une fois les dimensions de l'affichage connue il est facile de positionner les dialogues au moyen des propriétés .model.positionX et positionY après avoir interrogé les dimensions du dialogue .model.wdith et model.height
Malheureusement je n'ai pas trouvé d'autre moyen que de faire appel aux API windows , donc cette solution n'est absolument pas multiplateforme
En espérant que cela pourra être utile
[Edit suite aux posts suivants : Merci Piaf , bravo Dude ] Il existe une solution indépendante du système d'exploitation permettant d'obtenir la résolution d'écran en pixels , code modifié en conséquence
Code : Tout sélectionner
Sub ResoEcran
dim x%, y%
dim oDA as object, oTk as object, oRes as object, odlg as object
x = 0 : y = 0
oDa = CreateUnoService("com.sun.star.awt.DisplayAccess")
oTK = thisComponent.currentController.componentWindow.toolkit
If Not isNull(oDa) Then
oRes = oDa(0).screenArea
x = oRes.Width : y = oRes.Height
' MsgBox "Vous êtes sous AOO et la Résolution est de : " & x & " x " & y
ElseIf Not isNull(oTk) Then
oRes = oTK.workArea
x = oRes.Width : y = oRes.Height
' MsgBox " Vous êtes sous LibO et la Résolution est de : " & x & " x " & y
EndIf
DialogLibraries.Loadlibrary("Standard") ' on charge l'ensemble de la Bibli Standard de ce document en mémoire
odlg = CreateUnoDialog(DialogLibraries.GetByName("Standard").GetByName("Dialog1")) ' il suffit de désigner n'importe quel dialogue de son application
odlg.setPosSize(0,0,x,y,com.sun.star.awt.PosSize.POSSIZE) ' cette ligne le redimensionne de manière à ce qu'il occupe la totalité de l'écran
x= odlg.model.width ' on interroge les dimensions du dialogue pour connaitre les dimensions de l'écran en ma
y= odlg.model.height
msgbox "résolution de l'écran en ma = " & x & " x " & y
oRes = nothing
oTk = nothing
oDA = nothing
oDlg.dispose
End Sub
Re: [Base] Maximiser un formulaire
Publié : 21 avr. 2014 16:31
par Piaf
Bonsoir
TChatenet a écrit :Par ailleurs les coordonnées des dialogues
titre du fil [
Base] Maximiser un formulaire
La première solution avait l'avantage de fournir la taille de l'écran, mais si LibO estime cela non utile !
Après je suis sous Linux et autant que je sache, AOO et LibO sont multiplateformes, donc l'utilisation des DLL Windows dans les macros ?
A+
Re: [Base] Maximiser un formulaire
Publié : 21 avr. 2014 17:04
par TChatenet
Après je suis sous Linux et autant que je sache, AOO et LibO sont multiplateformes, donc l'utilisation des DLL Windows dans les macros ?
Je sais bien , mais je t'assure que mes recherches sur le sujet ne m'ont rien permis d'autre que de lire les lamentations de tous ceux qui , comme moi , avaient besoin de connaitre les dimensions de l'affichage et se trouvaient sans solution depuis la suppression de com.sun.star.awt.DisplayAccess.
Les utilisateurs Windows peuvent s'en sortir en utilisant les Dll en attendant que le problème soit résolu , les autres : je ne sais pas .
Le but de ma contribution était surtout fournir une solution permettant de calculer cette fameuse résolution en ma . Ce truc peut être utile à tout le monde une fois l'écueil de la lecture de la résolution passé .
J'ai pensé utile de le mettre à la suite de ton fil car il me semblait le compléter , mais si cela te froisse je peux le supprimer , pas de souci
.
Bonne soirée
Re: [Base] Maximiser un formulaire
Publié : 21 avr. 2014 18:07
par Piaf
Re
TChatenet a écrit :mais si cela te froisse je peux le supprimer
Non au contraire.
Ce qui me chagrine c'est d'avoir à utiliser une dll Windows pour remplacer un service multiplateformes qui existait.
Mais toi ou moi n'y sommes pas pour grand chose. (Régression ???
)
Ajout : Suite à une judicieuse intervention d'Alain de La Chaume, il se trouve que Dude avait déjà trouvé le contournement (quand les ténors s'en mêlent )Code : Tout sélectionner Sub ResoEcran
x = 0 : y = 0
oDa = CreateUnoService("com.sun.star.awt.DisplayAccess")
oTK = thisComponent.currentController.componentWindow.toolkit
If Not isNull(oDa) Then
oRes = oDa(0).screenArea
x = oRes.Width : y = oRes.Height
MsgBox "Vous êtes sous AOO et la Résolution est de : " & x & " x " & y
ElseIf Not isNull(oTk) Then
oRes = oTK.workArea
x = oRes.Width : y = oRes.Height
MsgBox " Vous êtes sous LibO et la Résolution est de : " & x & " x " & y
EndIf
End Sub
|
A+
Re: [Base] Maximiser un formulaire
Publié : 22 avr. 2014 01:54
par TChatenet
Nickel ça fonctionne chez moi à quelques pixels près .
J'avais bien vu sur les forums anglophones que certains citaient le toolkit mais my very poor english ne m'avait pas permis de comprendre la solution .
Je corrige ma précédente intervention
Re: [Base] Maximiser un formulaire
Publié : 13 oct. 2016 12:34
par creym
Bonsoir,
Vraiment bien ta macro MaximizeWindow, ManitOOu
Parfaite avec LbreOffice 5.1.4.2 sous Ubuntu 16.04
Merci j'avais une ancienne qui fonctionnaits avec OpenOffice sous Windows mais qui bloquait ici