Do automatycznego uruchomienia formularza startowego podczas uruchamiania pliku base używam makra:
Kod: Zaznacz cały
sub AutoStart 'uruchamia wybrany formularz zaraz po starcie programu
dim formContainer as variant
dim aProp(1) As New com.sun.star.beans.PropertyValue
Dim oCurrentController As Variant
Dim oFrame As Variant
Dim oContainerWindow As Variant
oCurrentController = ThisComponent.getCurrentController()
oFrame = oCurrentController.getFrame()
oContainerWindow = oFrame.getContainerWindow()
oContainerWindow.setPosSize(0, 1200, 200, 0, 15) 'rozmiar okna w określonym miejscu
'oContainerWindow.IsMaximized = 1 'maksymalne okno
oContainerWindow.IsMinimized = 1 'zmilizowane ”spaskowane” okno
oContainerWindow.setVisible(false) 'ukryj okno, aby je odkryć zamień false na true
aProp(0).Name = "ActiveConnection"
aProp(0).Value = ThisComponent.DataSource.GetConnection("","")
aProp(1).Name = "OpenMode"
aProp(1).Value = "open"
formContainer = ThisComponent.FormDocuments
formContainer.loadComponentFromURL("Panel","_blank",0,aProp())
End Sub
Jest to nieco ulepszona wersja makra, znalezionego kiedyś na tutejszym forum. Dokonuję w nim zmianę wielkości głównego okna, minimalizuję je, a nawet ukrywam. Głównym oknem nazywam okno na którym jest możliwy dostęp do tabel, kwerend, formularzy, raportów itd. Należy pamiętać, aby makro to przypisać do zdarzenia
Otwórz dokument w menu Narzędzia ->
Dostosuj
Moim formularzem startowym jest formularz o nazwie "Panel", znajduje się tam m.in. przycisk którym mogę samodzielnie ukryć / odkryć główne okno w zależności czy ten przycisk będzie "wciśnięty" czy też nie.
Kod: Zaznacz cały
Sub Okno(oEv) 'pokaż ukryj główne okno
Dim oOkno As Object
dim oObj as Object
dim stan as variant
oObj = oEv.Source.Model 'wskazany obiekt (przycisk)
stan = oObj.State 'odczytaj stan przycisku (czy wciśnięty)
oOkno = ThisComponent.getParent().getCurrentController().getFrame().getContainerWindow()
oOkno.setVisible(stan) 'zmiana statusu widoczności okna
if stan = 1 then oObj.label = "Ukryj okno" else oObj.label = "Pokaż okno" 'zmień etykietę przycisku
End Sub
Do otwierania następnych formularzy stosuje poniższe makra, przy czym określam skąd ma zostać pobrana nazwa formularza do otwarcia. Stosuję jedną z trzech możliwości: nazwę formularza ma nazwa przycisku lub etykieta przycisku lub wpisana została do właściwości "Dodatkowe informacje":
Kod: Zaznacz cały
Sub OtworzForm1(oEv)
dim nazwa as string
dim oDoc as Object
dim oNewFormDocument as Object
nazwa = oEv.Source.Model.Name 'nazwa przycisku = nazwa otwieranego formularza lub
'nazwa = oEv.Source.Model.Label 'etykieta przycisku = nazwa otwieranego formularza lub
'nazwa = oEv.Source.Model.Tag 'właściwość dodatkowe informacje przechowuje nazwę otwieranego formularza
oDoc = ThisDatabaseDocument.CurrentController
if IsNull(oDoc.ActiveConnection) then oDoc.connect
oNewFormDocument=ThisDatabaseDocument.FormDocuments.getbyname(nazwa).open
End Sub
Uwaga: makro to działa jeśli jest zapisane w danym dokumencie.
Alternatywna możliwość:
Kod: Zaznacz cały
Sub OtworzForm2(oEv)
dim nazwa as string
dim oNewFormDocument as Object
dim oDoc as Object
Dim OpenProp(1) As New com.sun.star.beans.PropertyValue
nazwa = oEv.Source.Model.Name 'nazwa przycisku = nazwa otwieranego formularza lub
'nazwa = oEv.Source.Model.Label 'etykieta przycisku = nazwa otwieranego formularza lub
'nazwa = oEv.Source.Model.Tag 'właściwość dodatkowe informacje przechowuje nazwę otwieranego formularza
oDoc= thisComponent.Parent.getFormDocuments
if oDoc.hasByName(nazwa) then
OpenProp(0).Name = "ActiveConnection"
OpenProp(0).Value = thisComponent.Drawpage.Forms(0).ActiveConnection
OpenProp(1).Name = "OpenMode"
OpenProp(1).Value = "open"
oNewFormDocument = oDoc.loadComponentFromURL(nazwa ,"_blank",0,OpenProp())
else
MsgBox "Nie znaleziono formularza o nazwie: "& nazwa, MB_ICONEXCLAMATION
end if
End Sub