BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

WRITER Fehler bei Positionierung eines Textrahmens

Alles zur Programmierung im LibreOffice.
Antworten
craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

WRITER Fehler bei Positionierung eines Textrahmens

Beitrag von craig » Do 22. Sep 2016, 17:40

Hallo,
ich habe ein Problem bei der Positionierung eines per Makro eingefügten Textrahmen.
Ziel ist es einen Textrahmen an die Position der aktuellen Absatzmarke, bzw. Cursorposition zusetzen,
wobei die Verankerung an der aktuellen Seite des Dokuments erfolgen soll.
Ja, am einfachsten wäre es nicht an der Seite zu verankern, sondern am Paragraph, aber siehe hier:
http://www.libreoffice-forum.de/viewtop ... =5&t=16683
Nun dachte ich mir, ich lese per Code die Cursorposition aus und übergebe die XY-Koordinaten an den Textrahmen,
welcher an der Seite verankert ist, dabei erhalte ich eine Fehlermeldung.
Damit es ein wenig übersichtlicher wird, habe ich den Code ein wenig gekürzt.
Siehe Kommentare im Code:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub FrameEinfuegen
Dim oDoc as Object
Dim oText as Object
Dim oFrame as Object
Dim oCursor as Object
Dim oCurPos as New com.sun.star.awt.Point
Dim oFCursor as Object
Dim strName as String


REM Hier den Text des Texfeldes innerhalb des Rahmens festlegen
strName="Mein Rahmen - erstellt am: " & NOW
	oDoc=thisComponent
		oText = oDoc.Text

REM ____ Cursor erzeugen _________________________________________________
REM Den ViewCursor erzeugen, damit der Rahmen an der gerade
REM aktuellen Absatzmarke eingefügt werden kann.
REM Wenn die Verankerung auf "TextContentAnchorType.AT_PAGE", also
REM Verankerung an der Seite eingestellt wurde, dann wird der Rahmen immer
REM in der ersten Zeile der aktuellen Seite angezeigt.
			oCursor= oDoc.GetCurrentController.ViewCursor

REM ____ ermitteln der aktuellen Cursorposition im Dokument _______________
			oCurPos=oCursor.getPosition()

'mri oCursor

REM ____ Den neuen Textrahmen als Objekt erstellen. ______________________
	oFrame = oDoc.createInstance("com.sun.star.text.TextFrame")


			
REM ═════════════  Eigenschaften des Rahmens ═══════════════════════════


	With oFrame

REM ____ Breite und Höhe des Rahmen festlegen ___________________________
		.width = 8000
		.height = 5000

REM ____ Umlauf (TextWrap) ________________________________________________ 
			.TextWrap = com.sun.star.text.WrapTextMode.THROUGHT
			.Surround=com.sun.star.text.WrapTextMode.THROUGHT
			
REM ____ Verankerung ____________________________________________________
REM
REM Die Verankerungsangaben müssen ausgeschaltet bleiben, wenn
REM der Rahmen an der Cursorposition eingefügt werden soll!
REM Wenn AT_PAGE verwendet wird, dann wird der Rahmen nicht am
REM Cursor, sondern auf der aktuellen Seite eingefügt!
REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM mögliche Konstanten:
REM AT_PARAGRAPH	The anchor of the object is set at the top left position of the paragraph.  
REM AS_CHARACTER	The object is anchored instead of a character.  
REM AT_PAGE			The object is anchored to the page.  
REM AT_FRAME		The object is anchored to a text frame.  
REM AT_CHARACTER	The object is anchored to a character.  
		.AnchorType=com.sun.star.text.TextContentAnchorType.AT_PAGE

REM ____ Position des Rahmen festlegen in 100/mm ________________________

REM Die Positionangaben müssen ausgeschaltet bleiben, wenn
REM der Rahmen an der Cursorposition eingefügt werden soll.
REM Die Angaben sind absolut und bezihen sich immer auf die Position
REM im Dokument und nicht auf die aktuelle Seite!
'		.HoriOrientPosition =2000
'		.VertOrientPosition = 2000

