Hallo #,
ich lade den Inhalt eines Labels aus einer
DB.
Auf den Inhalt habe ich fast keinen Einfluss.
Der Text soll aber immer vollständig dargestellt werden.
Die gewünschte Lösung: Font verkleinern, bis es passt.
Delphi-Quellcode:
procedure TForm1.FitQuestionFont;
var
iMaxLength: Integer;
iCurLength: Integer;
iFontSize : Integer;
begin
Application.ProcessMessages;
iMaxLength:= Label1.Width;
iCurLength:= Label1.Canvas.TextWidth(LblQuestion1.Caption);
if iCurLength>iMaxLength then
begin
for iFontSize:= Label1.Font.Size-1 downto 1 do
begin
Label1.Font.Size:= iFontSize;
Application.ProcessMessages;
iCurLength:= Label1.Canvas.TextWidth(Label1.Caption);
if iCurLength<=iMaxLength then Break;
end;
end;
end;
Das kann man auch noch etwas komprimieren, ich weiss.
Ist aber nicht das Problem.
Problem ist, dass es ohne die Application.ProcessMessages nicht geht
(funktioniert nicht, weil in FormActivate), mit dem A.Pro kann man dem
Label praktisch zusehen, wie es kleiner wird.
Ein Visible False kleppt auch nicht.
Wie bekomme ich das Verkleinern ohne "Zuschauer" hin ?
AutoSize fällt übrigens flach.
Danke
Heiko