Textbreite in Write Pro

Hallo Community

Ich entwickle zwar bereits einige Jahre u.a. mit 4D, nahm aber bisher nicht aktiv an den Forumsdiskussionen teil. Hier also mein “coming out” und eine erste Frage an die Write Pro-Kenner:

Wie bekomme ich die Breite eines Textabschnitts (paragraph) an einer bestimmten Stelle in einem Write Pro-Objekt? Bisher versucht: wp create Paragraph und wp get attributes(WPArea;wk margin left) resp. wp get attributes(WPArea;wk margin right). Da bekomme ich für rechts 0 und für links eine unsinnige negative Zahl.

Hintergrund: Ich möchte eine Tabelle mit columns mit unterschiedlichen Breiten einsetzen, die Tabelle sollte aber nicht über den Textrand hinausragen.

Kennt jemand eine Lösung dazu?

Warum nicht mit
<code 4D>
WP GET ATTRIBUTES($range_o;wk width;$breite_r)

</code 4D>

<code 4D>
C_REAL($breite_r)
$range_o:=WP Get range($wp_o;1;15)
$range2_o:=WP Get paragraphs($range_o)
WP GET ATTRIBUTES($range_o;wk width;$breite_r)

</code 4D>

Hallo Herr Weber

Danke für den Hinweis! Funktioniert bei mir leider nicht, liefert immer 0.

Folgender Code:

			$voParagraph:=WP Create paragraph range(voWPArea)
			WP GET ATTRIBUTES($voParagraph;wk width;$vlWidth)

Was mach’ ich falsch?

Übrigens: 4Dv16R6

$vlWidth durch $vrWidth ersetzen?

Hallo Herr Buchwitz

Danke für den Hinweis!

Auch dieser Code liefert in $vrWidth (real) 0:

C_REAL($vrWidth)
$voParagraph:=WP Create paragraph range(voWPArea)
WP GET ATTRIBUTES($voParagraph;wk width;$vrWidth)

Product :4D - 4D Server
OS : Mac OS X

Ich vermute, voWPArea ist das gesamte Dokument?

WP Create paragraph range kann nur auf eine Range angewendet werden, nicht auf das gesamte Dokument. Also erst mit WP Get range eine Range bilden und darauf dann WP GET ATTRIBUTES ansetzen.

Also bei mir geht das mit wk width nicht, unabhängig von Ranges…

c_text($vtWidth)
Immerhin erhalte ich mit WP get Attributes($voRange;wk with;$vtWidth) einen Wert “auto”. Aber das nützt mir nichts, da ich einen absoluten Wert benötige, gleich in welcher Masseinheit. Setzen von wk layout unit half nichts.

Wie bestimmen andere die absolute Breite eines Fliesstextes in WP unter 4D16R6?

: Peter STUDER

Also bei mir geht das mit wk width nicht, unabhängig von Ranges…

c_text($vtWidth)
Immerhin erhalte ich mit WP get Attributes($voRange;wk with;$vtWidth)
einen Wert “auto”. Aber das nützt mir nichts, da ich einen absoluten
Wert benötige, gleich in welcher Masseinheit. Setzen von wk layout
unit half nichts.

Wie bestimmen andere die absolute Breite eines Fliesstextes in WP
unter 4D16R6?

In der WritePro Logik ist das klar: Der Absatz hat die Breite automatisch, er nimmt sich so viel Platz, wie da ist. Das sieht man beispielsweise wenn man auf den Seitenmodus “eingebunden” umschaltet oder das Dokument als HTML exportiert.

D.h. man muss an einer anderen Stelle suchen: eigentlich wollen Sie die Größe des Rahmens wissen, der bei eingeschalteter Anzeige “Papiergröße” im Darstellungsmodus “Seite” angezeigt wird - und da bin ich mit meinem Latein am Ende. Ich fürchte, das kann man noch nicht abfragen.

Herr Peschke?

Nebenbei: die Absatzbreite muss zusätzlich geprüft werden. Falls sie explizit gesetzt ist, läuft sie gegebenenfalls auch über den o.a. Rahmen hinaus. Ich habe schon länger den Wunsch geäußert, nicht nur die minimale Breite, sondern auch die maximale Breise setzen zu können: http://forums.4d.com/Post/DE/18939862/1/18939863, offenbar braucht das aber außer mir niemand…

Ein Absatz hat immer die maximale Breite des Dokuments, wenn nicht anders eingestellt.

WP GET ATTRIBUTES(…;wk border width left;…;wl border width right;…) bringen immer den Standardwert von 2pt. Das ist der Rand bis zum Ende. Wenn man die Bemaßung nun kennt, könnte man das also ausrechnen.

WP GET ATTRIBUTES(…;wk width;…) bringt als Standard immer “auto”, wie der Kollege in der vorigen Antwort bereits beschrieben hat.

Haben Sie nun eine bestimmte “Dokumentenstruktur”, haben Sie doch sicher schon Maße gesetzt, z.B. 5cm oder was auch immer. Dann liefert Ihnen WP GET ATTRIBUTES(…;wk width;…) auch diesen Wert zurück.

Wie dem nun auch sei, Sie kennen die Seitenbreite, Ihre Ränder und können so ermitteln, wieviel Platz die gesamte Tabelle übrig hat. Und das dann auch pro Spalte. Bei Bedarf vielleicht noch mit OBJECT GET BEST SIZE arbeiten. Dann die Spaltenbreite pro Spalte entsprechend setzen.

Ich hoffe, ich habe das Problem richtig erkannt und der Ansatz hilft Ihnen weiter. Wenn nicht, wir haben noch viel auf unserer Liste, was wir für 4DWP implementieren wollen/sollen.