Berechnen der Textgröße vor dem Zeichnen auf eine Arbeitsfläche

7

Ich benutze Delphi 7. Ich bin mehr als vertraut mit der Verwendung einer Leinwand und Zeichnen von Text auf eine Leinwand, und auch TCanvas.TextHeight usw. Das Problem entsteht, wenn ich Word Wrap implementieren möchte. Ich brauche nicht nur den besten Weg, um Text auf einen Canvas zu zeichnen und ihn automatisch auf eine bestimmte Breitenbeschränkung zu übertragen, sondern ich muss auch wissen, wie hoch (oder wie viele Zeilen) er nach dem Umbruch sein wird. Ich muss ein anderes Bild vorbereiten, bevor ich den Text zeichne, ein Bild, das gerade groß genug sein muss, um den verpackten Text zu platzieren. Dies ist ein Versuch zu replizieren, wie ein iPhone SMS-Nachrichten mit einem Ballon auf beiden Seiten des Bildschirms in einer variablen Höhe Scroll-Box (TScrollingWinControl ist meine Basis) angezeigt.

    
Jerry Dodge 10.10.2011, 21:40
quelle

1 Antwort

32

Verwenden Sie die (fast) allmächtige Funktion DrawText mit einem initial rectangle, und die Flags DT_WORDBREAK (was bedeutet, dass die Zeichenfolge wortumgewickelt sein sollte) und DT_CALCRECT :

%Vor%

Aufgrund des Flags DT_CALCRECT wird das erste DrawText nicht gezeichnet, sondern nur die Höhe von r , so dass es den gesamten String S enthalten kann (oder die Breite von r reduzieren) wenn S zufälligerweise in eine einzige Zeile passt, und wenn S ein Wort enthält, das nicht in eine einzelne Zeile passt, wird die Breite von r erhöht. Dann kannst du mit r machen, was du willst, und dann kannst du die Zeichenfolge für real zeichnen.

Versuchen Sie dies zum Beispiel:

%Vor%

Screenshot http://privat.rejbrand.se/DrawTextChat.png

    
Andreas Rejbrand 10.10.2011, 22:05
quelle

Tags und Links