Und auch die LO-Prozesse, die im Taskmanager stehen blieben und sich sogar beim Speicherbedarf mit jedem Mal steigerten, bekomme ich nun zu, mit einer von der Google-KI vorgeschlagenen Zeile (wo auch immer die das hernimmt).
(Das dürfte allerdings vermutlich nur für Windows-Nutzer passen)
Zusammen mit dem automatischen Öffnen des Anwenderformulars und dem Ausblenden der Menus und Menuleisten ist es somit (ohne Passwort) nicht mehr möglich, in das Datenbankfenster bzw. die Programmierebene zu gelangen (oder gibt es noch was über Tastenkombinationen?).
Hier der Code für das Schließen. Er wird als Ereignis aufgerufen unter "Formular bearbeiten"->"Anpassen"->"Ereignisse"-> "Dokument wird geschlossen". Der Code steht nicht unter "meine Makros und Dialoge", sondern in den Datenbankeigenen Makros. Ohne das "if oFrames.Count = 0" würde der Code auch alle anderen LO-Fenster rücksichtslos schließen, mit dieser Überprüfung passiert das nicht und es wird nur das Datenbankfenster der aktuell bearbeiteten Datenbank geschlossen.
Code: Alles auswählen
Sub CLoseDB
Dim dispatcher
Dim oForm As Object
Dim oDocument As Object
Dim oParent As Object
Dim oFrames As Object
Symbolleisten_an
wait(200)
If not Adminmode then
oDocument = ThisComponent.Parent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Value = 0
dispatcher.executeDispatch(oDocument, ".uno:Save", "", 0, args1())
oParent = ThisComponent.getParent()
oParent.close(true)
oFrames = StarDesktop.Frames
IF oFrames.Count = 0 THEN
wait(1000)
Shell "taskkill /F /IM soffice.bin", 0
End if
end if
End Sub
Code: Alles auswählen
oDoc = ThisDatabaseDocument
oDoc.Store()
wait(200)
ThisDatabaseDocument.FormDocuments.getByName("frmObjekte").close
Code: Alles auswählen
Sub Symbolleisten_an
Dim oFrames As Object
DIM oFrame AS OBJECT
DIM oLayoutMng AS OBJECT
DIM aElemente()
DIM oWin AS OBJECT
DIM i AS integer
oFrame = StarDesktop.getCurrentFrame()
oLayoutMng = oFrame.LayoutManager
aElemente = oLayoutMng.getElements()
FOR i = LBound(aElemente) TO UBound(aElemente)
oLayoutMng.showElement(aElemente(i).ResourceURL)
NEXT
ThisComponent.CurrentController.Sidebar.Visible = True
ThisComponent.CurrentController.ViewSettings.ShowRulers = True
'Datenbankfenster einblenden
oFrames = StarDesktop.Frames
For i = 0 To oFrames.Count - 1
oFrame = oFrames.getByIndex(i)
If oFrame.Name = "Bestand.odb" Or InStr(oFrame.Title, "– LibreOffice Base") > 0 Then
oFrame.ContainerWindow.setVisible(True)
End If
Next i
End Sub
im Datenbankfenster unter Extras -> "Anpassen" ->"Ereignisse"->"Dokument öffnen" wird eine Sub "OnOpenDocument" aufgerufen:
Code: Alles auswählen
Sub OnOpenDocument()
Dim oController AS OBJECT
Dim oDoc AS OBJECT
Dim sUrl_Start AS STRING
oDoc = ThisComponent
sUrl_Start = oDoc.URL
if FileExists(sUrl_Start & ".lck") Then
Msgbox("Datei bereits an anderem Arbeitplatz geöffnet")
Exit Sub
End if
oController = ThisDatabaseDocument.CurrentController
If not (oController.isConnected()) Then oController.connect() ' Connect to the database, if necessary
DialogLibraries.LoadLibrary("Standard")
Datenbankbackup
oController.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, "frmObjekte", FALSE)
End Sub
Code: Alles auswählen
Sub Symbolleisten_aus(oEvent AS Object)
Dim oFrames As Object
DIM oFrame AS OBJECT
DIM oWin AS OBJECT
DIM oLayoutMng AS OBJECT
DIM aElemente()
DIM i AS integer
oFrame = oEvent.Source.CurrentController.Frame
oFrame.setTitle "Objekterfassung"
oWin = oFrame.getContainerWindow()
oLayoutMng = oFrame.LayoutManager
aElemente = oLayoutMng.getElements()
FOR i = LBound(aElemente) TO UBound(aElemente)
IF aElemente(i).ResourceURL = "private:resource/toolbar/formsnavigationbar" THEN
ELSE
' Folgende Zeile auskommentieren, wenn im Bearbeitungsmodus geöffnet
' werden soll und dafür dann die Menuleiste des Formulars gebraucht wird!
oLayoutMng.hideElement(aElemente(i).ResourceURL)
END IF
NEXT
ThisComponent.CurrentController.Sidebar.Visible = False
ThisComponent.CurrentController.ViewSettings.ShowRulers = False
ThisComponent.CurrentController.ViewSettings.ShowParaBreaks = False
'Datenbankfenster ausblenden
oFrames = StarDesktop.Frames
For i = 0 To oFrames.Count - 1
oFrame = oFrames.getByIndex(i)
If oFrame.Name = "Bestand.odb" Or InStr(oFrame.Title, "– LibreOffice Base") > 0 Then
oFrame.ContainerWindow.setVisible(False)
End If
Next i
End Sub
Tschüs,
Aubergino

