Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Textlänge abschneiden

  Alt 14. Jun 2016, 08:15
Du benutzt zwar OpenGL aber ich denke Canvas.TextWidth kann trotzdem ein guter Ansatz sein. Vielleicht sind die Ergebnisse nicht 1:1 auf OpenGL übertragbar aber das Verhältnis sollte ja auf jeden Fall gleich sein.
Ich habe es mal damit getestet
http://www.delphipraxis.net/1333234-post4.html


Delphi-Quellcode:
function ChangeLabelWidth3(Lab: TLabel; MaxWidth: Integer): Boolean;
var LabCap: String;
     CurrWidth, n: Integer;
begin
   if Lab.Width > MaxWidth then
   begin
     LabCap:= Lab.Caption;
     MaxWidth := MaxWidth - Lab.Canvas.TextWidth('...'); //crash
     CurrWidth := Lab.Canvas.TextWidth(LabCap);

     n := Length(LabCap);
     repeat
       CurrWidth := CurrWidth - Lab.Canvas.TextWidth(LabCap[n]);
       dec(n);
     until (CurrWidth <= MaxWidth) or (n <= 0);
     Lab.Caption := copy(LabCap, 1, n) + '...';

     Result:= True;
   end
   else
     Result := false;
end;
Funktionieren tut es nicht denn es kracht schon hier.

MaxWidth := MaxWidth - Lab.Canvas.TextWidth('...'); //crash
Deaktiviere ich die zeile dann kracht es hier.

CurrWidth := Lab.Canvas.TextWidth(LabCap);
AV Read of Adress 000000


gruss
  Mit Zitat antworten Zitat