![]() |
DrawText : optimale Breite + Zeilenumbruch kombinieren
Moin, Moin.
In meiner StringGrid-Komponente gibt es für die Ausgabe der Zellinhalte u. a. die Attribute "optimale Breite" und "Zeilenumbruch". Beide Darstellungsarten funktionieren für sich allein einwandfrei. Schwierigkeiten macht jetzt die Kombination beider Attribute; also "Zeilenumbruch und optimale Breite". Ich versuche es an einem Beispiel zu erklären:
Delphi-Quellcode:
Problem ist, die tatsächlich erforderliche Breite zu bekommen. Ich habe bisher keine API-Funktion gefunden, die man hierzu verwenden könnte, DrawText() gibt als Funktionsergebnis ja nur die erforderliche Höhe zurück.
DIES IST DER TEXT // AusgabeString
+----------+ | | // Standardbreite der Zelle +----------+ +-----------------+ // "optimale Breite" |DIES IST DER TEXT| // erforderliche Breite mit TextWidth() +-----------------+ // berechnen und Spalte anpassen +----------+ // "Zeilenumbruch" |DIES IST | // Ausgabe mit DrawText() in das |DER TEXT | // Standard-Rect der Zelle, DrawText() +----------+ // liefert die erforderliche HÖHE des CellRect Die Kombination von "optimale Breite" und "Zeilenumbruch" soll nun dieses Ergebnis liefern: +--------+ // "optimale Breite" und "Zeilenumbruch" |DIES IST| // hierfür sind die Angaben |DER TEXT| // erforderliche HÖHE und erforderliche BREITE +--------+ // notwendig um die Zelle anzupassen! Meine Idee ist derzeit, nach dem ersten Aufruf von DrawText(), diese Funktion wiederholt solange mit jeweils in der Breite reduziertem Rectangle aufzurufen, bis die erforderliche Höhe größer wird. Der vorletzte Aufruf würde dann die optimale Breite nutzen. Gibt es da noch eine einfachere und schnellere Lösung? |
Re: DrawText : optimale Breite + Zeilenumbruch kombinieren
Ich würde es so machen:
Kurzfassung: Stringbreite bestimmen, wenn nicht in (optimale) Zelle reinpasst, Leerzeichen suchen, String trennen, größte Breite der "Schipsel" wird "optimale" Breite der Zelle. Höhe=doppelte Schrifthöhe+Zwischenabstand Bernd. |
Re: DrawText : optimale Breite + Zeilenumbruch kombinieren
Hmmm, ja, das ist auch eine Möglichkeit.
Danke für die Idee! Ich hatte gehofft, dass es dafür auch eine fertige API-Lösung gibt. Aber DrawText() mit DT_CalcRect aufgerufen, bestimmt nur die notwendige Höhe ohne eine tatsächliche Ausgabe auf dem Canvas vorzunehmen. Mal schauen, welcher der beiden Lösungen schneller ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz