AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textlänge abschneiden

Ein Thema von EWeiss · begonnen am 14. Jun 2016 · letzter Beitrag vom 19. Jun 2016
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
EWeiss
(Gast)

n/a Beiträge
 
#31

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 00:06
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

Geändert von EWeiss (11. Jul 2019 um 15:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#32

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 00:31
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...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#33

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 00:40
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

Geändert von EWeiss (11. Jul 2019 um 15:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#34

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 01:35
Also in meinem Original-Quelltext ist lSuffixLength initialisiert ... wenn du das vergessen hast, warum initialisierst du die nicht einfach, anstatt da eine globale Variable von zu machen?

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.
Angehängte Dateien
Dateityp: zip dp_189448.zip (965,1 KB, 12x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#35

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 01:46
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.

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

Geändert von EWeiss (18. Jun 2016 um 02:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#36

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 15:27
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#37

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 15:39
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.

Geändert von nahpets (18. Jun 2016 um 18:39 Uhr) Grund: fehlendes begin ergänzt.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#38

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 15:55
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

Geändert von EWeiss (18. Jun 2016 um 16:03 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#39

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 17:53
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.
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:
// 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.
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.
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#40

AW: Textlänge abschneiden

  Alt 18. Jun 2016, 18:21
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


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 23:48 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