Hallo Gerhard,
ganz herzlichen Dank für Deine Mühe Dein Makro zu überarbeiten. Jetzt
funktioniert alles prima im Kontext von WRITER:
[1] Im normalen Text das Einfüge-Zeichen einfügen oder mehrere markierte
Zeichen durch das Einfüge-Zeichen ersetzen.
[2] In einer Tabelle wie [1].
[3] In einer Form (= Shape = Textfeld oder geometrische Form) wird das
Einfüge-Zeichen immer am Ende der vorhandenen Zeichenkette eingefügt.
Ich persönlich benötige das für andere LO-Komponenten nicht, da kann man
das auch ganz gut - so viel schreibt man da ja nicht - mit
[Einfügen][Sonderzeichen...][Bevorzugte Zeichen:] machen und sich das
Menü [Sonderzeichen...] auf eine Taste legen: [Bereich] "Einfügen" +
[Funktion] "Symbol" + [Tasten] (eine Taste aus) "Tastenkombinationen"
(auswählen).
Mal sehen, wenn ich mal Zeit habe, mache ich mal zu diesem Thema eine
kleine Anleitung.
Ich danke Dir,
Grüße
Hans-Werner ;-))
------ Originalnachricht ------
Von "Gerhard Weydt" <[email protected]>
An [email protected]
Datum 30.11.2023 15:09:18
Betreff Re: [de-users] LO 7.6.3.2 und ALT 16
Hallo Hans-Werner,
Deine Feststellungen sind korrekt.
Das Makro habe ich vor langer Zeit geschrieben, daher habe ich keine Erinnerung
mehr, was ich genau getestet habe. Ich habe es unter Verion 5.4 getestet, das
immerhin gut sechs Jahre alt ist, da ist das Verhalten genauso; dass sich etwas
in LibO diesbezüglich geändert hätte, ist also nicht
wahrscheinlich.Möglicherweise habe ich dann hauptsächlich so getestet, wie ich
das auch, soweit ich mich erinnere, dann immer eingesetzt habe, nämich beim
fortlaufenden Schreiben, wo der Cursor am Ende steht, und da funktioniert das
ja.
Was ich festgestellt habe, ist, dass die Selektion und auch der Viewcursor, so
wie sie dem Makro geliefert werden, im Fall von Tabellen und Shapes den ganzen
Text (der Zelle bzw. des Shapes liefern); damit ist das Überschreiben des auf
dem Schirm selektierten Texts also nicht möglich.
Für die Tabelle habe ich eine Lösung gefunden, nämlich den Dispatcher
einzusetzen. Davon wird ja eher abgeraten, weil nie klar ist, wei weit ds in
Zukunft noch funktioniert; aber wenn es nichts anderes gibt...
Ich habe das Einfügen eines Zeichens aufgezeichnet und den Code dann ins Makro
eingefügt, wobei nur das eigefügte Zeichen durch CHAR(chara) - wie sonst auch
im Code - ersetzt habe. Dasfunkioniert nun auch mit selektiertem text.
Bei den Shapes passiert bei der Aufzeichnung nichts, daher konnte ich auch
keine entsprechende Änderung vornehmen. Es bleibt also derzeit dabei, dass dort
das Zeichen am Ende eingefügt wird. Aber das dann auszuschneiden und weiter
vorne einzufügen ist im Gesamten vielleicht immer noch günstiger als andere
Variante. Und die vielleicht häufigste Einsatzmöglichkeit, nämlich am Ende des
Texts, funktioniert ja.
Zu deinen sonstigen Fragen:
* Shapes sind sowohl die Textfelder als auch geometrische Formen, wie
Rechteck, Kreis, Legenden, ...
* Ich habe das nur für Writer gedacht und andere Kompopnenten wohl gar
nicht versucht. Das könnte ich aber versuchen, wenn es dir wichtig
ist. Die kleinen Makros pro Zeichen, die ich Alt+Umschalt+ ein
mnemotechnischen Buchstaben aufrufe, habe ich auch nur für Writer
eingestellt.
Das neue Hauptmakro folgt unten.
Herzliche Grüße
Gerhard
sub insertSpecial (chara as integer)
dim vc as object, curSel as object, tc as object, cursel1 as object, null as
object
dim cellText as object
curSel = ThisComponent.CurrentSelection
if curSel.count > 1 then
msgbox "Bitte nur eine einfach Selektion",,"Einfügen Sonderzeichen"
exit sub
end if
if curSel.supportsService("com.sun.star.drawing.Shapes") then
curSel1 = curSel.getByindex(0)
if curSel1.supportsService("com.sun.star.drawing.TextShape") or _
curSel1.supportsService("com.sun.star.drawing.Text") then
tc = curSel1.createTextCursor
cursel1.insertString(tc,CHR(chara), FALSE)
ThisComponent.CurrentController.select(null)
ThisComponent.CurrentController.select(cursel1)
tc.goToEnd(False)
end if
elseif curSel.supportsService("com.sun.star.text.TextRanges") then
if isEmpty(curSel(0).TextTable) then 'keine Tabelle
vc = ThisComponent.CurrentController.getViewCursor
vc.setString(CHR(chara))
Vc.collapseToEnd
else ' Tabelle
' die vo dem "end if" stehenden Zeilen funktionieren nicht, weil der
ViewCursor
' nicht den selektierten String zeigt und den daher auch nicht
übetrschreibt
dim document as object
dim dispatcher as object
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = CHR(chara)
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
exit sub 'Rest veraltet
vc = ThisComponent.CurrentController.getViewCursor
cellText = curSel(0).cell.text
cellText.insertString(vc, CHR(chara), FALSE)
' mit letztem Parameter TRUE müsste der selektierte Text überschrieben
werden, aber s.oben!
end if
else
msgbox "Diese Situation (dieser Objekttyp) ist bisher nicht
programmiert.",,"Einfügen Sonderzeichen"
end if
end sub
Am 30.11.2023 um 08:12 schrieb OoOHWHOoO:
Guten Morgen Gerhard,
zu Deinem ( wunderbaren :-)) ) BasicMacro
https://listarchives.libreoffice.org/de/users/2023/msg01227.html und Deiner
Kurzbeschreibung "[...] aber das funktioniert auch in Texten in Tabellen oder in
Shapes.[...]" hätte ich da noch ein paar Fragen:
Ist das BasicMacro nur zur Verwendung mit WRITER gedacht ?
Bei Verwendung mit WRITER ist mir Folgendes aufgefallen:
[1] Normaler Text - Alles wie erwartet !
Das Zeichen wird eingefügt oder markierte Zeichen werden durch das Zeichen
ersetzt.
[2] Tabelle - ?
Das Zeichen wird eingefügt. Bei markierten Zeichen wird das Zeichen vor den
markierten Zeichen eingefügt, aber die markierten Zeichen werden nicht ersetzt.
[3] Shapes - ?
Was meinst Du mit Shapes ? Mir ist im Kontext WRITER nur das (einfügbare) "Textfeld"
eingefallen. Das Zeichen wird eingefügt. Bei markierten Zeichen werden die markierten Zeichen nicht
ersetzt und das Zeichen wird hinter dem (letzten vorhandenen) Zeichen im "Textfeld"
eingefügt.
Dank im Voraus für etwaige Erläuterungen,
Grüße
Hans-Werner ;-))
-- Liste abmelden mit E-Mail an: [email protected]
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
--
Liste abmelden mit E-Mail an: [email protected]
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy