[SOLVED] Wstawianie tekstu do istniejącego kształtu

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Awatar użytkownika
krolik
Posty: 10
Rejestracja: śr lis 20, 2019 6:21 pm

[SOLVED] Wstawianie tekstu do istniejącego kształtu

Post 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
Załączniki
pole_tekstowe.odt
(12.15 KiB) Pobrany 206 razy
Ostatnio zmieniony śr kwie 01, 2020 11:37 am przez krolik, łącznie zmieniany 1 raz.
OpenOffice 4.1.7, Windows 10
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Wstawianie tekstu do istniejącego kształtu

Post 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.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Awatar użytkownika
krolik
Posty: 10
Rejestracja: śr lis 20, 2019 6:21 pm

Re: Wstawianie tekstu do istniejącego kształtu

Post 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.
OpenOffice 4.1.7, Windows 10
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Wstawianie tekstu do istniejącego kształtu

Post 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
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Awatar użytkownika
krolik
Posty: 10
Rejestracja: śr lis 20, 2019 6:21 pm

Re: Wstawianie tekstu do istniejącego kształtu

Post 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?
OpenOffice 4.1.7, Windows 10
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Wstawianie tekstu do istniejącego kształtu

Post 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.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
ODPOWIEDZ