Makroprogrammierung: Ansicht Zoomfaktor
Moderator: Moderatoren
-
- ***
- Beiträge: 88
- Registriert: Mi, 30.07.2003 18:06
- Wohnort: Wiesloch
Makroprogrammierung: Ansicht Zoomfaktor
Hallo Zusammen,
ich will mir zwei Tasten basteln, mit denen ich den Zoomfaktor um je 1% erhöhen bzw. senken kann. Wenn ich ein Makro aufzeichne, dann erhalte ich folgenden Code (die Variablendeklerationen habe ich mal weggelassen):
args1(0).Name = "Zoom.Value"
args1(0).Value = 121
args1(1).Name = "Zoom.ValueSet"
args1(1).Value = 28703
args1(2).Name = "Zoom.Type"
args1(2).Value = 3
dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, args1())
damit setze ich den Zoomfaktor dann auf 121%.
Ich würde jetzt gerne den derzeitigen Zoomfaktor auslesen und ihn dann einfach mit dem Makro ändern. Dummerweise habe ich keine Ahnung wie ich auf den Zoomfaktor zugreifen kann. Das Dispatcher Objeckt scheint mir eine Einbahnstraße und die API Refferenz von OOo ist da auch nicht gerade eine Hilfe.
ich will mir zwei Tasten basteln, mit denen ich den Zoomfaktor um je 1% erhöhen bzw. senken kann. Wenn ich ein Makro aufzeichne, dann erhalte ich folgenden Code (die Variablendeklerationen habe ich mal weggelassen):
args1(0).Name = "Zoom.Value"
args1(0).Value = 121
args1(1).Name = "Zoom.ValueSet"
args1(1).Value = 28703
args1(2).Name = "Zoom.Type"
args1(2).Value = 3
dispatcher.executeDispatch(document, ".uno:Zoom", "", 0, args1())
damit setze ich den Zoomfaktor dann auf 121%.
Ich würde jetzt gerne den derzeitigen Zoomfaktor auslesen und ihn dann einfach mit dem Makro ändern. Dummerweise habe ich keine Ahnung wie ich auf den Zoomfaktor zugreifen kann. Das Dispatcher Objeckt scheint mir eine Einbahnstraße und die API Refferenz von OOo ist da auch nicht gerade eine Hilfe.
OOo 2.1 , Win XP
Hallo Frank,
wie ich gelesen habe warst Du auf der user mailinglist erfolgreich. ICh wiederhole hier nur der vollständigkeithalber den Eintrag.
Achtung: Beim Writer gehts über den Umweg ViewSettings, während die anderen Dokument Zugriff direkt über den Controller gewähren.
Das ganz hab ich wie gesagt aus der deutschen User-Mailingliste, wo auf einen Artikel in der englischen dev-mailingslist verwiesen wird:
http://www.openoffice.org/servlets/Read ... stName=dev
wie ich gelesen habe warst Du auf der user mailinglist erfolgreich. ICh wiederhole hier nur der vollständigkeithalber den Eintrag.
Code: Alles auswählen
Sub test
Dim oOfficeDokument as Object
oOfficeDokument = ThisComponent
If oOfficeDokument.supportsService( _
"com.sun.star.text.TextDocument" ) then
MsgBox "Writer-Zoom: " & ThisComponent.CurrentController.ViewSettings.ZoomValue
Elseif oOfficeDokument.supportsService( _
"com.sun.star.sheet.SpreadsheetDocument" ) then
MsgBox "Calc-Zoom: " & ThisComponent.CurrentController.ZoomValue
Elseif oOfficeDokument.supportsService( _
"com.sun.star.presentation.PresentationDocument" ) then
MsgBox "Impress-Zoom: " & ThisComponent.CurrentController.ZoomValue
Else
MsgBox "Draw-Zoom: " & ThisComponent.CurrentController.ZoomValue
End If
End Sub
Das ganz hab ich wie gesagt aus der deutschen User-Mailingliste, wo auf einen Artikel in der englischen dev-mailingslist verwiesen wird:
http://www.openoffice.org/servlets/Read ... stName=dev
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Um zur Erhöhung des Zooms den Code des Macrogenerators nicht verwenden zu müssen, sieht das dann ungefähr so aus (nb: funktioniert der generierte Code für alle Dokumenten-Typen von OOo?):
Das Beispiel funktioniert für Writer, Calc, Impress und Draw-Dokumente:
Das Beispiel funktioniert für Writer, Calc, Impress und Draw-Dokumente:
Code: Alles auswählen
Sub ZoomErhoehen
' Variable deklarieren
Dim oOfficeDokument as Object
Dim nZoom as Integer
Const nZoomStep = 5
Const nMaximalZoom = 500
oOfficeDokument = ThisComponent
If oOfficeDokument.supportsService( _
"com.sun.star.text.TextDocument" ) then
nZoom = oOfficeDokument.currentController.ViewSettings.ZoomValue
If nZoom < nMaximalZoom Then
oOfficeDokument.currentController._
ViewSettings.ZoomValue = nZoom + nZoomStep
End If
Elseif oOfficeDokument.supportsService( _
"com.sun.star.sheet.SpreadsheetDocument" ) then
nZoom = oOfficeDokument.currentController.ZoomValue
If nZoom < nMaximalZoom Then
oOfficeDokument.currentController._
ZoomValue = nZoom + nZoomStep
End If
Elseif oOfficeDokument.supportsService( _
"com.sun.star.presentation.PresentationDocument" ) then
nZoom = oOfficeDokument.currentController.ZoomValue
If nZoom < nMaximalZoom Then
oOfficeDokument.currentController._
ZoomValue = nZoom + nZoomStep
End If
Else
nZoom = oOfficeDokument.currentController.ZoomValue
If nZoom < nMaximalZoom Then
oOfficeDokument.currentController._
ZoomValue = nZoom + nZoomStep
End If
End If
End Sub
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
-
- ***
- Beiträge: 88
- Registriert: Mi, 30.07.2003 18:06
- Wohnort: Wiesloch
gute Frage. Ehrlich gesagt, ist das wirklich ein bisschen schwierig oder zumindest zeitraubend. Im konkreten Fall des Zooms, hab ich das in der Mailinglist aufgeschnappt. Danach hab ich mit einem Dialog die Objekte ausgespäht, welche da erwähnt wurden.
Es gibt die Eigenschaften Dbg_Methods , Dbg_Properties und Dbg_SupportedInterfaces, welche Dir Informationen über die Êigenschaften, Methoden und Interfaces liefern, welche vom Objekt xyz bereitgestellt werden. So kannst Du Dich durch den Dschungel schlagen; Hinweise kriegen, welche Interfaces wohl wichtig sein könnten und in der API-Nachschlagen.
Unter
http://www.openoffice.org/issues/show_bug.cgi?id=18327
findest Du ein Dokument ObjektInspector, das den erwähnten Dialog enthält. Zur Installation machst Du Dir am besten eine neue Basic-Bibliothek 'OOoInspektor' oder so. Dann kannst Du die Module und den Dialog des Dokumentes per Drag.and-Drop in die neue Bibliothek hineinkopieren.
Zum kopieren von Modulen: Extras - Macros... und dann 'Verwalten' oder in den Hilfe Seiten 'Macros und Programmierung' nachschlagen.
Es gibt die Eigenschaften Dbg_Methods , Dbg_Properties und Dbg_SupportedInterfaces, welche Dir Informationen über die Êigenschaften, Methoden und Interfaces liefern, welche vom Objekt xyz bereitgestellt werden. So kannst Du Dich durch den Dschungel schlagen; Hinweise kriegen, welche Interfaces wohl wichtig sein könnten und in der API-Nachschlagen.
Unter
http://www.openoffice.org/issues/show_bug.cgi?id=18327
findest Du ein Dokument ObjektInspector, das den erwähnten Dialog enthält. Zur Installation machst Du Dir am besten eine neue Basic-Bibliothek 'OOoInspektor' oder so. Dann kannst Du die Module und den Dialog des Dokumentes per Drag.and-Drop in die neue Bibliothek hineinkopieren.
Zum kopieren von Modulen: Extras - Macros... und dann 'Verwalten' oder in den Hilfe Seiten 'Macros und Programmierung' nachschlagen.
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
-
- ***
- Beiträge: 88
- Registriert: Mi, 30.07.2003 18:06
- Wohnort: Wiesloch
Der Objektispector ist ein guter Tip. Danke.
Ich habe auch schon etwas daran herumgebastelt.
Momentan versuche ich mir einen Dialog zu erstellen, in dem ich den Namen eines Objektes eingeben kann um es dann mit doinspect abzufragen. Leider führt das zu einer Fehlermeldung (klar, ich übergebe ja nur einen String mit dem Objektnamen und nicht das tatsächliche Objekt). Hast du eine Idee wie man so einen Dialog doch noch hinbekommt?
Ich habe auch schon etwas daran herumgebastelt.
Momentan versuche ich mir einen Dialog zu erstellen, in dem ich den Namen eines Objektes eingeben kann um es dann mit doinspect abzufragen. Leider führt das zu einer Fehlermeldung (klar, ich übergebe ja nur einen String mit dem Objektnamen und nicht das tatsächliche Objekt). Hast du eine Idee wie man so einen Dialog doch noch hinbekommt?
OOo 2.1 , Win XP
Hallo Frank,
ich glaube nicht, dass das mit Basic geht. Jedenfalls hätte ich da keine Ahnung wie das gemacht wird. Das wäre ein hübsches Feature, das irgendeinen Introspection-Mechanismus anbieten würde. Ich kenn sowas jedoch bloss in Java, kann aber nicht sagen, ob das in Java mit OOo-Objekten möglich ist (vemutlich schon).
Natürlcih kannst Du ein Mapping String-Object programmieren. Das ist jedoch keine generische Lösung und jedes inspizierbare Objekt müsste von Hand 'konfiguriert' werden. Da kannst Du gleich jeweils doInspect( xcz ) in eine testProzedur reinschreiben, was nicht mehr umstände macht.
Du kannst so evt. die Properties eines Objektes anzeigen, die über den Namen erfragt werden können, Variablennamen sind meines Wissens jedoch so nicht erreichbar.
sorry
Wenn Du was anderes rauskriegst, UNBEDINGT hier reinposten.
gruss
ich glaube nicht, dass das mit Basic geht. Jedenfalls hätte ich da keine Ahnung wie das gemacht wird. Das wäre ein hübsches Feature, das irgendeinen Introspection-Mechanismus anbieten würde. Ich kenn sowas jedoch bloss in Java, kann aber nicht sagen, ob das in Java mit OOo-Objekten möglich ist (vemutlich schon).
Natürlcih kannst Du ein Mapping String-Object programmieren. Das ist jedoch keine generische Lösung und jedes inspizierbare Objekt müsste von Hand 'konfiguriert' werden. Da kannst Du gleich jeweils doInspect( xcz ) in eine testProzedur reinschreiben, was nicht mehr umstände macht.
Du kannst so evt. die Properties eines Objektes anzeigen, die über den Namen erfragt werden können, Variablennamen sind meines Wissens jedoch so nicht erreichbar.
sorry
Wenn Du was anderes rauskriegst, UNBEDINGT hier reinposten.
gruss
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Hi Frank,
auf der dev-Mailingliste hat ein Sun-Entwickler ein ausführliches Mail zur Introspection in OOo gepostet. Vielleicht hilft Die das ein wenig weiter:
http://api.openoffice.org/servlets/Read ... stName=dev
auf der dev-Mailingliste hat ein Sun-Entwickler ein ausführliches Mail zur Introspection in OOo gepostet. Vielleicht hilft Die das ein wenig weiter:
http://api.openoffice.org/servlets/Read ... stName=dev
Meine Installation: AMD Athlon XP 1600+, 512 MB RAM, SuSE Linux 8.2, OpenOffice 1.1
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/
Kostenlose OOo-CD in der Schweiz: http://www.office-cd.ch/