REM ____ Name des Rahmen festlegen _____________________________________
REM zwecks eindeutiger Identifikation habe ich hier NOW hinzugefügt
REM diese liefert das aktuelle Datum mit der aktuellen Zeit
REM DATE oder TIME wäre auch möglich aber nicht eindeutig!
REM Der Inhalt der Variable "strName" wird weiter oben im Code festgelegt.
		.setname(strName)
		

	End With
REM ═══════════ Ende der WITH-ANWEISUNG ═══════════════════════════════════════════════


REM ____ Rahmen in das Dokument einfügen _________________________________________
REM Wenn bei bei Codeausführung diese Zeile als Fehler markiert wird,
REM befindet sich der ViewCursor NICHT im Dokument, sondern im Textrahmen.
REM Hier kann kein weiterer Rahmen eingefügt werden, deshalb die Fehlermeldung.
		oText.insertTextContent(oCursor, oFrame, TRUE)

REM ____ Zeichenformatierung des Textfeldes _______________________________________

		' Wäre auch mittels Styles möglich!
		' Identifikation des Rahmen über dessen zuvor festgelegten Namen (strName)
		oFrame = oDoc.TextFrames.getByName(strName)
		
		' Cursor erzeugen, um auf das Textfeld zu greifen zu können.
		oFCursor = oFrame.createTextCursor

	' WITH-Anweisung zwecks Foramtierung
	With oFCursor	
		.charWeight = com.sun.star.awt.FontWeight.BOLD
		.CharHeight=20
		.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
		.CharColor=RGB(255,0,0)
		.String = Now
	End With

' mri oframe
		
REM Hier kommt die Fehlermeldung, dass die Positionsangaben nicht gesetzt werden können!		
		oFrame.Position=oCurPos

' mri oFCursor

End Sub
Die Fehlermeldung besagt, dass ich die falsche Methode anwende, was lautet denn die richtige Methode?

Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

F3K Total
Beiträge: 2412
Registriert: So 10. Apr 2011, 10:10

Re: WRITER Fehler bei Positionierung eines Textrahmens

Beitrag von F3K Total » Do 22. Sep 2016, 19:45

Hi,
so geht es:
  • Code: Alles auswählen

    REM ____ Breite und Höhe des Rahmen festlegen ___________________________
          .width = 8000
          .height = 5000
          .HoriOrient = HoriOrient_NONE
          .VertOrient = VertOrient_NONE
  • Code: Alles auswählen

    REM Hier kommt die Fehlermeldung, dass die Positionsangaben nicht gesetzt werden können!
          oFrame.HoriOrientPosition = oCurPos.X
          oFrame.VertOrientPosition = oCurPos.Y
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: WRITER Fehler bei Positionierung eines Textrahmens

Beitrag von craig » Do 22. Sep 2016, 23:05

Hallo R,
vielen Dank für Deine Lösung.

Auf der ersten Seite des Dokuments funktioniert alles gut.
Allerdings nicht auf den Folgeseiten.
Die Positionsangaben werden erkannt, der Rahmen wird aber grundsätzlich im Bereich der Fußzeile eingefügt.

Er ist dort so „verankert“, dass ich ihn nicht mit der Maus herausziehen kann, sondern nur wenn ich mehrfach
die Pfeil-nach-oben-Taste betätige, dann kann der Rahmen mit der Maus auf der gesamten Seite bewegt werden.
Auch Kopieren und Einfügen funktioniert nicht, der Rahmen wird hierbei immer wieder in den Bereich der
Fußzeile eingefügt, unabhängig von der Cursorposition.

Dieses passiert nur wenn der Anker auf Seite eingestellt ist. Auf Absatzmarke eingestellt funktioniert die Positionierung.

Kennst Du hierfür eine Lösung?

Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten