Laufzeitfehler bei ActiveWindow

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Laufzeitfehler bei ActiveWindow

Beitrag von Charly »

Hallo Lisa!

Den Befehl activeWindow kenne ich jetzt nur von MS-Office und VBA.

Starbasic und VBA haben gerade in den Objecten große Unterschiede. Bis zur Version 2.x waren VBA-Makros in OpenOffice nicht lauffähig. Erst ab der Version 3.x wurde eine VBA-Unterstützung eingebaut. Diese ist jedoch erst im Aufbau begriffen. Zur Aktivierung muss aber dazu ein eigener Befehl eingebaut werden.

Code: Alles auswählen

Option VBASupport 1
Ich habe hier am Arbeitsplatz leider keine 3.x Version, so dass ich nicht testen kann, ob activWindow unterstützt wird. Aber im Grundsatz ist es immer besser gleich in Starbasic zu programmieren. Wenn du z.B. den Titel des aktiven Fensters von OpenOffice erhalten willst, kannst du das folgendermaßen programmieren:

Code: Alles auswählen

Sub Main
    Dim oDoc As Object
    Dim oFrame as Object
    oDoc = ThisComponent
    oFrame = oDoc.Currentcontroller.Frame
    MSGBox(oFrame.Title)
End Sub
Gruß
Charly
Lisa [NR]
Beiträge: 7
Registriert: So, 26.07.2009 19:38

Re: Laufzeitfehler bei ActiveWindow

Beitrag von Lisa [NR] »

Hallo Charly,

danke für Deine Antwort. Das war jetzt allerdings ein Missverständnis.
Das Beispiel steht wörtlich mit ActiveWindow in dem Buch "OpenOffice.org Basic. Sprache, UNO, API" auf Seite 31, Stand ist offenbar OOo 2. Ich habe es auch wörtlich so in der Hilfe von OOo 3.1.0 und 3.0.1 gefunden. Das hat mich jetzt so verblüfft: Das Beispiel steht in der Hilfe, funktioniert aber gar nicht. Mit Probieren mit ThisComponent bin ich schon ein Stück weiter und habe festgestellt, dass es schon an der Name-Eigenschaft scheitert:

Code: Alles auswählen

Sub Main

	Dim oDoc As Object
	Set oDoc = ThisComponent
	If Len(oDoc.Name) = 0 Then
		MsgBox "leer"
	Else
		MsgBox oDoc.Name
	End If

End Sub
Das funktioniert nicht, während es mit Title funktioniert:

Code: Alles auswählen

Sub Main

	Dim oDoc As Object
	Set oDoc = ThisComponent
	If Len(oDoc.Title) = 0 Then
		MsgBox "leer"
	Else
		MsgBox oDoc.Title
	End If

End Sub
Ich habe jetzt so interpretiert, dass ThisComponent der Container ist, also das das Modul enthaltende Dokument, das trifft aber offenbar nicht zu. Du hast noch Currentcontroller von Frame drin, das gibt offenbar die komplette Programm-Caption wieder. Na, ich seh schon, da muss ich noch einiges lernen. Leider ist die integrierte Hilfe nicht so gut, zu Currentcontroller findet sich nichts, und ich vermisse auch die Intellisense sehr - man tappt so im Dunkeln. Oder gibt's da in der IDE noch ein Knöpfchen, das ich noch nicht gefunden habe, wo man Zugriff auf Intellisense oder einen Objektkatalog hat. Das Knöpfchen "Objektkatalog" habe ich zwar gefunden, das macht aber nur das Projekt-Fenster zur Auswahl des Moduls auf. Mir fehlt irgendwie ein Überblick bzw. ein Nachlesemöglichkeit im Programm zu Befehlen und Eigenschaften. Das einzige, was Beispiele liefert, ist bis jetzt das Aufzeichnen. Aber wenn dann was aufgezeichnet ist, hat jeder Befehl 3, 4 Argumente. Ich würde gerne nachlesen, was das für Argumente sind, die ein Befehl da benötigt. Wo kann man denn das sehen? Woher weiß man denn, welche Eigenschaften ThisComponent hat?

