Seite 1 von 1

Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 07:00
von oopa
Ich bin gestern von LibO 3.6 auf 4.0 umgestiegen. Festgestellt habe ich inzwischen, dass die Makros, mit denen ich einen bestimmen Zoom-Faktor für die Bildschirmdarstellung festlege, nicht mehr korrekt funktionieren.

Das folgende Makro stammt noch aus alten (OOo)-Zeiten, hat bisher alle Portierungen klaglos überstanden:

Code: Alles auswählen

sub ZoomSeiteExtra
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Zoom.Value"
args1(0).Value = 130
args1(1).Name = "Zoom.ValueSet"
args1(1).Value = 28703
args1(2).Name = "Zoom.Type"
args1(2).Value = 0
dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, args1())
end sub
Bei Verwendung in LibO 4.0 wird statt der direkten Umsetzung nur das Auswahlfenster für die Maßstabseinstellung gezeigt.
Ich habe daraufhin mit LibO 4.0 via Makro-Aufzeichnung ein neues Makro mit der gewünschten Funktionalität erzeugt.
Das sieht nun zwar etwas anders aus, liefert aber dasselbe unerwünschte Ergebnis:

Code: Alles auswählen

sub ZoomSeite2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Zoom.Value"
args1(0).Value = Array(Array("Value",0,130,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ValueSet",0,28703,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Type",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(1).Name = "Zoom.ValueSet"
args1(1).Value = Array(Array("Value",0,130,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ValueSet",0,28703,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Type",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(2).Name = "Zoom.Type"
args1(2).Value = Array(Array("Value",0,130,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ValueSet",0,28703,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Type",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE))
dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, args1())
end sub
Wenn ich nun statt einer fixen Maßstabsvorgabe in Prozent z.B. die Option "Seitenbreite" wähle, sieht die Sache anders aus. Zwar funktioniert auch in diesem Fall das alte Makro so (unbefriedigend) wie oben beschrieben, aber die Aufzeichnung mit LibO 4.0 liefert immerhin das:

Code: Alles auswählen

sub ZoomSeite1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:ZoomPageWidth", "", 0, Array())
end sub
Das macht (natürlich) erst mal gar nichts, wenn ich das letzte "rem" aber entferne, macht es, was es soll.

Meine Frage: Kann mir jemand sagen, wie ich das Makro umstricken/gestalten muss, um z.B. einen Maßstab von 130% direkt umgesetzt zu bekommen?

Re: Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 08:40
von pmoegenb
oopa hat geschrieben: Meine Frage: Kann mir jemand sagen, wie ich das Makro umstricken/gestalten muss, um z.B. einen Maßstab von 130% direkt umgesetzt zu bekommen?
In diesem Forumsbereich nicht, aber möglicher Weise im Forumsbereich LibreOffice Programmierung.

Re: Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 12:04
von gogo

Code: Alles auswählen

thiscomponent.CurrentController.ViewSettings.ZoomValue = 100
einen Versuch wäre es wert ...

Re: Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 13:07
von oopa
Meinst du so?

Code: Alles auswählen

sub Zoom130
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
thiscomponent.CurrentController.ViewSettings.ZoomValue = 130
dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, Array())
end sub
Falls ja: Funktioniert nicht. Ergebnis wie oben beschrieben: Es öffnet sich das Maßstabsauswahlfenster. :(

Re: Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 19:37
von F3K Total
oopa hat geschrieben:Meinst du so?
Nein er meint so:

Code: Alles auswählen

Sub S_Zoom_150
    thiscomponent.CurrentController.ViewSettings.ZoomValue = 150
End Sub
und das funktioniert.
Gruß R

Re: Zoom via Makro funktioniert nicht mehr in 4.0

Verfasst: Fr 5. Apr 2013, 20:24
von oopa
Jaaa! Das funktioniert. Danke euch für die Hilfe! :D

Nachtrag:
Es funktioniert nicht mehr, sobald man das Dokument einmal z.B. mittels "Zoom Optimal" oder "Zoom Seitenbreite" im Maßstab verändert hat.
Nach etwas API-Lektüre die (vermutliche Ursache und auf jeden Fall die) Lösung gefunden:
Außer dem ZoomValue muss auch der ZoomType korrekt gesetzt sein. Beim manuellen Setzen des Maßstabs muss ZoomType den Wert 3 haben.
Bei einem neu angelegten Dokument scheint das die Voreinstellung zu sein, darum funktioniert es. Bei den Varianten "Zoom Optimal" etc. scheint ein anderer ZoomType gesetzt zu werden, so dass es danach nicht mehr klappt.

Damit ergibt sich als finale Fassung, die mit LibO 4.0 in allen Fällen funktioniert:

Code: Alles auswählen

sub Zoom130
    thiscomponent.CurrentController.ViewSettings.ZoomType = 3
    thiscomponent.CurrentController.ViewSettings.ZoomValue = 130
end sub