otworzenie formularza przy otwieraniu pliku Base

Użytkowanie programu bazodanowego
wbp
Posty: 31
Rejestracja: czw lip 20, 2023 2:18 pm

otworzenie formularza przy otwieraniu pliku Base

Post autor: wbp »

Witam.
Jakie makro do otwierania formularza przy otwieraniu pliku Base?
I jak je skonfigurować by podstawić różne formularze?
LibreOffice 7.37.2 Windows10
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: otworzenie formularza przy otwieraniu pliku Base

Post autor: Rafkus »

Zapoznaj się z tym tematem: viewtopic.php?p=12937#p12937
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: otworzenie formularza przy otwieraniu pliku Base

Post autor: Rafkus »

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
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
ODPOWIEDZ