Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Word: Strategie hinter ausgeglichener Spaltenaufteilung (https://www.delphipraxis.net/203728-word-strategie-hinter-ausgeglichener-spaltenaufteilung.html)

stahli 17. Mär 2020 21:02

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Ich bin schon eine gei... Sau - oder? :stupid:

Ok, mal drauf rum denken...


Wenn man davon ausgeht, dass der Text annähernd homogen ist, dann könnte man vielleicht als Ausgangsbasis vom Gesamtvolumen des Textes ausgehen.

Als Idee:

- Text komplett in Spalte 1 rendern, so dass Du z.B. 300 kurze Zeilen hast mit deren höhen und und der benötigten Gesamthöhe.
- Wenn Du jetzt 3 gleich breite Spalten hättest, wäre die Aufteilung rel. einfach. Eben dritteln (jeweils 100 Zeilen) und gut ist.
- Bei unterschiedlich breiten Spalten musst Du einen Faktor mit einrechnen (bei Breiten 30, 30, 60) wäre die dritte Spalte doppelt so breit wie die ersten zwei und müsste 2 mal so viel Zeilen aufnehmen wie die ersten beiden (75, 75, 150 Zeilen von der ersten Berechnung).
- die dritte Spalte müsste wegen den Umbrüchen natürlich neu berechnet werden.
- Wenn diese Annäherung noch nicht passt, musst Du weitere Tests machen (z.B. mit 72, 72, 156 Zeilen) und neuer Berechnung der dritten Spalte. Bis das Ergebnis ok ist.


Hilft Dir das? Hattest Du ähnliche Gedanken?

Kann natürlich auch naiv und untauglich sein, aber das wäre mein erster Ansatz.

hansklok 17. Mär 2020 21:20

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Zitat:

Zitat von stahli (Beitrag 1460007)
Ich bin schon eine gei... Sau - oder? :stupid:

Haha, kein Kommentar.
Zitat:

Zitat von stahli (Beitrag 1460007)
- Text komplett in Spalte 1 rendern, so dass Du z.B. 300 kurze Zeilen hast mit deren höhen und und der benötigten Gesamthöhe.

Du meinst also die gesamte Breite des Absatzes?
Zitat:

Zitat von stahli (Beitrag 1460007)
- Bei unterschiedlich breiten Spalten musst Du einen Faktor mit einrechnen (bei Breiten 30, 30, 60) wäre die dritte Spalte doppelt so breit wie die ersten zwei und müsste 2 mal so viel Zeilen aufnehmen wie die ersten beiden (75, 75, 150 Zeilen von der ersten Berechnung).

Und an welchen Faktor oder welche Vorgehensweise denkt Du da?
Zitat:

Zitat von stahli (Beitrag 1460007)
- Wenn diese Annäherung noch nicht passt, musst Du weitere Tests machen (z.B. mit 72, 72, 156 Zeilen) und neuer Berechnung der dritten Spalte. Bis das Ergebnis ok ist.

So in etwa waren auch Gedankengänge von mir. Die Frage ist, wie könnten die Methoden dazu aussehen? Einiges hört sich für mich nach Iteration an. Auch wenn ich schon lange entwickle, bin kein Profi, habe ich damit nie zu tun gehabt und tue mich immer schwer mit dem Verständnis dieser.
Zitat:

Zitat von stahli (Beitrag 1460007)
Kann natürlich auch naiv und untauglich sein, aber das wäre mein erster Ansatz.

Naiv ist immer gut. Vielen Dank.

stahli 17. Mär 2020 22:31

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
"coole Sau" oder "geiler Typ" wäre wohl auch passender gewesen... ;-)

Also nochmal:

- alles rendern in eine schmale Spalte (Breite = 30) -> ergibt 300 Zeilen Text und 3000 Pixel Höhe
- 3 Spalten mit Breiten 30, 30, 60 ergeben 100% Breite
- Ergibt Faktoren pro Spalte 0.25, 0.25, 0.5
- also Zeilen pro Spalte 75, 75, 150
- das wäre die erste Abschätzung
- für die ersten 2 Spalten könnte man das erste Ergebnis sofort übernehmen und die Höhe auf 750 festlegen
- die dritte Spalte müsste neu berechnet werden, wegen den verschobenen Wortumbrüchen
- die benötigte Höhe kann nun kleiner sein (größer eher nicht, würde ich denken)
- wenn der freie Platz zu groß ist, könntest Du die Gesamthöhe von 750 und 75 Zeilen zeilenweise reduzieren, bis die Spaltenhöhen der Texte ausgeglichen sind.

hansklok 17. Mär 2020 23:50

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für Deinen Beitrag.
Zitat:

Zitat von stahli (Beitrag 1460015)
- alles rendern in eine schmale Spalte (Breite = 30) -> ergibt 300 Zeilen Text und 3000 Pixel Höhe
- 3 Spalten mit Breiten 30, 30, 60 ergeben 100% Breite

Wie kommst Du auf diese Werte? 30 + 30 + 60 = 120 :?

Ich habe mir eben noch einmal angesehen, wie Microsoft Word vorgeht. Dort wird erst ab der 4. Zeile in der ersten Spalte umgebrochen. Danach wird die Lage neu bewertet. Anbei ein Bildschirmvideo, wie das in MS Word aussieht. Kann man daraus eine Abfolge, einen Algorithmus ableiten?

