Seite 1 von 2

Teil-Text in Zeile einpassen [gelöst]

Verfasst: Do, 19.08.2010 10:59
von clag
Hallo Coders....

einen hab ich noch
wie kann ich/man per Basic erkennen ob in einem Teil-Absatz vor einem manuellen Zeilenumbruch ein automatisch eingefügter existiert ?
mein Ziel ist ein Makro welches so lange einen Teilabsatz in 1% Schritten verschmälert bis er in eine Zeile passt


sub machpassend
loop:
if "Text bis manueller Umbruch hat autoUmbruch) then
Breite =99
thisComponent.currentselection().getbyindex(0).CharScaleWidth = Breite
Breite Breite-1
go to loop
end if
print " passt "
End Sub

oder so ähnlich
vielleicht hat ja auch jemand so etwas schon mal in fertig gesehen

bin wie immer für Tipps und Anregungen dankbar

und lade alle "Vorschläger" ein, kommt zu meiner Dankbaar :lol:

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 13:21
von Karolus
Hallo
Etwa so:

Code: Alles auswählen

Sub absatzstauchen
odoc = thisComponent

'↓der sichtbare Cursor kennt die Methoden: goto[Start|End]ofLine
oviewCursor = odoc.currentController.viewCursor()

'↓ein Textcursor kennt die Methoden: goto[Start|End]ofParagraph
oTcursor = odoc.text.createTextcursor()
oTcursor.gotorange( oviewcursor, false ) 'geht dahin wo der Viewcursor ist
oTcursor.gotoStartofParagraph( false )
oTcursor.gotoEndofParagraph( true )

oviewcursor.gotoStartofline( false )
oviewcursor.gotoendofline( true )
scale = 100
while  otcursor.string <> oviewcursor.string 
	oviewcursor.gotostartofline( false )
	scale = scale -1
	oTcursor.CharScaleWidth  = scale
	oviewcursor.gotoendofline( true )
wend

End Sub
Gruß Karo

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 13:54
von clag
Hallo Karolus,

da bin ich platt ja genau so meinte ich das :D

aber
ich trau mich gar nicht zu meckern
deswegen schreibe ich auch in einem ganz leisem grau
;)

leider hat das Makro noch eine kleinen Haken,
nämlich wenn in dem Absatz ein manueller Zeilenumbruch existiert (shift Enter)
dann erkennt es den leider nicht, sondern schiebt den ganzen Absatz zusammen
und verfängt sich dann in einer Schleife, so dass man ctrl+shift+Q braucht

wenn das Makro den manuellen Zeilenumbruch erkennen und als Wirkungsbereich-Ende akzeptieren würde

wäre es perfekt ! :D

trotzdem schon Daaaaanke

edit:
alternativ oder auch nur auf den zuvor markierten Text bearbeiten der logischerweise am Absatzanfang beginnt ?

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 14:10
von Karolus
Hallo

Zum Dank soll ich mir auch noch die Augen verderben 8) - ich hab leider dafür gerade keine Lösung parat, und auch keine Zeit danach zu suchen, ich muss mal ein paar Brötchen verdienen gehen.

Gruß Karo

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 18:15
von clag
Hallo Karolus oder auch andere Mitleser :)

ich habe eine ganze weile mit dem Code von dir herum experimentiert
und habe so glaube die Ursache für den Fehler mit der endlos Schleife erkannt

der eine String enhält den chr(10) der andere nicht

damit kommt es wenn das Zeichen vorhanden ist zu der Situation
das

Code: Alles auswählen

while  otcursor.string <> oviewcursor.string
immer zutrift !
und dann gibt's halt keine ende

nur habe ich leider noch überhaupt keinen Schimmer wie diese Textcusor reagieren und wie man das abstellen könnte
eine Möglichkeit wäre wohl direkt nach chr(10) abzufragen aber wie ?

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 20:18
von turtle47
Hi,
clag hat geschrieben:eine Möglichkeit wäre wohl direkt nach chr(10) abzufragen aber wie ?

Code: Alles auswählen

if Instr(otcursor.string,CHR(10)) then

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 21:42
von clag
Hallo Karo, Turtle

deine Zeile habe ich natürlich gleich ausprobiert, funktioniert auch und findet den chr(10)

jetzt müsste man entweder von gleich am Anfang verhindern das beim einlesen von "otcursor,string"
nicht über den chr(10) hinaus bis chr(13) eingelesen wird.
Oder wenn das nicht zu verhindern ist den "otcursor,string" vom Rest nach dem chr(10) befreien

also

Code: Alles auswählen

otcursor.string = RTrimStr(otcursor.string, CHR(10))
otcursor.string = RTrimStr(otcursor.string, CHR(10)&".*")
leider funktioniert das nicht

