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