stahli 18. Mär 2020 00:02

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Die beispielhaften 120 Einheiten (cm oder was auch immer) wären halt 100% der Breite der Zeichenfläche.
Also Spalten 1 und 2 hätten 1/4 der Gesamtbreite und die rechte Spalte 1/2.

Das Video schaue ich mir im Laufe des Tages mal an...

hansklok 18. Mär 2020 11:46

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Also in Microsoft Word werden ab vier Zeilen in der ersten Spalte dann Zeile drei und vier in die zweite spalte verschoben. 
Sobald wir eine fünfte Zeile haben, wird die logische (fortlaufende) Zeile 4 (Zeile 1 aus der 2. Spalte) in die erste Spalte verschoben. Bei insgesamt sechs Zeilen, wird wieder alles einheitlich über die drei Spalten aufgeteilt (2 Zeilen pro Spalte). 

Erkennst ihr eine Logik, ein Muster, welches man in einem Algorithmus ausdrücken kann?

Es sieht für mich danach aus, als wäre es immer so, als würde die Anzahl der Zeilen von einer Spalte immer der Zeilenanzahl der vorherigen Spalte minus eins betragen.


Sherlock 18. Mär 2020 13:36

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Was Du da beobachtest ist die Vermeidung von Hurenkindern und Schusterjungen. Das lässt sich irgendwo in den Tiefen der Einstellungen der Textverarbeitung schalten.

Sherlock

stahli 18. Mär 2020 17:43

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Ok, ich habe mir das Video mal angesehen.

Ich würde es tatsächlich so anfangen, wie oben besprochen und dann Stück für Stück verfeinern.
Die grundsätzliche Frage ist, was Dir am wichtigsten ist.

Angenommen, Du hast Text mit 3 Zeilen.

Du kannst nun sagen, das Wichtigste ist, alle drei Spalten gleichmäßig zu füllen.
Dann kommt jede Zeile in eine Spalte.

Oder Du sagst, die Spalten sollen möglichst nicht höher werden als 10 Zeilen.
Dann füllst Du erst die linke Spalte bis zehn Zeilen und machst dann weiter rechts weiter.
Erst nach 30 Zeilen vergrößerst Du alle Spalten.

Das ist halt Geschmackssache und auch davon abhängig, wie Deine Text aussehen.
Können die auch dynamisch wachsen, wie beim Tippen im Video? Oder gibt es quasi einen festen Satz, der quasi gedruckt wird?

Mein Ansatz von oben würde die Spalten immer möglichst gleichmäßig ausfüllen.
Statt aber ständig zeilenweise immer wieder für alle Spalten neue Ergebnisse auszurechnen und diese immer weiter neu aufzufüllen, würden die ungefähren Ergebnisse schon mal zuvor abgeschätzt.
Da braucht es dann sicher noch etwas Feinarbeit, um an die bestmöglichen Abschätzungen zu kommen.
Zum Schluss gibt es dann noch ein paar Iterationen, um zum Endergebnis zu kommen.

So würde ich es wohl machen.

hansklok 19. Mär 2020 12:42

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Zitat:

Zitat von stahli (Beitrag 1460075)
Können die auch dynamisch wachsen, wie beim Tippen im Video? Oder gibt es quasi einen festen Satz, der quasi gedruckt wird?

Es gibt einen festen Satz.
Zitat:

Zitat von stahli (Beitrag 1460075)
Zum Schluss gibt es dann noch ein paar Iterationen, um zum Endergebnis zu kommen.

Was für Iterationen?

Die Sache ist folgende, dadurch, dass Zeilen eine unterschiedliche Höhe haben können, dürfte das doch den Ansatz, erstmal alles in eine Spalte zu packen und dann durch die Anzahl der Spalten zu teilen, um dann die restlichen Zeilen zu befallen, schwierig sein, oder?

stahli 19. Mär 2020 13:04

AW: Word: Strategie hinter ausgeglichener Spaltenaufteilung
 
Du wirst keine Formel finden, die Dir die beste Höhe und die besten Umbrüche vorab ausgibt (ohne wirkliche Texte zumindest temporär zu schreiben und die Höhen und Breiten zu ermitteln.)

Bei jeder kleinen Änderung können sich am Ende wieder völlig andere Ergebnisse ergeben. Insofern wird es mehrere Durchläufe brauchen, um ein gutes Ergebnis zu erhalten.

Im Fall einer fließenden Eingabe (wie beim Tippen) wird man versuchen, nicht ständig vor und zurück zu springen und eine gewisse Kontinuität beizubehalten (also nicht bei jedem Tastendruck das vorherige Ergebnis komplett verwerfen, sondern erst mal davon weiter ausgehen). Aber das brauchst Du ja nicht, da Du einen fertigen Text hast, der in bestimmte Spalten gesetzt werden soll.

Da der Text und die Spalten gegeben sind, könntest Du zunächst eine grobe Annäherung berechnen (z.B. wie ich vorgeschlagen hatte - das sollte eigentlich grob funktionieren).

Da es aber nicht genau passen wird, musst Du Dich nachher mit einigen Durchgängen noch einer optimalen Lösung annähern. Das meinte ich mit Iterationen.

Direkt bei der Vorberechnung die Höhe der einzelnen Zeilen zu beachten, wird schwierig werden. Du weißt ja vorab nicht, ob hohe Zeilen eher in der linken, mittleren oder rechten Spalte landen werden oder vielleicht sogar ausgeglichen sind. Diese Feinheiten sollten dann bei den Optimierungsdurchläufen berücksichtigt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz