Hallo,
hat geschrieben:Wer kann mir helfen, dass sich das Autotext-Fenster nicht sofort schließt.
Weil mir nicht bekannt ist, ob Dir die Unterschiede eines Dialogfensters bekannt sind , hier eine kleine Info:
- Modale Dialoge sperren den Rest der Anwendung (oder sogar der Benutzeroberfläche), solange der Dialog angezeigt wird.
- Nicht modale Dialoge erlauben auch Eingaben in der Applikation außerhalb des Dialogs.
Demnach gehört das Autotext-Fenster/ der Autotext-Dialog zum Punkt a)
Dieser ist von den Machern (AOO und LibreOffice) modal programmiert worden. Damit ist zwar das Arbeiten mit dem Dialog möglich, aber er kann nicht über dem Dokument „schweben“.
Dieses wäre nur mit einem nicht modalen Dialog möglich.
Es ist auch in den Einstellungen nirgends möglich das Verhalten zu ändern.
Aus diesem Grunde gibt es nur zwei Möglichkeiten:
- Man belässt alles so wie es ist, zumal man den Autotext-Dialog mittels [STRG][F3] direkt aufrufen kann.
Oder man nutzt das Symbol „Autotext“ aus der Symbolleiste „Einfügen“
- Hierbei wäre eine sehr aufwendige Programmierung von Nöten.
Man zeichnet sich in der Basic-IDE einen benutzerdefinierten, nicht modalen Dialog. In einer Listbox auf dem Dialog ließen sich dann während des Arbeitens die verschiedenen Autotext-Einträge auswählen und einfügen, wobei der Dialog immer über dem Dokument „schwebt“ bis das Makro beendet wird, bzw. der Dialog geschlossen wird.
- Abhängig von der Anzahl Deiner Autotext-Einträge, könnte man die Variante 2) umgehen.
hat geschrieben:Ich hatte schon die IDee, ein kleines Marko zu schreiben, welches STRG-F3 simuliert, und dies meinen Textbausteinen zuzuweisen.
Hierfür musst dass Autotext-Fenster nicht öffnen, Du musst nur wissen in welcher Gruppe die Texte gespeichert sind und wie das Kürzel zum jeweiligen Text lautet.
Siehe Beispiel-Code:
Code: Alles auswählen
Sub AT_Dispatch
rem ----------------------------------------------------------------------
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")
dim args9(1) as new com.sun.star.beans.PropertyValue
args9(0).Name = "Group"
args9(0).Value = "standard*0" ' Gruppe "Standard"
args9(1).Name = "ShortName"
args9(1).Value = "BS" ' Das Kürzel → "Bestellung"
' Einfügen des Autotextes an Cursorposition
dispatcher.executeDispatch(document, ".uno:InsertGlossary", "", 0, args9())
End Sub
Wenn Du nun mehrere Dispatch-Commands dieser Art schreibst und passt die Value-Argumente entsprechend an, dann könntest Du Dir z.B. eine Symbolleiste anlegen, welche all Deine Autotexte an der Cursorposition per Klick einfügt.
Ist zwar nicht schön, aber zweckmäßig, wenn es nicht zu viele Einträge gibt.
Sonst wäre Variante 1) die richtige Wahl.
Dazu folgender,
anfänglicher Code:
Code: Alles auswählen
Sub myAutoText
REM Array's deklarieren
Dim mShort ' Array für die Kürzel
Dim mTitle ' Array für die Titel
REM INFO:
REM https://help.libreoffice.org/7.2/de/text/sbasic/shared/01020100.html?DbPAR=BASIC#bm_id3149346
Dim sName$, sGroup$, sText$ 'Stringvariablen
' sName = "Bestellung"
' Gruppenname
sGroup = "standard*0"
' Zugriff auf den AutoTextContainer bereitstellen
oSVAutoTextContainer = CreateUnoService("com.sun.star.text.AutoTextContainer")
' Objektvariable für die angegebene Gruppe
oObj1 = oSVAutoTextContainer.getByName( sGroup )
' xray oObj1
' alle Titel der Gruppe "standard*0" in Array schreiben
mTitle=oObj1.Titles
' alle Kürzel der Gruppe in Array schreiben
mShort=oObj1.ElementNames
' Anzahl der Arrayfelder ermitteln
x=uBound(mTitle)
' Schleife über alle Arrayfelder, um die einzelnen
' Kürzel und Title in die Stringvariable zu schreiben
for i = 0 to uBound(mTitle)
' chr(9) = Tabulator (TAB)
' chr(10) = Line Feed (LF)/ Zeilenumbruch
' chr(13) = Carriage Return (CR)/ Wagenrücklauf
sText=sText & mShort(i) & " → " & chr(9) & chr(9) & mTitle(i) & chr(10)
next i
' Ausgabe aller Kürzel und Titel
msgbox sText
End Sub
Der Code sammelt alle Einträge und Kürzel aus der Gruppe „Standard“ und listet diese am Ende des Makro in einer Messagebox auf.