Strona 1 z 1
[SOLVED] Wstawianie tekstu do istniejącego kształtu
: wt gru 10, 2019 8:17 pm
autor: krolik
Witam,
skonstruowałem makro wstawiające ramkę tekstową z podanym przeze mnie tekstem. Tzn. po kliknięciu przycisku umieszczonego w dokumencie tekstowym pojawia się okno dialogowe, z polem do wpisania treści i przyciskiem. Po wpisaniu treści i zatwierdzeniu w dokumencie pojawia się ramka tekstowa. Czy jest możliwość aby zadany tekst był wpisywany do znajdującego się już w dokumencie kształtu? Zależy mi również, aby w oknie dialogowym była możliwość wciśnięcia drugiego przycisku, który doklejał by już w dok. tekstowym jeden podkreślony wyraz przez tekstem podanym w polu okna dialogowego. W załączniku przesyłam to co udało mi się wykonać.
proszę o pomoc w rozwiązaniu mojego problemu
Re: Wstawianie tekstu do istniejącego kształtu
: śr gru 11, 2019 9:33 pm
autor: belstar
krolik pisze:Czy jest możliwość aby zadany tekst był wpisywany do znajdującego się już w dokumencie kształtu?
Jest, ale musisz być pewien do którego bo w pierwszym podejściu masz dostęp tylko do indeksów obiektów dopiero po wywołaniu tego możesz stwierdzić jego nazwę.
Kod: Zaznacz cały
oDoc = ThisComponent
oDrawP = oDoc.getDrawPage()
IleObj = oDrawP.getCount()
Print IleObj
oObj1 = oDrawP.getByIndex(1) ' tu operujesz indeksami
Nazwa = oObj1.Name' nazwa ramki
Print Nazwa
sString = oObj1.getString()
Print sString
sString = sString & " Dalszy tekst"
oObj1.String() = sString
Print oObj1.getString()
Co do drugiego problemu analiza poniższego kodu powinna naprowadzić cię na dobrą drogę. Kod działa też na kształtach czyli też ramkach.
Kod: Zaznacz cały
Sub oTextSelection
oDoc = ThisComponent
oSels = oDoc.getCurrentSelection()
If Not IsNull(oSels) Then
oSelCount = oSels.getCount() - 1
oSelsIdx = oSels.getByIndex(0)
sString = oSelsIdx.getString()
oDisp = "Zaznaczony tekst o indeksie " & oSelCount & " i zawartości " & sString
else
oDisp = "Brak zaznaczenia "
End If
msgbox(oDisp, 0, "Co Zaznzczono")
End Sub
Jeśli jednak napotkasz problem i utkniesz pisz.
Re: Wstawianie tekstu do istniejącego kształtu
: czw gru 12, 2019 11:10 am
autor: krolik
Odnośnie pierwszego skryptu, po drobnych zmianach otrzymałem to co chciałem, jednak nie bardzo wiem jak mogę sformatować tekst, który pojawia się w kształcie.
I uzyskać żądaną czcionkę, rozmiar i jej wyrównanie.
Re: Wstawianie tekstu do istniejącego kształtu
: pt gru 13, 2019 3:11 pm
autor: belstar
Może ten przykład ci pomoże.
Kod: Zaznacz cały
Sub oDShapeProp
Dim oPage 'Page on which to draw
Dim oShape 'Shape to insert
Dim oDoc
oDoc = ThisComponent
oPage = oDoc.getDrawPage()
oShape = oDoc.createInstance("com.sun.star.drawing.TextShape")
oPage.add(oShape)
oPositionShape( oShape, 1000, 1500, 3000, 1500 )
oShape.setString("OOoMacro1")
oShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
oObj1 = oShape.createTextCursor()
oObj1.gotoStart(FALSE)
oObj1.gotoEnd(TRUE)
oObj1.CharColor = RGB(255,51,255)
oObj1.setPropertyValue("CharHeight", 20)
oObj1.setPropertyValue("CharFontName", "Arial")
oObj1.setPropertyValue("CharWeight", BOLD)
End Sub
'
'
Sub oPositionShape( oShape as Object, X as Integer, Y as Integer, Width as Integer, Height as Integer )
oShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
Dim oPos as new com.sun.star.awt.Point
oPos.X = X
oPos.Y = Y
oShape.setPosition( oPos )
Erase oPos
Dim oSize as new com.sun.star.awt.Size
oSize.Width = Width
oSize.Height = Height
oShape.setSize( oSize )
Erase oSize
End Sub
Re: Wstawianie tekstu do istniejącego kształtu
: wt gru 17, 2019 6:22 pm
autor: krolik
Chciałbym jeszcze zapytać o wyrównanie tekstu. Prawidłowo działa ustalenie rozmiaru czcionki, koloru, pogrubienia natomiast mam problem z wyrównywaniem czcionki. Próbowałem w ten sposób:
Kod: Zaznacz cały
oObj1.setPropertyValue("TextVerticalAdjust", CENTER)
Niby nie wyrzuca żadnego błędu, ale też nie bardzo działa. Ustawiłem w kształcie w dokumencie tekstowym wyśrodkowanie i w ten sposób obchodzę swój problem - nowy tekst zastępuje stary i ok. Jednak kiedy kształt jest pusty i pojawia się nowy tekst w/w sposób nie działa. W jaki sposób można poprawić tę linijkę kodu?
Re: Wstawianie tekstu do istniejącego kształtu
: wt gru 17, 2019 8:58 pm
autor: belstar
czytałem na angielskim forum że może nie działać jak jest ustawiony inny styl jak domyślany, radą na to jest przywrócenie ich przed ustawieniem nowego
format->Wyczyść formatowanie bezpośrednie
w kodzie będzie to tak:
Kod: Zaznacz cały
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:ResetAttributes", "", 0, Array())
Edit :
usunięto niepotrzebne linie kodu.