Date: prev next · Thread: first prev next last
2023 Archives by date, by thread · List index


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" <gerhard.weydt@t-online.de>
An users@de.libreoffice.org
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: users+unsubscribe@de.libreoffice.org
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: users+unsubscribe@de.libreoffice.org
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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.