Teil-Text in Zeile einpassen [gelöst]

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Teil-Text in Zeile einpassen [gelöst]

Beitrag 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:
Zuletzt geändert von clag am Fr, 20.08.2010 08:36, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: automatischen Umbruch im Text finden

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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 ?
Zuletzt geändert von clag am Do, 19.08.2010 14:13, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: automatischen Umbruch im Text finden

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: automatischen Umbruch im Text finden

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: automatischen Umbruch im Text finden

Beitrag 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 :?: :?:
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: automatischen Umbruch im Text finden

Beitrag 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
.....
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: automatischen Umbruch im Text finden

Beitrag 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
Zuletzt geändert von turtle47 am Do, 19.08.2010 23:37, insgesamt 1-mal geändert.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: automatischen Umbruch im Text finden

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: automatischen Umbruch im Text finden

Beitrag 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:
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten