Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Textlänge abschneiden (https://www.delphipraxis.net/189448-textlaenge-abschneiden.html)

EWeiss 18. Jun 2016 00:06

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 GetTextExtentPoint gehen incl. Kerning und dann wird es richtig kompliziert.
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

Neutral General 18. Jun 2016 00:31

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...

EWeiss 18. Jun 2016 00:40

AW: Textlänge abschneiden
 
Zitat:

Zitat von Neutral General (Beitrag 1340509)
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...

Ja was denn :)
Habe ich natürlich.

Zitat:

Du machst nur komische Dinge glaube ich...
Denke ich nicht. Bin Dumm aber so dumm auch wieder nicht.

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

Sir Rufo 18. Jun 2016 01:35

AW: Textlänge abschneiden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also in meinem Original-Quelltext ist
Delphi-Quellcode:
lSuffixLength
initialisiert ... wenn du das vergessen hast, warum initialisierst du die nicht einfach, anstatt da eine globale Variable von zu machen? :gruebel:

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.

EWeiss 18. Jun 2016 01:46

AW: Textlänge abschneiden
 
Zitat:

wenn du das vergessen hast, warum initialisierst du die nicht einfach, anstatt da eine globale Variable von zu machen?
Wir reden irgendwie aneinander vorbei..
Es war doch von dir Initialisiert.

Delphi-Quellcode:
lSuffixLength := 0;

Ich hatte vergessen wie im vorherigen Post schon gesagt

Delphi-Quellcode:
   if not Assigned( CharMeasurement )
   then
//     raise EArgumentNilException.Create( 'CharMeasurement' );
   if MaxLength < 0
   then
//     raise EArgumentOutOfRangeException.Create( 'MaxLength' );

   lSuffixLength := 0;
die vier Zeilen ebenfalls noch zu Kommentieren.

Das hatte zu folge das dieser code ausgeführt wurde

Delphi-Quellcode:
   if MaxLength < 0
   then
     lSuffixLength := 0;
In dem Fall ist lSuffixLength natürlich nicht mehr initialisiert.

Aber wie gesagt das habe ich in meinem anderen Post schon mitgeteilt und berichtigt.
Es gibt unter D2010 kein "EArgumentNilException".

Zitat:

Die Hauptfrage ist, was ist für OpenGL schneller: Einen ganzen Text mehrmals zu messen oder jeweils ein Zeichen
Schneller ist nicht so das Problem ich lese den Text nur einmal wenn der Songtitel sich ändert.
Das schafft OpenGL allemal.

Zitat:

Das ist bei dir aktuell diese ominöse 58
Das ist nicht ominös.
Das sind die menge an Chars die in dem Bereich zwischen 5 und 635 reinpassen.
Nicht mehr nicht weniger.


gruss

EWeiss 18. Jun 2016 15:27

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

nahpets 18. Jun 2016 15:39

AW: Textlänge abschneiden
 
Also, ich stelle mir das (analog zu Post #14) so vor:
Delphi-Quellcode:
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;
Liefert tsTextGetWidthA für 'iiiiiiii' und 'wwwwwwww' eigentlich das gleiche Ergebnis?

Wenn ja, wird das mit der Routine nix.

EWeiss 18. Jun 2016 15:55

AW: Textlänge abschneiden
 
Zitat:

Liefert tsTextGetWidthA für 'iiiiiiii' und 'wwwwwwww' eigentlich das gleiche Ergebnis?
Nein natürlich nicht.
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:

Zitat:

// Ist von der Breite so angelegt, dass mit Courier New 8 genau 80 Zeichen hineinpassen

Wie schon gesagt..
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

nahpets 18. Jun 2016 17:53

AW: Textlänge abschneiden
 
Zitat:

Zitat von EWeiss (Beitrag 1340522)
Zitat:

Liefert tsTextGetWidthA für 'iiiiiiii' und 'wwwwwwww' eigentlich das gleiche Ergebnis?
Nein natürlich nicht.

Das hatte ich egentlich auch nicht erwartet und daher verwundert es mich, dass das Ganze nur mit Monotonen Font funktioniert.
Zitat:

Zitat von EWeiss (Beitrag 1340522)
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.

Von einem Ergebnis dieser Art bin ich eigentlich ausgegangen.
Zitat:

Zitat von EWeiss (Beitrag 1340522)
Zitat:

Zitat:

// Ist von der Breite so angelegt, dass mit Courier New 8 genau 80 Zeichen hineinpassen

Wie schon gesagt..
Funktioniert 100% solange es ein Monotoner Font ist.
Wenn nicht vergiss es denn dann Passen keine 80 Zeichen mehr hinein.

Bei Arial würd' ich hier jetzt davon ausgehen, dass 57 i oder 25 W passen.
Zitat:

Zitat von EWeiss (Beitrag 1340522)
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.

Den Eindruck, dass Dich hier im Thread irgendwer für blöd hält, habe ich nicht. Das Problem, mit dem Du Dich da rumschlägst, ist von der Logik her nicht zu fassen. Eigentlich müsste Dein Vorgehen zu einem richtigen Ergebnis führen und ebenso auch die anderen Lösungsvorschläge. Irritierend ist halt, dass dem nicht so ist. Aber dass hat doch nichts mit Deiner Person zu tun.
Zitat:

Zitat von EWeiss (Beitrag 1340522)
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

Momentan gehe ich davon aus, dass das Problem an einer Stelle liegt, auf die Du als Programmierer keinen Zugriff hast, also irgendwo innerhalb der von Dir genutzten Bibliothek.

Rollo62 18. Jun 2016 18:21

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 10:00 Uhr.
Seite 4 von 6   « Erste     234 56      

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