[gelöst]Symbolleisten bei anderem Dokument wieder einblenden

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

Moderator: Moderatoren

jemies
*
Beiträge: 11
Registriert: Fr, 13.01.2012 15:00

[gelöst]Symbolleisten bei anderem Dokument wieder einblenden

Beitrag von jemies »

Guten Morgen miteinander
Ich habe ein Standalone-Form-Dokument "form.odt", das beim Öffnen per Makro die Symbolleisten ausblendet. Nun möchte ich, dass die Symbolleisten wieder eingeblendet werden, sobald ich ein anderes Dokument öffne oder "nach vorne" in den Focus hole - während "form.odt" weiterhin ohne Symbolleisten bleibt.

Der code zum Ausblenden der Symbolleisten sieht folgendermaßen aus:
(Quelle: viewtopic.php?f=18&t=50130)

Code: Alles auswählen

sub HideBars 'Symbolleisten ausblenden
'sub __HideBars(optional n as integer) 'Symbolleisten ausblenden
   'Option aus: 1=Menü , 2=Statusleise. 4=Formsnavigationbar
    dim lmgr as object, i as integer, o as object
    
    wait 1000
   
    oDoc = ThisComponent
    if oDoc.CurrentController.isFormDesignMode() then exit sub
    lmgr = oDoc.CurrentController.Frame.LayoutManager
    if ismissing(n) then n=0 
    
    xray lmgr

    if n and &H01 then lmgr.hideElement("private:resource/menubar/menubar") 'Menü 
   if n and &H02 then lmgr.hideElement("private:resource/statusbar/statusbar")
   if n and &H04 then lmgr.hideElement("private:resource/toolbar/formsnavigationbar")
   lmgr.hideElement("private:resource/toolbar/standardbar")
   lmgr.hideElement("private:resource/toolbar/formdesign")
   lmgr.hideElement("private:resource/toolbar/formcontrols")
   lmgr.hideElement("private:resource/toolbar/textobjectbar")
   
   rem ---- (Lineale ausblenden)
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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Ruler"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:Ruler", "", 0, args1())   
end sub 
Ich vermute, ich benötige einen Eventlistener, der überprüft, wann form.odt den Focus hat und wann nicht. Hat jemand eine Idee?

Dank und Gruß
jemies
Zuletzt geändert von jemies am Mi, 25.01.2012 02:54, insgesamt 1-mal geändert.
Ubuntu 11.10 -- 64-BIT
LibreOffice 3.3.4
jemies
*
Beiträge: 11
Registriert: Fr, 13.01.2012 15:00

FocusListener will nicht recht...

Beitrag von jemies »

Hallo
Ich habe nun versucht, entlang der Beschreibung in "OOME 3.0", einen Listener zu erstellen. Leider gibt es keinerlei Reaktionen auf einen Fokuswechsel.

Code: Alles auswählen

REM _______________________Nicht gelöst. ersetzt durch den Gebrauch von STRG + Umschalt + "J" _____________________________________________
REM die beiden Focus-Listener müssen global sein für die Überwachung, 
REM ob die Symbolleisten ein- oder ausgeblendet werden sollen. 
REM (Nur für das SIF-Büro sollen sie ausgeblendet werden.)
		
		Global vFocusGainListener   
		Global vFocusGainBroadCast

REM Zum Start der Überwachung führen Sie dieses Makro aus.
REM Muss in die SIF-Büro-Datei eingebunden werden als Makro beim
REM "Dokument-öffnen"-Ereignis

Sub StartListeningToFocusGainEvents
  Dim sPrefix$
  Dim sService$
  sPrefix = "focus_gain_"
  sService = "com.sun.star.awt.XFocusListener"
  
  REM Das Anmeldungsobjekt zur Beobachtung der FokusÄnderung
  REM ist der CurrentController
  vFocusGainBroadCast = ThisComponent.getCurrentController
    
  'Erzeugt einen Listener zum Abfangen der FokusÄnderung-Ereignisse
  vFocusGainListener = CreateUnoListener(sPrefix, sService)
    
  'Registriert den Listener beim Dokument-Controller
  vFocusGainBroadCast.addEventListener(vFocusGainListener)
End Sub


Sub focus_gain_disposing(vEvent)
  msgbox "Entfernt den FokusÄnderung-Listener"
End Sub

Sub focus_gain_focusGained(vEvent)
  Dim vFocusGained As Object
   vFocusGained =  vEvent.source
   Print "Hurra, das Dokument ist wieder vorne"    		
End Sub

Sub focus_gain_focusLost(vEvent)
  Dim vFocusLost As Object
   vFocusLost = vEvent.source
   Print "Seufz, ein anderes Dokument ist jetzt vorne "
End Sub

REM _______________________Nicht gelöst. ersetzt durch den Gebrauch von STRG + Umschalt + "J" _____________________________________________

Weiß wohl jemand, wo der Fehler steckt?
Ubuntu 11.10 -- 64-BIT
LibreOffice 3.3.4
jemies
*
Beiträge: 11
Registriert: Fr, 13.01.2012 15:00

Re: Symbolleisten bei anderem Dokument wieder einblenden

Beitrag von jemies »

Und hier ist die Lösung:

Quelle: http://www.oooforum.org/forum/viewtopic.phtml?t=72577

Code: Alles auswählen

sub IMGCAT_maxWindow
dim document
dim dispatcher

document = ThisComponent.CurrentController.Frame
ThisComponent.lockControllers

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FullScreen"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:FullScreen", "", 0, args1())

ThisComponent.UnlockControllers

doc = Stardesktop.getCurrentComponent()
frame = doc.CurrentController.Frame
lmgr = frame.LayoutManager
lmgr.setVisible(False)

end sub 
Funktioniert wunderbar.
Gute Nacht,
jemies
Ubuntu 11.10 -- 64-BIT
LibreOffice 3.3.4
Antworten