Page 1 sur 1

[Base] Maximiser un formulaire

MessagePublié: 29 Avr 2012 14: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   AgrandirRéduire
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   AgrandirRéduire
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

MessagePublié: 21 Avr 2014 14: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/Documentation/BASIC_Guide/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 :oops:
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   AgrandirRéduire
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

MessagePublié: 21 Avr 2014 17: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

MessagePublié: 21 Avr 2014 18: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

MessagePublié: 21 Avr 2014 19: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 ??? :lol: )
 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 :lol: )
Code : Tout sélectionner   AgrandirRéduire
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

MessagePublié: 22 Avr 2014 02: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 :super:

Re: [Base] Maximiser un formulaire

MessagePublié: 13 Oct 2016 13: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 :bravo: