在窗体上放一个RichEdit控件,设置大小为100*100.设置自动换行并且不显示滚动条。
然后让用户随便设置字体大小,随便怎么输入,当输入的字宽度或者高度超出RichEdit的时候,就提示用户,你输的字已经太多了。这种效果要怎么做?不是那种简单设置 richedit的maxlength就行的,因为字体大小变了以后,没办法计算能输多少 行/列 字了。希望有高手帮忙解决下~~~

解决方案 »

  1.   

    用GetCharWidth获得字体宽度,计算,然后设置width试试
      

  2.   

    使每一行的 TextWidth < memo的width
      

  3.   

    当RichEdit控件设置自动换行并且不显示滚动条时,不用考虑宽度问题;
    输入文本高度不超过richedit的可见高度的解决思路:
    1、用RichEdit1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0)取richedit的第一个可见
       行的行号。
    2、当此行号不等于0时表示输入的文本超过了richedit的可见高度;则删除最后输入的字符;
    3、提示用户。
      

  4.   

    回6楼
    用户做了更改后,判断richedit的第一个可见行的行号,如此行号不等于0时,
    删除最后行richedit1.Lines.Delete(richedit1.Lines.Count-1);
    循环之。
      

  5.   

    先谢谢wh_wangjun的帮助。不过你这个方法其实还是在用户输入的时候限制,不让用户输入超出。
    现在用户输入是不会超出了,但是用户输入完以后,只要把字体设置大一点,就肯定会超出了。
    因为这时候可见行号一直都是0,那么是不会删除超出的部分的,用户只要按下向下的箭头,就可以看到超出的部分。你可以做个试验44看。
      

  6.   


    我就是不清楚要怎么算嘛。我用RichEdit1.Font.Height得到的字体高度都是负数哦~~~比如8号字的字体高度一般都是-11。我的RichEdit1的高度是100,100/11=9左右,但其实只能输差不多5行。
    因为行和行之间还有间距,但是这个间距是多少呢?字体变大了以后行间距会不会变大。有什么函数可以得到行间距的?
      

  7.   

    在 TRichEdit1的Onchange事件中加入: 
    if Length(RichEdit1.Text)>X then
    begin
      ShowMessage{'    '};
       ...
      exit;
    end;试试