Oder nochmal kürzer: Die Syntax, Variablen und Schleifen sind ja fast identisch. Aber ich weiß halt einfach nicht, wie man einen passenden Befehl findet und wie man Informationen über dessen Argumente kriegt.

Sorry, dass ich Dich jetzt so überhäufe, ich freu mich über jeden hilfreichen Link.

Liebe Grüße
Lisa
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Laufzeitfehler bei ActiveWindow

Beitrag von Charly »

Hallo Lisa!

ThisComponent gibt das Dokument wieder, in dem sich das Makro befindet. Von dort kann kann man zu anderen Objekten kommen.

Welche Eigenschaften und Methoden ein Objekt hat, kann durch das Tool XRAY ermittelt werden.
Anwendungshinweis:
viewtopic.php?f=18&t=25913

Ansonsten empfehle ich dir noch die Seite vom Michael Dannenhöfer. Dort sind viele Fragen beantwortet.
http://www.dannenhoefer.de/faqstarbasic/index.html

Ein Hinweis noch zu dem aufgezeichneten Code. Hierbei handelt es sich um eigene Programmiersprache (Dispatcher-Code), die allerdings mit Starbasic gemischt werden kann, wenn auf manche unterschiedliche arbeitsweise geachtet wird. Allerdings ist es meistens von ein paar Ausnahmen abgesehen, besser die Starbasic-Befehle zu nehmen, als den aufgezeichneten Code.

Gruß
Charly
Lisa [NR]
Beiträge: 7
Registriert: So, 26.07.2009 19:38

Re: Laufzeitfehler bei ActiveWindow

Beitrag von Lisa [NR] »

Hallo Charly,

herzlichen Dank für Deine Antwort. XRay habe ich mit gerade heruntergeladen. Das probier ich dann erst mal in Ruhe aus.
Danke auch für den Link zur FAQ, das sieht schon sehr gut aus.

Danke auch für Deine Geduld, davon könnte ich auch brauchen, ich bin beim Lernen anfangs meist sehr ungeduldig. Aber ich sehe schon, ich werd erstmal ein bisschen herumlesen, Futter hab ich ja jetzt genug.

Auf jeden Fall finde ich OOo wirklich sehr faszinierend.
Ich melde mich sicherlich wieder,

liebe Grüße
Lisa
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Laufzeitfehler bei ActiveWindow

Beitrag von komma4 »

Das Beispiel habe ich auch in der 3.0.1 Hilfe gefunden ....

a) es benötigt auf jeden Fall die Zeile Option VBASupport 1 zu Beginn des Moduls!
b) ActiveWindow funktioniert nur korrekt, wenn das Makro aus einem Calc-Dokument aufgerufen wird,
c) xray zeigt ein VBAwindow-Objekt an, dem die Eigenschaft NAME fehlt ... => Fehler in der Hilfe.


Zum Lernen:
Andrew Pitonyaks Makro Dokument
Andrew Pitonyaks Datenbank Dokument
Meine Basic-Beispiele (s. Footer) sind vielleicht auch interessant... 8)
Zum Testen:
Xray
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Lisa [NR]
Beiträge: 7
Registriert: So, 26.07.2009 19:38

Re: Laufzeitfehler bei ActiveWindow

Beitrag von Lisa [NR] »

Hallo Winfried,

aha, so ist das, in Calc habe ich's nicht probiert. Und super, die Antwortgeschwindigkeit. Hier gefällt's mir sehr gut. :D
Option VBASupport 1 klingt natürlich verlockend, das werd ich aber erstmal weglassen. Wenn ich schon mit OOo anfangen will, dann richtig.

Und herzlichen Dank für die Links, das deutsche Buch habe ich mir gleich runtergeladen.

Liebe Grüße
Lisa
Antworten