wie muss das richtig aussehen ?

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 21:57
von turtle47
clag hat geschrieben:jetzt müsste man entweder von gleich am Anfang verhindern das beim einlesen von "otcursor,string"
nicht über den chr(10) hinaus bis chr(13) eingelesen wird.
Oder wenn das nicht zu verhindern ist den "otcursor,string" vom Rest nach dem chr(10) befreien
Und was bringt Dir das dann?

Dann brauchst Du doch die Lauweite nicht mehr zu ändern wenn Du eine "reine" Zeile ohne Zeilenumbruch hast.

Also für mich bleiben da noch :?: :?:

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 22:35
von clag
Hi,

die reine Zeile ist doch noch keine Garantie das sie in die Zeile hineinpasst !

das chr(10) wir manchmal dort eingefügt wo der Text so lang ist das ein zusammen schieben keinen Sinn macht und ein Teil per manuellem
ZeilenUmbruch in die nächste Zeile geschickt wird

TesttextTesttextTesttext CHR(10) braucht nicht gestaucht werden

TesttextTesttextTesttextTesttextTesttext CHR(10) muss gestaucht werden um 10%, macht das Makro auch

TesttextTesttextTesttextTesttextTesttext CHR(10)
TesttextTesttextTesttextTesttext CHR(13) soll auch um 10% gestaucht werden aber nur bis CHR(10)

daran hängt sich das Makro aber auf und schrumpft alles bis zu chr(13)

weil der alles String enthält
"otcursor.string" TesttextTesttextTesttextTesttextTesttext CHR(10)TesttextTesttextTesttextTesttext CHR(13)enthält
wenn man den String auf
"otcursor.string" TesttextTesttextTesttextTesttextTesttext CHR(10)
reduzieren könnte, sollte das Makro einwandfrei funktionieren

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 22:43
von turtle47
Dann hole Dir den Teil bis zum CHR(10) mit:

Code: Alles auswählen

.....
oTcursor.gotoEndofParagraph( true )
i = instr(otcursor.string, CHR(10))
otcursor.string = Left(otcursor.string,i)
print otcursor.string
.....

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 23:04
von clag
Hi turtle47,

da geht etwas schief wenn ich deinen Code einsetze wird damit der Text von der Seite entfernt :shock:
soooo hatte ich das Problem nicht lösen wollen :lol:


kannst du deinen Vorschlag vielleicht noch einmal überdenken ?

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 23:15
von turtle47
clag hat geschrieben:jetzt müsste man entweder von gleich am Anfang verhindern das beim einlesen von "otcursor,string"
nicht über den chr(10) hinaus bis chr(13) eingelesen wird.
Und das macht der obere Code mit berichtigter Zeile:

Code: Alles auswählen

otcursor.string = Left(otcursor.string,i-1)
Aus:
Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. Wer würde ihm schon folgen, spät inCHR(10)der Nacht und dazu noch in dieser engen Gasse.

wird:
Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. Wer würde ihm schon folgen, spät in

Re: automatischen Umbruch im Text finden

Verfasst: Do, 19.08.2010 23:37
von clag
Hi Turtle47,

habe extra nochmal alles gespeichert auf und zu gemacht den Code neu eingefügt aber es bleibt dabei,
mit dem aufpoppen des Print-Fenster ist der Text rechts von CHR(10) aus dem Dokument verschwunden
und wen kein CHR(10) im Text enhalten ist wird der gesamte Text entfernt :shock:

wie kann man erreichen das das nur auf die internen Variablen wirkt ?

Re: automatischen Umbruch im Text finden

Verfasst: Fr, 20.08.2010 06:44
von Karolus
Hallo
Tut das:

Code: Alles auswählen

Sub absatzstauchen

	odoc = thisComponent
	oviewCursor = odoc.currentController.viewCursor()
	
	oTcursor = odoc.text.createTextcursor()
	oTcursor.gotorange( oviewcursor, false )
	oTcursor.gotoStartofParagraph( false )
	oTcursor.gotoEndofParagraph( true )
	
	oviewcursor.gotoStartofline( false )
	oviewcursor.gotoendofline( true )
	
	
if Instr( otcursor.string, chr( 10 )) then
	rbreak = Instr( otcursor.string, chr( 10 ))
	oTcursor.collapsetoStart()
	oTcursor.goright( rbreak - 1 , true )
end if

scale = 100
while  otcursor.string <> oviewcursor.string
	oviewcursor.gotostartofline( false )
	scale = scale -1
	oTcursor.CharScaleWidth  = scale
	oviewcursor.gotoendofline( true )
wend

End Sub
Gruß Karo

Re: automatischen Umbruch im Text finden

Verfasst: Fr, 20.08.2010 07:51
von clag
Hallo Karolus, Turtle47...........

ja genau so hatte ich mir das gewünscht

jetzt ist es perfekt !

klick und passt, super 8)

der Button dafür ist schon in die Vorlage eingebaut bzw bekommt nen Hotkey

Danke für die Super Unterstützung !
Das birgt für euch aber die Gefahr, ich komme wieder .........
du und turtle ihr habt jetzt freien Eintritt in meiner Dankbar :lol: