Fenster aktivieren/umschalten

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

Moderator: Moderatoren

sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Fenster aktivieren/umschalten

Beitrag von sarotti »

Hallo ihr,

heute habe ich wieder einmal keine Idee und die Recherche im Forum hat mich zu Dannenhöfer (http://www.dannenhoefer.de/faqstarbasic ... terwaehlen) geführt. Leider auch hier ohne Erfolg.

Es geht um Folgendes:

Ich möchte zwischen mehreren geöffneten Fenstern hin- und herwechseln können. D.h. es wird geprüft, ob das gesuchte Dokument geöffnet ist und dann zu diesem gewechselt. Im Prinzip nicht besonders schwer, die Fenster zu identifizieren. Aber wie wird das gewünschte Fenster aktiviert, d.h. aktiv in den Vordergrund geschaltet?

Hier erst mal mein Code (...bis zu diesem Problem):

Code: Alles auswählen

sub FensterWechseln

  GesuchteDatei="HauptformularDB.odt"
  Dim oDesktop As Object, oDocs As Object 
  Dim oDoc As Object, oComponents As Object
  
  oComponents = StarDesktop.getComponents()
  oDocs = oComponents.createEnumeration()
  
  DO WHILE oDocs.hasMoreElements()
    ON ERROR resume next
    oDoc = oDocs.nextElement()
    datei=odoc.geturl()
    FileN=FileNameoutofPath(datei)
    
    if FileN=GesuchteDatei then 
	    myFenster=oDoc
	    EXIT DO
    end if
  LOOP

REM **** diese Möglichkeiten habe ich alle erfolglos probiert....
'starDesktop.isTop(myFenster)=true
'starDesktop.isActive(myFenster)=true
'StarDesktop.setActiveFrame(myFenster)
'StarDesktop.currentComponent=myFenster

end sub
... wer hat hier einen Ansatz für mich?

Danke

Gruss
sarotti
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Fenster aktivieren/umschalten

Beitrag von turtle47 »

Hallo Sarotti,

wenn du nach "FileN = FileNameoutofPath(datei)" eine Msgbox setzt dann wirst Du fesstellen das diese immer leer bleibt.

Code: Alles auswählen

FileN = FileNameoutofPath(datei)
	msgbox FileN
Also es kommt nichts an!

Du musst am Anfang Deines Code folgende Library aufrufen:

Code: Alles auswählen

GlobalScope.BasicLibraries.LoadLibrary("Tools")
Das Fenster zu Deinem Dokument bekommst Du mit:

Code: Alles auswählen

oDoc.CurrentController.Frame.getContainerWindow().setFocus
Hier der komplette Code:

Code: Alles auswählen

sub FensterWechseln
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	GesuchteDatei = "HauptformularDB.odt"
	Dim oDesktop As Object, oDocs As Object
	Dim oDoc As Object, oComponents As Object
	oComponents = StarDesktop.getComponents()
	oDocs = oComponents.createEnumeration()
	DO WHILE oDocs.hasMoreElements()
	ON ERROR resume next
	oDoc = oDocs.nextElement()
	datei= odoc.geturl()
	FileN = FileNameoutofPath(datei)
    if FileN = GesuchteDatei then
    oDoc.CurrentController.Frame.getContainerWindow().setFocus
       EXIT DO
    end if
  LOOP
end sub
Hilft das weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Re: Fenster aktivieren/umschalten

Beitrag von sarotti »

Hallo Jürgen,

ja, du hast absolut recht... die Bibliothek sollte man schon vorher aufrufen für die Funktion "FileNameoutofPath" (hatte ich in der vorherigen Versuchsversion gemacht ... :?)

Aber die eigentliche Hilfe war Dein Hinweis mit ...

Code: Alles auswählen

oDoc.CurrentController.Frame.getContainerWindow().setFocus
Vielen Dank, fuktioniert einwandfrei!!! :wink:

....das war genau das was ich gesucht hatte

Gruss
sarotti
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: Fenster aktivieren/umschalten

Beitrag von steffn »

Hallo Ihr,

ich möchte gerne, dass das Fenster einer anderen Datei.odt in den Vordergrund springt. Ich habe habe die Datei durch Basic öffnen lassen, kann 'setactivesheet' und 'select', schaffe es aber leider nicht, dass mir das auch gezeigt wird, wenn sich das Fenster im Hintergrund befindet. Alle '.setfocus'-Versuche aktivieren das Fenster der Datei, in der der Code läuft.
Ich schätze, dass zwischen den Klammern hinter 'getcontainerwindow' ein guter Platz für ein Objekt ist, oder vielleicht 'currentcontroller' oder 'frame' geändert werden kann. Die Suche im Forum nach "setfocus" und nach "vordergrund" hat mir leider nichts offensichtlich brauchbares gezeigt.
:o
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Fenster aktivieren/umschalten

Beitrag von komma4 »

steffn hat geschrieben: einer anderen Datei.odt in den Vordergrund springt. Ich habe habe die Datei durch Basic öffnen lassen, kann 'setactivesheet' und 'select'
Datei.odt <> setActiveSheet
(jetzt mal unabhängig davon, dass OOo sich [zumindest unter Linux] nicht nach Dateiendungen richtet, sondern die zu öffnende Komponente aus dem Code der Datei selbst bestimmt)


Egal: wenn Du das Objekt der Datei beim Öffnen hast, dann verwende es (anstelle von oDoc) in der Codezeile von Jürgen.

Code: Alles auswählen

oDoc.CurrentController.Frame.getContainerWindow().setFocus()
Wenn das nicht funktioniert, dann musst Du Deinen Code mit XRay genauer untersuchen: eine Ferndiagnose ist mit einem Satz "aktivieren das Fenster der Datei, in der der Code läuft" nicht möglich... (da musst Du schon den ganzen Code posten, damit wir die fehlerhafte Stelle sehen können).
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)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: Fenster aktivieren/umschalten

Beitrag von steffn »

na Gott sei dank habe ich den Code nicht gepostet!
peinlichen Fehler eingebaut
tja, copy-and-paste will geübt sein :mrgreen:

dass ich mehr als einen ganzen Tag pausiert habe, war bestimmt ganz gut

danke, dass Du noch mal explizit geschrieben hast, dass das Ding genau so und nicht anders funktioniert
oo4.1.2 in winxp pro mit sp3
Antworten