memo宽度是定值,怎么计算Memo的高度?
使得Memo在不用滚动条的情况下显示所有字符。
wordwrap 为true.

解决方案 »

  1.   

    加载后用Memo1.Height := Memo1.Lines.Count * 14;试一下,好象效果不是太好
      

  2.   

    那得計算一下不同字體下的字符會占用多少memo的寬度和高度
      

  3.   

    weizi2000(秋风啊) 
    这样不行呀,还有字体大小呢,不可以是固定值。
      

  4.   

    Memo1.Height := Memo1.Lines.Count * round(Memo1.Font.Size * Memo1.Font.PixelsPerInch / 50 );
      

  5.   

    SendMessage(Memo.Handle, EM_GETPARAFORMAT, 0, Longint(@pf2));
    看能不能得到 
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vControlCanvas: TControlCanvas;
    begin
      vControlCanvas := TControlCanvas.Create;
      try
        vControlCanvas.Control := Memo1;
        vControlCanvas.Font.Assign(Memo1.Font);
        Memo1.ClientHeight := vControlCanvas.TextHeight('|') *
          (Memo1.Lines.Count +
            Ord(Copy(Memo1.Lines.Text, Length(Memo1.Lines.Text), 1) = #10)) + 3;
        Caption := IntToStr(vControlCanvas.TextHeight('|'));
      finally
        vControlCanvas.Free;
      end;
    end;
      

  7.   

    哈,这个是我以前做过的模仿Windows Paint中的写字的那种效果,可惜放在家里了,又懒得去重写了。
    不过道理是一样的,得到每一行字体的高度,再乘以Memo.Lines.count,得到一个值,
    再把Memo的高设为这个值就可以了。
      

  8.   

    aiirii(ari-爱的眼睛)的方法很短,只是没写pf2是什么意思,因此我没办法试验。希望知道pf2是什么意思。zswang(伴水清清)(专家门诊清洁工) 能很好的解决问题,只是QStdCtrls文件中的TMemo不能解决,稍微修改一下即可。谢谢。