Seite 1 von 1
(Writer) Text-Cursor verstecken
Verfasst: Sa, 24.07.2010 22:07
von marcel_at_work
Hallo Freunde,
ich hab mir jetzt, per Writer, ein externes Formular angelegt und sämliche Elemente der Programm-Oberfläche ausgeblendet, um ein annähernd eigenständiges Aussehen meiner OOo-Anwendung hinzubekommen. Das einzige, was noch fehlt - da ich es als unbeschreiblich störend empfinde - , wäre, den Textcursor irgendwie auszublenden. Hat jemand einen Rat, ob dies möglich ist?
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 25.07.2010 07:38
von komma4
Du hast keine Eingabefelder, nur Schaltflächen?
Code: Alles auswählen
ThisComponent.CurrentController.ViewCursor.setVisible( FALSE )
funktioniert bei mir nicht

Re: (Writer) Text-Cursor verstecken
Verfasst: So, 25.07.2010 14:19
von marcel_at_work
Hallo Winfried,
doch... doch, natürlich habe ich Eingabefelder.
.ViewCursor, sowie auch fast alle anderen Eigenschaften von CurrentController, habe ich schon vergebens getestet. Es ist zwar nicht sonderlich schlimm, wenn im Hintergrund, in der Writer-Oberfläche, ein blinkender Textcursor zu sehen ist, aber es ist dennoch irgendwo doof - zumal er ja absolut nicht gebraucht wird (zum. nicht an dieser Stelle).
Sonst noch einen Rat?
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 25.07.2010 21:55
von marcel_at_work
Ps.: Wie würdest DU denn eine Anwendung unter OOo realisieren, wenn als oberstes Kriterium eine annähernd "propietäre" Oberfläche (sprich: keine regulären Menüs und das Vorhandensein von den Titelleisten-Buttons wie z.B. "Minimieren" (weshalb auch nicht unbedingt ein Dialog verwendet werden kann)) vorhanden sein soll?
Mensch... mit VBA ging alles so unsagbar leicht - dort konnte man einen Dialog (Form) per API nach Belieben anpassen und u.v.a. sogar das Programm-Icon von Excel austauschen, wofür ich ja auch immernoch keine Lösung unter OOo gefunden habe.
Ich bete einfach mal für irgendwelche (auch wenn irrsinnige

) fremden Gedankengänge, die mich auf meinem Weg ein kleines Bißchen weiter bringen könnten.
Lg,Marci
EDIT:
Huiiii,... ich hab grad gesehen, das das mit dem Textcursor im Hintergrund NICHT für Formulare gilt, die direkt in Base eingebunden sind.
Ist das nicht auch extern irgendwie möglich? Und, kann man dieses Menü, das man dort in Base mit der rechten Maustaste über dem Formular ("Bilder ausschalten", etc.) öffnen kann, abschalten?
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 25.07.2010 23:12
von turtle47
Hi Marcel,
nehme Dein Writer-Doc (Formular) setzte die Ansicht auf Weblayout und speichere es ab.
Setze anschliessend im Dateimanger bei den Eigenschaften den Status auf Schreibgeschützt.
Öffne anschliessend Dein Doc neu und Du hast eine reine Eingabemaske ohne Cursor.
Die Symbolleisten kannst Du ja wie bereits schon angewendet via Makro ausblenden.
Viel Erfolg.
Jürgen
Re: (Writer) Text-Cursor verstecken
Verfasst: Di, 27.07.2010 23:40
von marcel_at_work
Hallo Jürgen,
danke für dein Feedback.
Der Textcursor im Hintergrund verschwindet nun zwar, aber der der Maus bleibt leider weiterhin erhalten. Einen Rat? Oder ist dieser Zustand einfach das Max. an Anpassung???
Zudem ist auch immer noch das Kontextmenü des rechten Mausbuttons anwählbar - kann man dieses irgendwie abschalten?
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: Mi, 28.07.2010 18:53
von turtle47
Hi Marcel,
marcel_at_work hat geschrieben:Der Textcursor im Hintergrund verschwindet nun zwar, aber der der Maus bleibt leider weiterhin erhalten. Einen Rat?
Von dem Mauszeiger war aber noch nie die Rede!
Zumal Du geschrieben hattest:
marcel_at_work hat geschrieben:Das einzige, was noch fehlt - da ich es als unbeschreiblich störend empfinde - , wäre, den Textcursor irgendwie auszublenden. Hat jemand einen Rat, ob dies möglich ist?
marcel_at_work hat geschrieben:Zudem ist auch immer noch das Kontextmenü des rechten Mausbuttons anwählbar - kann man dieses irgendwie abschalten?
Auch von dem Kontextmenue war noch nie die Rede!
Was kommt den als nächstes? Bestimmte Tasten sperren?
Oder den Gemütszustand des Users mit einem Smilie im Formular anzeigen?
Ich mag es ehrlich gesagt nicht wenn immer wieder nachgelegt wird.
Ausserdem mag ich es nicht, wenn man dem User sämtliche Funktione entzieht und ihn somit quasi entmündigt.
marcel_at_work hat geschrieben:und das Vorhandensein von den Titelleisten-Buttons wie z.B. "Minimieren" (weshalb auch nicht unbedingt ein Dialog verwendet werden kann))
Dazu hatten wir in diesem
Thread schon mal was geschrieben.
turtle47 hat geschrieben:dann ist die Titelleiste halt "nur" deaktiviert und somit das X für Schliessen nicht mehr anklickbar.
Noch mal zu diesem Thema:
marcel_at_work hat geschrieben:Zudem ist auch immer noch das Kontextmenü des rechten Mausbuttons anwählbar - kann man dieses irgendwie abschalten?
Hier ein Code zum Kontextmenue, den ich mal aus dem Netzt gefischt habe:
Code: Alles auswählen
Option Explicit
Global oDocView As Object
Global oContextMenuInterceptor As Object
Global oStore As Object
Global oPropSetRegistry As Object
Const MNU_PREFIX = "pmxMenu_"
'_______________________________________________________________________________
Sub registerContextMenuInterceptor
InitMenuFactory
oDocView = ThisComponent.CurrentController
oContextMenuInterceptor = _
CreateUnoListener("ThisDocument_", "com.sun.star.ui.XContextMenuInterceptor")
oDocView.registerContextMenuInterceptor(oContextMenuInterceptor)
End Sub
'_______________________________________________________________________________
Sub releaseContextMenuInterceptor
On Error Resume Next
oDocView.releaseContextMenuInterceptor(oContextMenuInterceptor)
TerminateMenuFactory
End Sub
'_______________________________________________________________________________
Function ThisDocument_notifyContextMenuExecute(ContextMenuExecuteEvent As Object) As Variant
Dim oSrcWin As Object
Dim oExePoint As Object
Dim oATContainer As Object
Dim oSelection As Object
Dim oMenuItem As Object
Dim I As Integer
With ContextMenuExecuteEvent
'contains the window where the context
'menu has been requested
oSrcWin = .SourceWindow
'contains the position the context menu
'will be executed at (css.awt.Point)
oExePoint = .ExecutePosition
'enables the access to the menu content.
'The implementing object has to support the
'service ActionTriggerContainer
oATContainer = .ActionTriggerContainer
'provides the current selection
'inside the source window
oSelection = .Selection
End With
'remove all menu entries:
'For I = oATContainer.Count - 1 To 0 Step -1
'oATContainer.removeByIndex(I)
'Next I
'add some context menu entry
'oMenuItem = GetSimpleMenuItem("Entry1", "Inhalte unformatiert einfügen", "")
'oATContainer.insertByIndex(0, oMenuItem)
'oMenuItem = GetMenuSeparator("Entry2")
'oATContainer.insertByIndex(1, oMenuItem)
oMenuItem = GetSimpleMenuItem("Entry1", "Inhalte unformatiert einfügen", "macro:///Standard.Module1.Hallo")
oATContainer.insertByIndex(9, oMenuItem)
' POSSIBLE RESULTS FOR THIS FUNCTION
' This function must result one of the following values:
' com.sun.star.ui.ContextMenuInterceptorAction.IGNORED
' the XContextMenuInterceptor has ignored the call.
' The next registered XContextMenuInterceptor should be notified.
' com.sun.star.ui.ContextMenuInterceptorAction.CANCELLED
' the context menu must not be executed.
' The next registered XContextMenuInterceptor should not be notified.
' com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED
' the menu has been modified and should be executed
' without notifying the next registered XContextMenuInterceptor.
' com.sun.star.ui.ContextMenuInterceptorAction.CONTINUE_MODIFIED
' the menu has been modified and the next registered
' XContextMenuInterceptor should be notified.
ThisDocument_notifyContextMenuExecute = _
com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED
End Function
'_______________________________________________________________________________
' MENU FACTORY ROUTINES
'_______________________________________________________________________________
Sub InitMenuFactory()
oStore = CreateUnoService("com.sun.star.ucb.Store")
oPropSetRegistry = oStore.createPropertySetRegistry("")
End Sub
'_______________________________________________________________________________
Sub TerminateMenuFactory()
Dim mNames()
Dim sName As String
Dim I As Integer
mNames() = oPropSetRegistry.getElementNames
For I = LBound(mNames()) To UBound(mNames())
sName = mNames(I)
If Left(sName, Len(MNU_PREFIX)) = MNU_PREFIX Then
oPropSetRegistry.removePropertySet ( sName )
End If
Next I
oPropSetRegistry.dispose
oStore.dispose
End Sub
'_______________________________________________________________________________
' Sorry: menu icon and sub-menues not supported
Function GetSimpleMenuItem( sName As String, sText As String, _
sCommandUrl As String, Optional sHelpUrl As String ) As Object
Dim oPropSet As Object
Dim sInternalName As String
sInternalName = MNU_PREFIX & sName
If oPropSetRegistry.hasByName(sInternalName) Then
oPropSetRegistry.removePropertySet(sInternalName)
End If
oPropSet = oPropSetRegistry.openPropertySet(sInternalName, True)
oPropSet.addProperty("Text", 0, sText)
oPropSet.addProperty("CommandURL", 0, sCommandUrl)
If Not IsMissing(sHelpUrl) Then
oPropSet.addProperty("HelpURL", 0, sHelpUrl)
End If
GetSimpleMenuItem = oPropSet
End Function
'_______________________________________________________________________________
Function GetMenuSeparator( sName As String ) As Object
Dim oPropSet As Object
Dim sInternalName As String
Dim iSeparatorType As Integer
sInternalName = MNU_PREFIX & sName
If oPropSetRegistry.hasByName(sInternalName) Then
oPropSetRegistry.removePropertySet(sInternalName)
End If
oPropSet = oPropSetRegistry.openPropertySet(sInternalName, True)
'constant group com.sun.star.ui.ActionTriggerSeparatorType not supported?
'unfortunately, the only separator-type working is the "SPACE"
'regardless for the iSeparatorType passed...
iSeparatorType = 1
oPropSet.addProperty("SeparatorType", 0, iSeparatorType)
GetMenuSeparator = oPropSet
End Function
Durchbeissen muss Du Dich da schon alleine.
Viel Erfolg.
Jürgen
Re: (Writer) Text-Cursor verstecken
Verfasst: Fr, 30.07.2010 19:17
von marcel_at_work
Hallo, lieber Jürgen,
... jepp, wie wahr. Vielmals Sorry!!!
Ich dachte, es hätte schon in den Posts vorher irgendwo gestanden!?

Ich werd´ab nun ein wenig genauer auf das schauen, was ich schreibe (bzw. schrieb).
Die Lösungen im (meinem) Thread zur Dialog-Titelleiste gehen LEIDER genau in die entgegengesetzte Richtung, die ich eigentlich einschlagen wollte... vielleicht werd´ich langsam deppert, aber mich stört es erheblich, das die Titelleiste von OOo-Dialogen höher ist, als von einem Programm (wahrscheinlich nur unter Windows) in maximierter Ansicht. Zudem kann man auch die Option der Dialog-Verschiebung per Maus nicht abschalten (sprich: man kann einen Dialog nicht am Bildschirm feststellen). Und genau darum hatte ich auch vor einem Monat schon mal die Idee gehabt, die Dialog-Titelleiste ganz auszublenden (bzw. durch eine Positionierung aus dem Bild zu "schieben"), womit ich ja aber klaglich scheiterte.
Und weil ich nun zu diesem Punkt eben immer noch nicht weitergekommen bin, nun der Versuch, meine Anwendungen über Formulare zu realisieren, da dort die Titelleiste schon in gewünschter Form vorhanden wäre - wobei ich aber nun das Problem habe, das man ein Kontextmenü aufrufen kann und der Mauszeiger als der einer Textdatei dargestellt wird (der er ja nun unter Verwendung eines Writer-Dokumentes auch mal ist

).
Vielen lieben Dank für deinen Code, aber ich habe nun auch LEIDER nach fast fünf Stunden nichts erreicht, von dem ich sagen könnte, ich hätte annähernd irgendwas verstehen können.
Ich glaub, ich gebe es auf...
Du schreibst doch bestimmt auch Anwendungen, bei denen du eine "dezente" Programm-Oberfläche bevorzugst, auf der der Endbenutzer auch ausschließlich NUR das angezeigt bekommt, was er braucht. Wie realisierst du denn dies??? Mit Dialogen?
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: Sa, 31.07.2010 17:37
von turtle47
Hallo Marcel,
marcel_at_work hat geschrieben:Ich glaub, ich gebe es auf...
Ich fast nie.
Beigefügt mal eine Beispieldatei wo das Kontextmenue deaktiviert ist.
Nur bei dem Textfeld würde das Kontextmenue noch funktionieren, wenn es da diese blöde MsgBox nicht gäbe.
Wenn der User die ein paar mal gesehen hat dann lässt er schnell die Finger davon.
marcel_at_work hat geschrieben:Du schreibst doch bestimmt auch Anwendungen, bei denen du eine "dezente" Programm-Oberfläche bevorzugst, auf der der Endbenutzer auch ausschließlich NUR das angezeigt bekommt, was er braucht.
Nö, eigentlich nicht. Ich arbeite gerne mit Dialogen, sogar mehrseitige wenn es sein muss.
Schönes WE.
Jürgen
Re: (Writer) Text-Cursor verstecken
Verfasst: Sa, 31.07.2010 19:36
von marcel_at_work
Hallöchen, Jürgen,
HEUTE darfst DU mal mein Held sein - ich hoffe, DPunch ist jetzt ned eifersüchtig.
ES GEHT!!!
Ich hätte wohl ned aufgeben sollen...
... denn die Funktion:
Code: Alles auswählen
ThisDocument_notifyContextMenuExecute(ContextMenuExecuteEvent As Object)
... hatte ich schon auf vielerlei Art getestet - ich hatte aber die Subroutine/Schleife:
Code: Alles auswählen
'remove all menu entries:
For I = oATContainer.Count - 1 To 0 Step -1
oATContainer.removeByIndex(I)
Next I
... ausdokumentiert gelassen. Naja... das nächste Mal!
Das mit der MsgBox hab ich rausgenommen, da das Kontextmenü "Einfügen" scheinbar einzig bei Eingabefeldern angezeigt wird und ja eigentlich eine äußerst nützliche Funktion darstellt. Die Optionen "Grafiken- und Plugins deaktivieren" waren aber absolut fehl am Platz, weil der Benutzer somit die komplette Anzeige sowie auch teile der Anwendung hätte editieren können.
Also HERZLICHSTEN DANK und ein WUNDERSCHÖNES WEEKEND auch DIR!
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 01.08.2010 09:56
von marcel_at_work
Hey Jürgen,
ein kleines Problem hab ich da doch noch gefunden:
Mit folgender Funktion verstecke ich das Menü und sämtliche Programmkomponenten...
Code: Alles auswählen
Function setOOoViewSettings(bView as Boolean)
'... wird durch die Funktion "programStart" aufgerufen
'Verstecken aller OpenOffice-Menüs und sichtbarer Komponenten:
With Stardesktop.getCurrentComponent().CurrentController
.Frame.LayoutManager.setVisible(bView)
.ViewSettings.ZoomValue = 100
.ViewSettings.ShowGraphics = True
.ViewSettings.ShowIndexMarkBackground = bView
.ViewSettings.ShowRulers = bView
.ViewSettings.ShowFieldCommands = bView
.ViewSettings.ShowSpaces = bView
.ViewSettings.ShowDrawings = bView
.ViewSettings.ShowFootnoteBackground = bView
.ViewSettings.ShowAnnotations = bView
.ViewSettings.ShowTextBoundaries = bView
.ViewSettings.ShowVertScrollBar = bView
.ViewSettings.ShowHiddenParagraphs = bView
.ViewSettings.ShowTextFieldBackground = bView
.ViewSettings.ShowVertRuler = bView
.ViewSettings.ShowProtectedSpaces = bView
.ViewSettings.ShowSoftHyphens = bView
.ViewSettings.ShowHoriRuler = bView
End With
End Function
call setOOoViewSettings(False)
Dies klappt soweit auch bestens. Nur, wenn man nun irgendeinen Button auf dem Formular anclickt, wird noch vor Ausführung der dort zugewiesenen Funktion, das Programmmenü wieder eingeblendet (und bleibt dann auch sichtbar

). Ein OOo-Fehler?
Die einzige Möglichkeit, die ich bis jetzt fand, ist, die oben aufgeführten Eigenschaften komplett zurückzusetzen und erneut zu durchlaufen...
Code: Alles auswählen
call setOOoViewSettings(False)
call setOOoViewSettings(True)
... nur das dies dann eben bei jedem Click in der Anwendung auch zu sehen ist - auf...
Code: Alles auswählen
Stardesktop.getCurrentComponent().CurrentController.Frame.LayoutManager.setVisible(False)
... reagiert das Programm NICHT mehr.
Hättest du vl. einen letzten kleinen Rat für mich?
Lg, Marci
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 01.08.2010 19:55
von turtle47
Hallo Marcel,
versuche es mal so:
Code: Alles auswählen
Sub Hide_Menubar
dim lmgr as object
lmgr = ThisComponent.CurrentController.Frame.LayoutManager
lmgr.hideElement("private:resource/menubar/menubar") 'Menüleiste
End Sub
Viel Erfolg
Jürgen
Re: (Writer) Text-Cursor verstecken
Verfasst: So, 01.08.2010 21:20
von marcel_at_work
Hallo Jürgen,
... es geht!!!
Ich leg die Datei aber vorab ins Archiv, da ich mein Projekt nun unter C++ realisieren werde. Die eingeschränkten Möglichkeiten von OOo sind einfach zuuuuuuuuuuuuuu extrem geworden - oder besser gesagt: mein derzeitiges Projekt ist in meinen Überlegungen schon viel zu umfangreich, als dass ich es unter Verwendung von StarBasic jemals beenden könnte...
Aber trotzdem HERZLICHSTEN DANK!
GlG, Marci