ich verwende
Canvas.TextWidth
, also im Prinzip Deine erste Funktion soweit reduzieren, dass nach der Font Zuweisung nur noch Canvas.TextWith aufgerufen wird.
Delphi-Quellcode:
function GetTextWidth2(const AValue: string; AFont: TFont): Integer;
var
lCanvas: TCanvas;
begin
try
lCanvas := TCanvas.Create;
try
lCanvas.Handle := GetDC(0);
lCanvas.Font := AFont;
Result := lCanvas.TextWidth(AValue);
finally
ReleaseDC(0, lCanvas.Handle);
lCanvas.Free;
end;
except
Result := 0;
end;
end;
Sehe aber gerade, es kommt der gleiche Wert heraus, wie in Deiner ersten Funktion, also wohl auch abweichend. Wobei bei Label.Width wohl von Haus aus ein Rand mit eingerechnet wird? (Habe hier leider nicht den
VCL-Source parat)