Jetzt hab ich mich auch mal daran versucht (allerdings ohne Hilfslabel):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aDC: hDC;
R: TRect;
aCanvas: TCanvas;
begin
R := Memo1.BoundsRect;
Memo1.Lines.BeginUpdate;
try
Memo1.Lines.Add('Zeile');
Memo1.Text := trim(Memo1.Text);
aDC := GetWindowDC(Memo1.Handle);
if aDC <> 0 then
try
aCanvas := TCanvas.Create;
try
aCanvas.Handle := aDC;
aCanvas.Font.Assign(Memo1.Font);
DrawText(aCanvas.Handle,PChar(Memo1.Text),-1,R,DT_NOPREFIX or DT_CALCRECT or DT_WORDBREAK);
finally
aCanvas.Free;
end;
finally
ReleaseDC(Memo1.Handle,aDC);
end;
finally
Memo1.Lines.EndUpdate;
end;
Memo1.Height := R.Bottom - R.Top + 6;
end;
Ob das jetzt 100%-ig so stimmt, weiß ich nicht (vor allem die 6 in der letzten Zeile), aber das sah bei ersten Tests ganz gut aus.