截获文本空件WM_ERASEBKGND消息,画完背景后返回非零即可。限定行字符数要看你的要求了,如果你能定位文本框的行和列,其它的操作应该没有问题。

解决方案 »

  1.   

    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FWinProc: Longint;
        procedure MyWndProc(var Message: TMessage);
      end;implementationprocedure TForm1.FormCreate(Sender: TObject);
    begin
      FWinProc := SetWindowLong(Memo1.Handle, GWL_WNDPROC,
        Longint(MakeObjectInstance(MyWndProc)));
    end;procedure TForm1.MyWndProc(var Message: TMessage);
    var
      DC: HDC;
    begin
      if Message.Msg = WM_ERASEBKGND then
      begin
        DC := HDC(Message.WParam);
        {.. 画背景 ...}
        Message.Result := 1;
      end
      else CallWindowProc(pointer(FWinProc), Memo1.Handle,
        Message.Msg,  Message.WParam, Message.LParam);
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FWinProc := SetWindowLong(Memo1.Handle, GWL_WNDPROC, FWinProc);
      FreeObjectInstance(pointer(FWinProc));
    end;