2

重複の可能性:
TMemoサイズ自体を、含まれているテキストに合わせて作成できますか?

自動サイズメモを行う必要があります:高さと幅。

次のように高さを自動サイズ設定します。

function TForm1.AutoSizeMemoY(Memo: TMemo): word;
begin
  Canvas.Font := Memo.Font;
  Result := Canvas.TextExtent(Memo.Lines.Strings[0]).cy * Memo.Lines.Count +
    Canvas.TextExtent(Memo.Lines.Strings[0]).cy;
end;

しかし、幅を自動サイズ設定する方法がわかりません。スクロールバーがアクティブになっている場合は、非アクティブになるまで幅を広げてください。しかし、それを実装する方法がわかりません。

4

1 に答える 1

3

最善の解決策ではありませんが、機能します。

function GetTextWidth(F: TFont; s: string): integer;
var
  l: TLabel;
begin
  l := TLabel.Create(nil);
  try
    l.Font.Assign(F);
    l.Caption := s;
    l.AutoSize := True;
    result := l.Width + 8;
  finally
    l.Free;
  end;
end;

そして、この回答のMemo1.Onchangeイベントの最後に次のコードを追加します

  LineInd := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);//focused Memo1 line Index
  Wd := GetTextWidth(Memo1.Font, Memo1.Lines[LineInd]);
  //MaxWidthLineInd = index of the line which has the largest width. 
  //Init value of MaxWidthLineInd = 0
  if MaxWidthLineInd = LineInd then 
    Memo1.Width := Wd
  else begin
    if Wd > Memo1.Width then
    begin
      Memo1.Width := Wd;
      MaxWidthLineInd := LineInd;
    end;
  end;
于 2012-06-20T13:39:16.453 に答える