AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi DrawText : optimale Breite + Zeilenumbruch kombinieren
Thema durchsuchen
Ansicht
Themen-Optionen

DrawText : optimale Breite + Zeilenumbruch kombinieren

Ein Thema von taaktaak · begonnen am 15. Nov 2008 · letzter Beitrag vom 16. Nov 2008
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

DrawText : optimale Breite + Zeilenumbruch kombinieren

  Alt 15. Nov 2008, 20:40
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:
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!
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.

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?
Ralph
  Mit Zitat antworten Zitat
aladin60

Registriert seit: 12. Mär 2008
Ort: Sachsen-Anhalt
45 Beiträge
 
Delphi 2006 Personal
 
#2

Re: DrawText : optimale Breite + Zeilenumbruch kombinieren

  Alt 16. Nov 2008, 19:02
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.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: DrawText : optimale Breite + Zeilenumbruch kombinieren

  Alt 16. Nov 2008, 19:40
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.
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