Alternativa al modo pantalla completa:
El modo pantalla completa no me termina de gustar (cosas que tiene uno), sin embargo sí que quiero controlar el tamaño del formulario (maximizar la ventana ) y que no haya muchas barras por ahí danzando, ya que para rellenar campos no necesito una barra de controles de formulario, aunque si una barra de navegación de formulario y un menú (por si quiero abrir un calc, writer o lo que sea. Así que estoy usando lo siguiente:
En el formulario, en vista de diseño, en el menú herramientas, personalizar, pestaña de sucesos, abrir documento le asigno la macro siguiente:
Código: Seleccionar todo
Sub AbrirForm
If left(Split(thiscomponent.Title," : ")(1),14)="COMARCAS TOTAL" Then ' En caso de ser un formulario de los de entradas
MaxWindow ' Llamamos a la función
End if ' Acaba la condición
If left(Split(thiscomponent.Title," : ")(1),15)="FHOJAOPERADORES" Then ' En caso de ser un formulario de los de entradas
MaxWindow ' Llamamos a la función
End if ' Acaba la condición
If left(Split(thiscomponent.Title," : ")(1),8)="Entradas" Then ' En caso de ser un formulario de los de entradas
MaxWindow ' Llamamos a la función
End if ' Acaba la condición
If left(Split(thiscomponent.Title," : ")(1),8)="ARTABRA" Then ' En caso de ser Artabra
oVentana = thiscomponent.CurrentController.Frame.ContainerWindow ' Ventana del formulario
oPosTam = oVentana.getPosSize ' Control sobre el tamaño de la ventana
oVentana.setPosSize( 50, 50, 750, 500, com.sun.star.awt.PosSize.POSSIZE ) ' Aplicamos el tamaño que queremos
End if ' Acaba la condición
If left(Split(thiscomponent.Title," : ")(1),17)="Formulario_Puente" Then ' En caso de ser Artabra
oVentana = thiscomponent.CurrentController.Frame.ContainerWindow ' Ventana del formulario
oPosTam = oVentana.getPosSize ' Control sobre el tamaño de la ventana
oVentana.setPosSize( 50, 50, 750, 600, com.sun.star.awt.PosSize.POSSIZE ) ' Aplicamos el tamaño que queremos
End if ' Acaba la condición
Barras ' Llamamos a la función
End sub
Evidentemente he puesto código para más de un formulario, ya que si lo aplicas a varios formularios te irá abriendo cada formulario con las medidas y posición que le pongas.
Si usas:
"If left(Split(thiscomponent.Title," : ")(1),14)="COMARCAS TOTAL" Then " ten en cuenta que COMARCAS TOTAL es el nombre del formulario, y 14 es el número de caracteres que tiene ese nombre.
MaxWindow Es una función de Windows que maximiza la ventana.
En las otras opciones he puesto el tamaño con el que quiero que cada formulario abra.
Si quieres que todos se maximicen no hace falta poner condición ninguna de título, con MaxWindow sería suficiente.
Barras es una función que te pongo a continuación, y que lo que hace es que si abre en modo diseño te muestra las barras de diseño de formulario y de controles de formulario, con lo que puedes seguir con el diseño, y si abres en modo de escritura solo te deja el menú, la barra de estado, y la de navegación de formulario, ganado superficie de trabajo en la pantalla sin llegar al modo pantalla completa.
Vamos!, que bastante más liado solo por mi capricho de decir que no me gusta el modo pantalla completa!
Ventaja: puedes monitorizar en una macro todos los tamaños de todos los formularios que quieras (eso sí, tendrás que personalizarla),
Código: Seleccionar todo
Function Barras
On Error GoTo oBad ' Control de errores
'-----------------------------------------
' Evitamos que se repita la macro (solo un ciclo)
If Coli= "No" then ' Si la constante global es 'No'
Coli="Si" ' La cambiamos a 'Si'
Exit Function ' Nos echa de la función
End if ' En caso de que sea distinto de 'No'
If Len(Coli)=0 or Coli="Si" Then ' Si Coli es distinto de 'No'
oCurrentController = ThisComponent.CurrentController ' Controlador del formulario
oLayoutManager = ThisComponent.CurrentController.Frame.LayoutManager ' Tipo de elementos Barra-Menú
oElements = oLayoutManager.getElements() ' Elementos de tipo barra-menú
'-----------------------------------------------
' Distinguimos entre visualización en diseño y en vista de trabajo
If oCurrentController.isFormDesignMode Then ' Si es en forma diseño
oLayoutManager.createElement("private:resource/toolbar/formsnavigationbar") ' Creamos la barra de navegación de formularios
oLayoutManager.ShowElement("private:resource/toolbar/formsnavigationbar") ' La aplicamos
oLayoutManager.createElement("private:resource/toolbar/formdesign") ' Creamos la barra de diseño de formularios
oLayoutManager.ShowElement("private:resource/toolbar/formdesign") ' La aplicamos
oLayoutManager.createElement("private:resource/toolbar/formcontrols") ' Creamos la barra de controles de formulario
oLayoutManager.ShowElement("private:resource/toolbar/formcontrols") ' La aplicamos
oLayoutManager.createElement("private:resource/menubar/menubar") ' Creamos el menú
oLayoutManager.showElement("private:resource/menubar/menubar") ' Lo aplicamos
End If ' Acabamos la condición de diseño
'---------------------------------------
' Si no estamos en diseño eliminamos todos los elementos y después generamos el que queremos
If not(oCurrentController.isFormDesignMode) Then ' Si no es de diseño
oElements = oLayoutManager.getElements() ' Elementos tipo barra o menú
For x = LBound(oElements) to UBound(oElements) ' Los recorremos todos
If oElements(x).ResourceURL <> "private:resource/toolbar/formsnavigationbar" Then ' Si no es la barra de navegación de formularios
oLayoutManager.hideElement(oElements(x).ResourceURL) ' Las escondemos
End If ' Acabamos la condición
next ' Vamos al siguiente elemento
'--------------------------------------------------
' En algunos formularios no queremos la barra de navegación de formularios
If left(Split(thiscomponent.Title," : ")(1),17)="Formulario_Puente" or left(Split(thiscomponent.Title," : ")(1),15)="Outras Funcións" Then ' En caso de no ser el formulario puente ni formularioOutrasFuncions
Wait 100 ' Esperamos un poco
oLayoutManager.HideElement("private:resource/toolbar/formsnavigationbar") ' La escondemos
End if ' Acabamos la condición
' If oLayoutManager.isVisible then
' oLayoutManager.visible = 0
' End if
'---------------------------------------------
' Generamos las barras que vamos a necesitar, no más. Tener en cuenta que hay barras ocultas, pero otras directamente no están.
If left(Split(thiscomponent.Title," : ")(1),17)<>"Formulario_Puente" and left(Split(thiscomponent.Title," : ")(1),15)<>"Outras Funcións" Then ' En caso de no ser el formulario puente ni formularioOutrasFuncions
oLayoutManager.createElement("private:resource/menubar/menubar") ' Creamos el menú
oLayoutManager.showElement("private:resource/menubar/menubar") ' Lo aplicamos
oLayoutManager.createElement("private:resource/toolbar/formsnavigationbar") ' Creamos la barra de navegación de formularios
oLayoutManager.ShowElement("private:resource/toolbar/formsnavigationbar") ' La aplicamos
oLayoutManager.createElement("private:resource/statusbar/statusbar") ' Creamos la barra de estado
oLayoutManager.ShowElement("private:resource/statusbar/statusbar") ' La aplicamos
End if ' Acaba la condición del nombre del formulario
End if ' Acaba la condición de que que sea o no en diseño
End if ' Acaba la condición de que la constante sea diferente de 'No'
if left(Split(thiscomponent.Title," : ")(1),15)="Outras Funcións" Then
Coli="No" ' Pasamos la constante global a 'No'
Else
Coli=""
End if
Exit Function ' Nos echa de la función
'------------------------------------------------------------
' Control de errores
oBad:
Dim oErLine As Integer
Dim oErNum As Integer
Dim oErMsg As String
oErLine = Erl
oErNum = Err
oErMsg = Error
Msgbox("Error en la línea número" & Chr$(9) & " : " & oErLine & Chr$(10) _
& "Número de error " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
& "Mensaje de error" & Chr$(9) & " : " & oErMsg , 0, "Función Barra, Módulo Formularios")
End Function
Global Coli
Formulario 'Outras_Funcións' y 'Formulario_Puente" son dos formularios en los que preferí eliminar la barra de navegación de formularios y el menú, de tal modo que me quedan como una botonera para acceder a otros formularios, sin más herramientas.
Esta última aclaración la pongo porque salen en la función barras, aunque lo suyo es que en una función no salga algo así de concreto y se pueda usar para cualquier formulario.
No sé si te sirve, pero tenía que ponerlo algún día!
Un saludo!
Ah! Se me olvidaba poner la función MaxWindow y la función ShowWindow para que funcionen (todo esto solo para Windows):
Código: Seleccionar todo
sub MaxWindow
dim frame, Window, handle ' Declaramos las variables
Frame=thiscomponent.CurrentController.Frame ' Marco del formulario actual
'frame = StarDesktop.getActiveFrame() ' El marco activo
window = frame.getContainerWindow() ' Ventana del marco
handle = window.getWindowHandle(dimarray(), 1) ' 1=WIN32
ShowWindow( handle, 3 ) ' Hide 0 SW_HIDE, Show 5 SW_SHOW, Minimize 2 SW_MINIMIZE, Maximize 3 SW_MAXIMIZE
end sub
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String,ByVal Typ As Integer) As Integer