BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Kantenglättung per Basic deaktivieren / aktivieren
Kantenglättung per Basic deaktivieren / aktivieren
Hallo Lieb(r)eOffice-Gemeinde.
kennt jemand einen Weg per Basic die Kantenglättung (Extras - Optionen - Ansicht) zu deaktivieren bzw. aktivieren?
Hintergrund ist, in meiner Software werden unter Umständen sehr lange Dokumente (Angebot, Rechnungen) generiert.
Um den Übertrag an die richtig Position einzufügen, muss mit jedem einfügen eines Datensatzes auf die Seitenzahl zugegriffen werden.
Damit man die korrekte Seitenzahl bekommt, muss auf das generierte Dokument bei jedem Datensatz ein Refresh ausgeführt werden.
Um es kurz zu machen, mit ausgeschalteter Kantenglättung werden die Dokumente ein vielfaches schneller generiert.
Die Idee nun ist, vor der Generierung des Dokumentes die Kantenglättung zu deaktivieren und im Anschluss wieder zu aktivieren.
Viele Grüße
Heiko
kennt jemand einen Weg per Basic die Kantenglättung (Extras - Optionen - Ansicht) zu deaktivieren bzw. aktivieren?
Hintergrund ist, in meiner Software werden unter Umständen sehr lange Dokumente (Angebot, Rechnungen) generiert.
Um den Übertrag an die richtig Position einzufügen, muss mit jedem einfügen eines Datensatzes auf die Seitenzahl zugegriffen werden.
Damit man die korrekte Seitenzahl bekommt, muss auf das generierte Dokument bei jedem Datensatz ein Refresh ausgeführt werden.
Um es kurz zu machen, mit ausgeschalteter Kantenglättung werden die Dokumente ein vielfaches schneller generiert.
Die Idee nun ist, vor der Generierung des Dokumentes die Kantenglättung zu deaktivieren und im Anschluss wieder zu aktivieren.
Viele Grüße
Heiko
Re: Kantenglättung per Basic deaktivieren / aktivieren
Du kannst ein Dokument auch generieren ohne es anzuzeigen. Kannst Du kurz erklären wie das Dokument erstellt wird?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Kantenglättung per Basic deaktivieren / aktivieren
Hallo gogo.
Bei Angeboten und Rechnungen, möchte ich, dass bei mehrseitigen Dokumenten die Überträge eingefügt werden.
Da man aber im voraus nicht wissen kann, wie viele Positionen auf ein Blatt passen, wird nach jedem Einfügen eines Datensatzes geprüft, ob sich die Seitenzahl geändert hat. Das erfolgt mit folgender Funktion:
Um zu prüfen. auf welcher Seite der letzte Datensatz eingefügt wurde, musste ich den ViewCursor verwenden.
Das war die Lösung, um einen Übertrag einzufügen, die ich vor vielen Jahren entwickelt hatte.
Ob es da derzeit einfachere oder bessere Methoden gibt, kann ich nicht einschätzen.
Aber für diese Lösung, musste man das Dokument generieren, während es angezeigt wird.
Gruß
Heiko
Das zu generieren Dokument enthält eine Text-Tabelle in welche die Datensätze aus der Datenbank eingefügt werden.
Bei Angeboten und Rechnungen, möchte ich, dass bei mehrseitigen Dokumenten die Überträge eingefügt werden.
Da man aber im voraus nicht wissen kann, wie viele Positionen auf ein Blatt passen, wird nach jedem Einfügen eines Datensatzes geprüft, ob sich die Seitenzahl geändert hat. Das erfolgt mit folgender Funktion:
Code: Alles auswählen
Function fiPageCount AS Integer
Dim oDocument AS Object,oTextfield AS Object,oCurElement AS Object
Dim iElementCount AS integer
oDoc.refresh()
' oDoc.getTextFields().refresh()
oDocument = oDoc.CurrentController.Model
oTextfield = oDocument.getTextfields.CreateEnumeration
iElementCount=0
While oTextField.hasmoreElements
oCurElement = oTextField.NextElement
if oCurElement.SupportsService("com.sun.star.text.TextField.PageCount") AND iElementCount=0 then
fiPageCount=oCurElement.getPresentation(False)
'Print oCurElement.getPresentation(true), oCurElement.getAnchor.getString
iElementCount=1
end if
Wend
End Function
Um zu prüfen. auf welcher Seite der letzte Datensatz eingefügt wurde, musste ich den ViewCursor verwenden.
Code: Alles auswählen
Function fsInsertCarry(iPageCountBefore AS integer,iCountInsert AS Integer,iLastPos AS Integer) AS String
Dim oTables AS Object
Dim vTableLeistungen AS Variant
Dim vViewCursor AS Variant
oTables = createunoservice("com.sun.star.text.TextTables")
oTables = oDoc.getTextTables
vTableLeistungen = createunoservice("com.sun.star.text.TextTable")
vTableLeistungen = oTables.getByName("Leistungen")
vViewCursor = oDoc.CurrentController.getViewCursor()
vViewCursor.gotoRange(vTableLeistungen.getCellByName("B"& iCountInsert).createTextCursor(), False)
vViewCursor.jumpToEndOfPage()
oDoc.refresh()
If NOT IsEmpty(vViewCursor.Cell) then
if vViewCursor.TextTable.Name = "Leistungen" then
if CLng(Mid(vViewCursor.Cell.CellName,2)) = CLng(vTableLeistungen.Rows.getCount) then
if iLastPos = 1 Then
if fiPageCount > vViewCursor.getPage() then
fsInsertCarry = "1;"& vViewCursor.getPage()
else
fsInsertCarry = "0;"& iPageCountBefore
End if
else
fsInsertCarry = "0;"& iPageCountBefore
end if
elseif CLng(Mid(vViewCursor.Cell.CellName,2)) < CLng(vTableLeistungen.Rows.getCount) then
fsInsertCarry = "1;"& vViewCursor.getPage()
End if
else
fsInsertCarry = "0;"& iPageCountBefore
End if
else
fsInsertCarry = "0;"& iPageCountBefore
End if
' print fsInsertCarry
End Function
Ob es da derzeit einfachere oder bessere Methoden gibt, kann ich nicht einschätzen.
Aber für diese Lösung, musste man das Dokument generieren, während es angezeigt wird.
Gruß
Heiko
Re: Kantenglättung per Basic deaktivieren / aktivieren
Einfach mal probieren - am Anfang:
und irgendwo am Ende dann ... .setVisible(true)
... ein Übertrag - was für ein Anachronismus! War früher mal etwas damit Mensch kontrollieren konnte ob Mensch einen Fehler gemacht hat - heute fügt Mensch (sehr kompliziert) einen Übertrag ein, damit ein Computergeneriertes Dokument einen hat . Um einen Computerfehler nachzuvollziehen braucht's eher eine laufende Summe. Aber schon lustig, dass ich täglich Überträge sehe und mir noch nie Gedanken gemacht habe wie man so einen erstellt
Code: Alles auswählen
...
oDoc.getCurrentController.getFrame.getContainerWindow().setVisible(false)
...
... ein Übertrag - was für ein Anachronismus! War früher mal etwas damit Mensch kontrollieren konnte ob Mensch einen Fehler gemacht hat - heute fügt Mensch (sehr kompliziert) einen Übertrag ein, damit ein Computergeneriertes Dokument einen hat . Um einen Computerfehler nachzuvollziehen braucht's eher eine laufende Summe. Aber schon lustig, dass ich täglich Überträge sehe und mir noch nie Gedanken gemacht habe wie man so einen erstellt
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Kantenglättung per Basic deaktivieren / aktivieren
Das Programm funktioniert zwar weiterhin auch unsichtbar, jedoch läuft das Ganze mit eingeschalteter Kantenglättung nicht wirklich schneller.gogo hat geschrieben: ↑Sa 3. Aug 2019, 14:21Einfach mal probieren - am Anfang:und irgendwo am Ende dann ... .setVisible(true)Code: Alles auswählen
... oDoc.getCurrentController.getFrame.getContainerWindow().setVisible(false) ...
Naja, ich finde es trotzdem nett wenn ein Übertrag da ist...... ein Übertrag - was für ein Anachronismus! War früher mal etwas damit Mensch kontrollieren konnte ob Mensch einen Fehler gemacht hat - heute fügt Mensch (sehr kompliziert) einen Übertrag ein, damit ein Computergeneriertes Dokument einen hat . Um einen Computerfehler nachzuvollziehen braucht's eher eine laufende Summe. Aber schon lustig, dass ich täglich Überträge sehe und mir noch nie Gedanken gemacht habe wie man so einen erstellt
Der Empfänger des Dokumentes weiß ja nicht, dass das Dokument mit einem Computer-Programm generiert wurde.
Könnte ja auch von der netten Kollegin mit M$ Word geschrieben worden sein
Abgesehen davon, war das vor 15 Jahren ja noch nicht so und es war damals eine Herausforderung eine Lösung für den Übertrag zu entwickeln, die Spaß gemacht hat...
Gruß
Heiko
Re: Kantenglättung per Basic deaktivieren / aktivieren
Der 1. Schritt ist schon mal gemacht.
Ich kann mit folgendem Code direkt in die Konfiguration schreiben.
Allerdings wirkt das erst nach einem Neustart von LO.
Hat jemand eine Idee, wie man LO per Basic überreden kann die geänderte Konfiguration direkt zu verwenden?
Wenn man den Haken für Kantenglättung setzt und übernimmt, dann funktioniert es ja auch ohne Neustart.
Gruß
Heiko
Ich kann mit folgendem Code direkt in die Konfiguration schreiben.
Code: Alles auswählen
Sub Set_AntiAliasing(bAntiAliasing as boolean)
Dim arrPropVal(0) as new com.sun.star.beans.PropertyValue
Dim ConfProvider as Variant
Dim ConfUpdateAccess as Variant
ConfProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
arrPropVal(0).Name = "nodepath"
arrPropVal(0).Value = "org.openoffice.Office.Common/Drawinglayer"
ConfUpdateAccess = ConfProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", arrPropVal())
'GlobalScope.BasicLibraries.LoadLibrary("Tools")
'WriteDbgInfo(ConfProvider)
print ConfUpdateAccess.AntiAliasing
ConfUpdateAccess.AntiAliasing=bAntiAliasing
ConfUpdateAccess.commitChanges()
ConfProvider.refresh()
print ConfUpdateAccess.AntiAliasing
ConfUpdateAccess.dispose()
End Sub
Hat jemand eine Idee, wie man LO per Basic überreden kann die geänderte Konfiguration direkt zu verwenden?
Wenn man den Haken für Kantenglättung setzt und übernimmt, dann funktioniert es ja auch ohne Neustart.
Gruß
Heiko
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️