[SOLVED] Wstawianie tekstu do istniejącego kształtu
[SOLVED] Wstawianie tekstu do istniejącego kształtu
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
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
- Załączniki
-
- pole_tekstowe.odt
- (12.15 KiB) Pobrany 230 razy
Ostatnio zmieniony śr kwie 01, 2020 11:37 am przez krolik, łącznie zmieniany 1 raz.
OpenOffice 4.1.7, Windows 10
Re: Wstawianie tekstu do istniejącego 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ę.krolik pisze:Czy jest możliwość aby zadany tekst był wpisywany do znajdującego się już w dokumencie kształtu?
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()
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
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Wstawianie tekstu do istniejącego kształtu
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.
I uzyskać żądaną czcionkę, rozmiar i jej wyrównanie.
OpenOffice 4.1.7, Windows 10
Re: Wstawianie tekstu do istniejącego kształtu
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
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Wstawianie tekstu do istniejącego kształtu
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:
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?
Kod: Zaznacz cały
oObj1.setPropertyValue("TextVerticalAdjust", CENTER)
OpenOffice 4.1.7, Windows 10
Re: Wstawianie tekstu do istniejącego kształtu
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:
Edit :
usunięto niepotrzebne linie kodu.
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())
usunięto niepotrzebne linie kodu.
LibreOffice 5.1.2.2 Ubuntu 16 LTS