Page 1 sur 1

[Base] Maximiser un formulaire

Publié : 29 avr. 2012 15: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 15: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 :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

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 18: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 19: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 20: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

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 03: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

Publié : 13 oct. 2016 14: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: