Writer-Dokument im Vordergrund öffnen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Writer-Dokument im Vordergrund öffnen

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Mo, 28.12.2009 01:38

Hallo,

für die weiterhin Interessierten:

Nachdem sich offensichtlich das Verhalten nicht grundsätzlich (ausser was die interne Hierarchie geöffneter OO-Dokumente angeht) via Makro ändern läßt, habe ich das Problem mit einem kleinen AutoIt-Programm lösen können:

- zuerst wird mit Öffnen des Writer-Dokumentes via OO-Makro ein neuer Titel ins Dokument geschrieben.

- das AutoIt-Programm (das im RAM ist) fungiert als "Wächter" und setzt jedes sich öffnende Dokument, das von SpeedAddressPro beschrieben wird, mit dem neuen Titel aktiv in den Vordergrund und ändert den Titel erneut um aus der "schlafenden" Schleife genommen zu werden.

Dank und Gruß
Thomas

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 22:53

'Toll' solche Informationen nebenbei zu bekommen...
S.o. Außerdem: Wie sollte denn das Makro sonst in diesem (!!!) Fall starten?

Re: Writer-Dokument im Vordergrund öffnen

von Stephan » Sa, 26.12.2009 22:31

Das Makro ist mit dem Dokumentstart verknüpft.
'Toll' solche Informationen nebenbei zu bekommen...
wie ich schon oben geschrieben hatte, passiert "nichts" mit dem eingebauten Makro
WAS HEISST DAS?

Entweder wird das richtige Objekt angesprochen oder nicht, ich hatte bereits gefragt ob Du das geprüft hast... und wenn nun ein bestimmtes Objekt auf Vorhandensein geprüft wird kann es natürlich sein das dieses garnicht vorhanden ist zum Zeitpunkt wo da Makro läuft, weswegen dann natürlich:

Code: Alles auswählen

if aktuell.GetLocation = gesuchter_dateiname Then
nie erfüllt ist und:

Code: Alles auswählen

aktuell.CurrentController.Frame.ContainerWindow.toFront()
Exit Sub
nie durchlaufen wird ... man müßte das halt überprüfen um den Fehler zu finden...



Ende der Diskussion für mich


Stephan

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 22:20

Hallo Stephan,

wie ich schon oben geschrieben hatte, passiert "nichts" mit dem eingebauten Makro (mit dem neuen Dateinamen), d.h. es ändert nichts am Verhalten und das Dokument mit dem neuen Namen (der auch im Makro steht) wird nicht im Vordergrund gestartet. Das Makro ist mit dem Dokumentstart verknüpft.

Viele Grüße
Thomas

Re: Writer-Dokument im Vordergrund öffnen

von Stephan » Sa, 26.12.2009 21:37

Jedoch ist mir nicht ganz klar, wie ich seinen oben verlinkten Beitrag zur weiteren Erkenntnis einbauen kann:
indem Du das richtige Dokument auswählst und dann dessen Dokument-Objekt startt ThisComponent benutzt.

Das in den Vordergrund zu bringende Dokum ent hat einen namen, denn Du schreibst:
und unter anderem Namen abgespeichert, geschlossen und neu geöffnet
Baue also den Code auf den ich verwiesen hatte:

Code: Alles auswählen

sub gesamt
'hier Dateinamen vorgeben
gesuchter_dateiname = "post.sxw"
'----------------------------------------
laenge = Len(gesuchter_dateiname)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces(aktuell, "com.sun.star.frame.XModel") Then
      If aktuell.hasLocation() Then 
          if Right(ConvertFromURL(aktuell.GetLocation),laenge) = gesuchter_dateiname Then
             if Right(ConvertFromURL(aktuell.GetLocation),3) ="sxc" Then
                'Beispiel Calc
                blatt = aktuell.getSheets().GetByName("Tabelle1")
                zelle = blatt.getCellByPosition(0, 0)
                zelle.Value = 12345
             end if
             if Right(ConvertFromURL(aktuell.GetLocation),3) ="sxw" Then
                'Beispiel Writer
                Cursor = aktuell.Text.createTextCursor()
                Cursor.String = "Das ist ein Beispieltext"
             end if
          end if
      end if
   end if
Loop
end sub
so um das Du das Dokument anhand seines Names identifizieren kannst:

Code: Alles auswählen

sub gesamt
'hier Dateinamen vorgeben
gesuchter_dateiname = ConvertToURL("D:\xyz\abc.odt")
'----------------------------------------
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces(aktuell, "com.sun.star.frame.XModel") Then
      If aktuell.hasLocation() Then 
          if aktuell.GetLocation = gesuchter_dateiname Then
	          aktuell.CurrentController.Frame.ContainerWindow.toFront()
	          Exit Sub		
          end if
      end if
   end if
Loop
end sub
Auf das Makro unten von Charly kommt immer "Datei nicht gefunden".


ich hatte nicht auf dieses Makro verwiesen, sondern NUR auf einen KONKRETEN Beitrag von mir:

im Sinne wie ich es am 04.10.2004 15:23 nutze: viewtopic.php?f=18&t=1842)


Gruß
Stephan

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 19:43

Hallo,

also zuerst: Das Writer-Dokument ist ein xy.odt, das alle Makros beinhaltet. Es wird via eine andere Anwendung (OLE) geöffnet, mit Adresse, etc., beschrieben und unter anderem Namen abgespeichert, geschlossen und neu geöffnet zur Weiterverarbeitung (hierfür das gewünschte Vordergrund-Verhalten). Die vorhandene DDE-Verknüpfung plus vorhandene Makros funktionieren einwandfrei.

Code: Alles auswählen

sub vordergrund
Dim oDoc
oDoc = ThisComponent
oDoc.CurrentController.Frame.ContainerWindow.toFront()
msgBox "Hallo User, Makro wird ausgeführt!"
end sub
Auch das funktioniert, d.h. die Meldung wird angezeigt. Nicht funktioniert das Öffnen im Vordergrund...

Stephans Vermutung könnte also stimmen. Jedoch ist mir nicht ganz klar, wie ich seinen oben verlinkten Beitrag zur weiteren Erkenntnis einbauen kann:

Auf das Makro "gesamt" passiert gar nichts. Auf das Makro unten von Charly kommt immer "Datei nicht gefunden". Dabei kann ich das doc mit dem odoc tauschen... Die Makros sind aber auch ein paar Jahre alt.

Viele Grüße
Thomas

Re: Writer-Dokument im Vordergrund öffnen

von Stephan » Sa, 26.12.2009 19:22

Hallo Jürgen,
dann wird das Makro in der "Vorlage" einfach unterdrückt.
Das ist halt meine Vermutung das es so ist.
gegen diese Vermutung (also das das Makro u.u. garnicht ausgeführt wird) habe ich garnichts einzuwenden, ich habe mich nur gegen DEine ursprüngliche Antwort gewehrt, die ja wohl sinngemäß hieß:

'weil das Makro über Extras-... zugewiesen ist kann es nicht sein das ThisComponent ungewollt auf ein falsches Objekt verweist'

denn Du hattest Dich mit DEiner Anwort auf meine Aussage:
Du jedoch mit ThisComponent (im Moment des Ablauf des Makros) ein falsches Objekt ansprichst. Hast Du das geprüft?
bezogen.
Und über Extras-... ist ja nun einmal nicht nur die ZUweisung von Dokumentmakros möglich und ohne ERklärung (die Du jetzt im Nachhinein gibst) war mir nicht klar das es sich um ein Dokumentmakro handeln soll (denn 'müssen' muß es sich ja nicht)

Verstehe doch bitte an der Stelle einfach das das 'garnicht-erst-Ausführen' eines Makros etwas anderes ist als das Ausführen des Makros mit Bezug auf ein falsches Objekt und nur auf letzteres bezog sich meine Ausssage.
was ich Dir auch gönne.
das ist nett, abe ich sehe mich hier nicht im Wettbewerb, ich hatte nachgefragt in der Vermutung Du wüßtest an der Stelle mehr als ich.


Gruß
Stephan

Re: Writer-Dokument im Vordergrund öffnen

von turtle47 » Sa, 26.12.2009 18:18

Hallo Stephan,
Stephan hat geschrieben:Inwiefern wäre die Art des Starts des Makros Garant dafür das mit ThisComponent nicht unerwünschterweise ein falsches Objekt referenziert werden könnte? Bitte um Erklärung.
Ich gehe jetzt mal davon aus, dass das Makro in dem erzeugten Dokument (vielleicht eine Dokumentvorlage) hinterlegt ist. Dann sollte sich

Code: Alles auswählen

oDoc = ThisComponent
oDoc.CurrentController.Frame.ContainerWindow.toFront()
schon auf dieses Dokument beziehen.

Wenn in dem erzeugenden Dokument aber nicht mitgegeben wird, dass in dem erzeugten Dokument Makros ausgeführt werden dürfen

Code: Alles auswählen

Dim myProp(0) as new com.sun.star.beans.PropertyValue
myProp(0).name="MacroExecutionMode"
myProp(0).value = 4  'ALWAYS_EXECUTE_NO_WARN 4 Makros werden immer ausgeführt, keine Warnung
url=converttourl("C:\test.sxw")
oDocument = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
dann wird das Makro in der "Vorlage" einfach unterdrückt.
Das ist halt meine Vermutung das es so ist.


Feststellen könnte man das mit einer einfachen MsgBox im erzeugten Dokument.

Code: Alles auswählen

sub vordergrund
Dim oDoc
oDoc = ThisComponent
oDoc.CurrentController.Frame.ContainerWindow.toFront()
msgBox "Hallo User, Makro wird ausgeführt!"
end sub
Wenn die MsgBox angezeigt wird und das Doc nicht in den Vordergrund rückt, dann hast Du mit Deiner Vermutung recht, was ich Dir auch gönne.

Ich warte jetzt jedenfalls einfach mal ab was Thomas berichtet.

Jürgen

Re: Writer-Dokument im Vordergrund öffnen

von Stephan » Sa, 26.12.2009 13:16

Ich denke das kann man ausschliessen weil:
Inwiefern wäre die Art des Starts des Makros Garant dafür das mit ThisComponent nicht unerwünschterweise ein falsches Objekt referenziert werden könnte? Bitte um Erklärung.

Ich kann bisher nur feststellen das das makro eine einzige Zeile hat in der etwas Sichtbares passieren sollte, nämlich:

Code: Alles auswählen

oDoc.CurrentController.Frame.ContainerWindow.toFront()
Solange nun keine Fehlermeldung erfolgt (denn davon stand in der Frage nichts) scheint die Zeile akzeptiert zu werden, mithin ist oDoc die Referenz auf ein zulässiges Objekt, was mich einzig vermuten lässt es ist nicht das Richtige (also richtiges Dokument-Objekt)


Gruß
Stephan

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 11:52

Danke Stephan, danke Jürgen,

ich melde mich später nach dem Festschmaus wieder...

Viele Grüße
Thomas

Re: Writer-Dokument im Vordergrund öffnen

von turtle47 » Sa, 26.12.2009 11:50

Hi,

wo befindet sich denn das Makro um den Focus zu setzen? In der neuen erstellten Datei, ich nehme an eine Vorlage, oder in der erzeugenden Datei?

Wenn Das Makro in der neuen Datei ist dann musst Du noch in der erzeugenden Datei ensprechende Parmeter mitgeben !

Jürgen

EDIT:
Du jedoch mit ThisComponent (im Moment des Ablauf des Makros) ein falsches Objekt ansprichst. Hast Du das geprüft?
Ich denke das kann man ausschliessen weil:
Das hier (eingebaut unter Extras->Anpassen->Ereignisse)...

Re: Writer-Dokument im Vordergrund öffnen

von Stephan » Sa, 26.12.2009 11:45

...funktioniert zumindest nicht. Hat jemand eine Idee?
Und was funktioniert nicht?
Mein erster Verdacht wäre das das Ganze natürlich funktioniert, Du jedoch mit ThisComponent (im Moment des Ablauf des Makros) ein falsches Objekt ansprichst. Hast Du das geprüft?

Liegt es daram würde ich vor dem Öffnen des Writer-Dokuments prüfen welche Fenster bereits offen sind (z.B. im Sinne wie ich es am 04.10.2004 15:23 nutze: viewtopic.php?f=18&t=1842) und vor dem Ablauf prüfewn welches fEnster (nach Öffnen des Writerdokuments) hinzugekommen ist und micht auf dieses Objekt direkt beziehen (statt auf ThisComponent).



Gruß
Stephan

Re: Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 10:57

Hallo Jürgen,

vielen Dank. Geht aber auch leider nicht...

Viele Grüße
Thomas

Re: Writer-Dokument im Vordergrund öffnen

von turtle47 » Sa, 26.12.2009 10:32

TJF hat geschrieben:Hat jemand eine Idee?
vielleicht so:

Code: Alles auswählen

sub vordergrund
Dim oDoc
oDoc = ThisComponent
oDoc.CurrentController.Frame.getContainerWindow().setFocus
end sub
Jürgen

Writer-Dokument im Vordergrund öffnen

von TJF » Sa, 26.12.2009 10:03

Hallo,

ich würde gerne ein Writer-Dokument nach dem Öffnen aktiv in den Vordergrund bringen. Es soll kein Dateiname im Spiel sein, weil in das Dokument von einer anderen Anwendung geschrieben wird und immer vorher einen anderen Dateinamen erhält. Ich habe das viewtopic.php?f=9&t=31026 gelesen und bin mir nicht sicher, ob das überhaupt möglich ist.

Das hier (eingebaut unter Extras->Anpassen->Ereignisse)...

Code: Alles auswählen

sub vordergrund
Dim oDoc
oDoc = ThisComponent
oDoc.CurrentController.Frame.ContainerWindow.toFront()
end sub
...funktioniert zumindest nicht. Hat jemand eine Idee?

Dank und Gruß
Thomas

Nach oben