![]() |
AW: Textlänge abschneiden
Das ist was ich vorher sagte.
Solange man Monotype Fonts verwendet funktioniert dein Code gut. (Auch meiner in GL) Ich kann keinen Monotype Font verwenden weil es bescheiden aussieht ;) Aber wehe wenn nicht. Bei Arial geht es nicht mehr. PaintBox und Label2 der gleiche Font Arial, Size = 24 Ich komme nicht auf die 560 mit dem Label2 siehe Anhang. Font8 und Font24 Damit muss ich mich auch in GL rumschlagen. Um das jetzt richtig zu berechnen müsste man über ![]() ![]() Dann würde es unter VCL gehen aber nicht mehr mit OpenGL. Das ist nun mal so. Ich denke das ist schon eine Wissenschaft für sich :) gruss |
AW: Textlänge abschneiden
Das Canvas was die Länge des Textes berechnet muss natürlich auch die gleiche Font und die gleiche Fontgröße eignestellt haben...
Das ist eigentlich keine Wissenschaft. Du machst nur komische Dinge glaube ich... |
AW: Textlänge abschneiden
Zitat:
Habe ich natürlich. Zitat:
PaintBox und Label2 der gleiche Font Arial, Size = 24 bzw. PaintBox und Label2 der gleiche Font Arial, Size = 8 Selbst der EditBox, Form1 habe ich den gleichen Font verpasst So :) Unten der Label oben die PaintBox Anhänge extra für dich. gruss |
AW: Textlänge abschneiden
Liste der Anhänge anzeigen (Anzahl: 1)
Also in meinem Original-Quelltext ist
Delphi-Quellcode:
initialisiert ... wenn du das vergessen hast, warum initialisierst du die nicht einfach, anstatt da eine globale Variable von zu machen? :gruebel:
lSuffixLength
Anyway, im Anhang mal der Source (etwas umgebaut) und ein EXE (zum direkten Testen). Mit einem Klick auf die Paintbox kann man den Font auswählen und schwupps wird der Text mit dem neuen Font wieder angepasst dargestellt. Ich hoffe wegen der Pixel-Geschichte sprechen wir jetzt nicht darüber, dass der Text ganz exakt genau so breit sein soll wie die Vorgabe ist. Das das so (zeichne mal einfach so den Text) nicht geht is hoffentlich jedem klar. |
AW: Textlänge abschneiden
Zitat:
Es war doch von dir Initialisiert.
Delphi-Quellcode:
lSuffixLength := 0;
Ich hatte vergessen wie ![]()
Delphi-Quellcode:
die vier Zeilen ebenfalls noch zu Kommentieren.
if not Assigned( CharMeasurement )
then // raise EArgumentNilException.Create( 'CharMeasurement' ); if MaxLength < 0 then // raise EArgumentOutOfRangeException.Create( 'MaxLength' ); lSuffixLength := 0; Das hatte zu folge das dieser code ausgeführt wurde
Delphi-Quellcode:
In dem Fall ist lSuffixLength natürlich nicht mehr initialisiert.
if MaxLength < 0
then lSuffixLength := 0; Aber wie gesagt das habe ich in meinem anderen Post schon mitgeteilt und berichtigt. Es gibt unter D2010 kein "EArgumentNilException". Zitat:
Das schafft OpenGL allemal. Zitat:
Das sind die menge an Chars die in dem Bereich zwischen 5 und 635 reinpassen. Nicht mehr nicht weniger. gruss |
AW: Textlänge abschneiden
Ach so
Meine ominösen 58 sind letztendlich deine ominösen 80 ;) Habe deine Unit getestet ist aber leider für meine Zwecke nicht Verwendbar. Sie funktioniert nur verlässlich mit Monotypen Fonts die ich aber nicht einbinden will. Destotrotz gute Arbeit andere können sie sicherlich verwenden. Ich beende das hier und werde mich noch etwas mehr in die TextSuite einarbeiten. Da gibt es eine Lösung dessen bin ich sicher. gruss |
AW: Textlänge abschneiden
Also, ich stelle mir das (analog zu Post #14) so vor:
Delphi-Quellcode:
Liefert tsTextGetWidthA für 'iiiiiiii' und 'wwwwwwww' eigentlich das gleiche Ergebnis?
if fMaxStrLen = 0 then begin
fMaxLen := 635; fMaxStrLen := tsTextGetWidthA(SongName); if fMaxStrLen >= fMaxLen then begin fSuffixLen := tsTextGetWidthA('...'); fMaxLen := fMaxLen - fSuffixLen; while fMaxStrLen >= fMaxLen do begin SongName := Copy(SongName,1,Length(SongName) - 1); fMaxStrLen := SongName); end; SongName := SongName + '...'; end; end; Wenn ja, wird das mit der Routine nix. |
AW: Textlänge abschneiden
Zitat:
Da es sich nicht um einen Monotonen Font handelt. Aber das verstehen einige Leute hier nicht. Arial: I = 11 W = 25 Courier New i= 25 W =25 Mit W bin ich also früher an die grenze von 635 gestoßen als mit I Das führt dazu das der Umbruch viel früher stattfindet als bei I. Der Abstand zu der Zeitanzeige ist dann logischer weise Unterschiedlich. Zitat:
Funktioniert 100% solange es ein Monotoner Font ist. Wenn nicht vergiss es denn dann Passen keine 80 Zeichen mehr hinein. Man könnte das jetzt weiter verfolgen, aber mich scheinen einige Leute für so blöd zu halten das ich nicht mal in der Lage bin einen Canvas den richtigen Font zuzuweisen. Von daher vergesse ich das Thema jetzt hier. Wenn Lossy im GL Forum zeit hat hineinzuschauen werde ich eine Antwort finden. Danke für eure Hilfe. gruss |
AW: Textlänge abschneiden
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Textlänge abschneiden
Bin mir nicht sicher, aber ist beim Proportionalfont nicht auch die Reihenfolge der Zeichen wichtig ?
Der Font sollte doch der Typogrrafie entsprechen: z.B. im Buchdruck. Dann wäre z.B. "o" nach "P" etwas näher rangerückt (so inder der Art). Also kämen bei "Po" andere Werte als bei "oP", oder so ähnlich. Könnte das eventuell dein Problem damit sein ? Dann müsste immer der ein ganzer String analysiert werden und nur eine charakterweise Addition müsste Unterschiede ergeben. Das wäre vielleicht die Erklärung wenn es ein Font tut und der Andere nicht. Das nurmal als Gedankenanregung, bin auch kein Fontspezialist. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 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