[Base] Maximiser un formulaire

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

[Base] Maximiser un formulaire

Message 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+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
TChatenet
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 02 juin 2012 13:54

Re: [Base] Maximiser un formulaire , positionner un dialogue

Message 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
Dernière modification par TChatenet le 22 avr. 2014 04:35, modifié 2 fois.
Libre Office Version 4.1.5.3 sous W8.1
Libre Office Version 3.5.4.2 sous Ubuntu 12.04 /64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Maximiser un formulaire

Message 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+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
TChatenet
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 02 juin 2012 13:54

Re: [Base] Maximiser un formulaire

Message 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
Libre Office Version 4.1.5.3 sous W8.1
Libre Office Version 3.5.4.2 sous Ubuntu 12.04 /64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Maximiser un formulaire

Message 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+
Pièces jointes
ResolutionEcran.odb
(4.11 Kio) Téléchargé 458 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
TChatenet
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 02 juin 2012 13:54

Re: [Base] Maximiser un formulaire

Message 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:
Libre Office Version 4.1.5.3 sous W8.1
Libre Office Version 3.5.4.2 sous Ubuntu 12.04 /64
Avatar de l’utilisateur
creym
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 20 avr. 2015 15:24

Re: [Base] Maximiser un formulaire

Message 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:
Windows 10 - LibreOffice 6.15.2.
Répondre