var lpos,cpos,linelength:integer;
procedure Tsb_byywh_zj.DBMemo3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   Lpos:=SendMessage(dbMemo3.Handle,EM_LINEFROMCHAR,dbMemo3.SelStart,0);
   Cpos:=SendMessage(dbMemo3.Handle,EM_LINEINDEX,Lpos,0);
   LineLength:=SendMessage(dbMemo3.Handle,EM_LINELENGTH,Cpos,0);
   Cpos:=dbMemo3.SelStart-CPos;
   //======以上代码是用几个变量取文本框中一行字符的个数===========
end;
其中可以是dbmemo1,dbmemo1,dbmemo1等等?怎么封装这些不同的对象呢?〉
请高手帮忙?因为在好多地方要用到这些东西

解决方案 »

  1.   

    if sender is TdbMemo then
       begin
       end;
      

  2.   

    procedure KeyDown(Sender: TObject; var Key: Word;var lpos,cpos,linelength:integer;
                   Shift: TShiftState);
    //声明一个过程
    procedure Tsb_byywh_zj.KeyDown(Sender: TObject; var Key: Word; var lpos,cpos,linelength:integer;
      Shift: TShiftState);
    begin
      with Sender As TDBMemo do
      begin
        Lpos:=SendMessage(Handle,EM_LINEFROMCHAR,SelStart,0);
        Cpos:=SendMessage(Handle,EM_LINEINDEX,Lpos,0);
        LineLength:=SendMessage(Handle,EM_LINELENGTH,Cpos,0);
        Cpos:=SelStart-CPos;
      end;
       //======以上代码是用几个变量取文本框中一行字符的个数===========
    end;
    ++可是出现以下问题:大哥我试了可是出这样一个问题:method 'keydown' hide virtual method of base type 
    'TwinControl'是怎么回事呀?你可以在窗体上新建一个dbdemo试一下,我不知道是怎么回事?谢谢!!!!
    帮忙。。
      

  3.   

    你重载了keydown函数,所以会提示的
      

  4.   

    在你自己的类中(或者窗口类)的publish加入:
    lpos,cpos,linelength:integer;
    procedure MyMemoCount(MyMemo:TMemo);
    比如:
    TForm1 = class(TForm)
      public:
        lpos,cpos,linelength:integer;
        procedure MyMemoCount(MyMemo:TMemo);
    end;
    然后函数的实现代码这样写:
    procedure TForm1.MyMemoCount(MyMemo:TMemo);
    begin
       Lpos:=SendMessage(MyMemo.Handle,EM_LINEFROMCHAR,MyMemo.SelStart,0);
       Cpos:=SendMessage(MyMemo.Handle,EM_LINEINDEX,Lpos,0);
       LineLength:=SendMessage(MyMemo.Handle,EM_LINELENGTH,Cpos,0);
       Cpos:=MyMemo.SelStart-CPos;
       //======以上代码是用几个变量取文本框中一行字符的个数===========
    end;好了,直接下面这样调用就可以了:
    MyMemoCount(dbMemo3);然后再去取那些变量的值。
    结束!
      

  5.   

    可以运行了但是让然出现上面说的waringmethod 'keydown' hide virtual method of base type 
    'TwinControl'
      

  6.   

    将它声成一个公用函数,并将其放在一个公用单位元中。
    procedure CountCharFromMemo(const Mem:TCustomMemo;
      var vLPos,vCPos,vLength:integer);
    begin
      with mem do begin
       vLpos:=SendMessage(Mem.Handle,EM_LINEFROMCHAR,Mem.SelStart,0);
       vCpos:=SendMessage(Mem.Handle,EM_LINEINDEX,vLpos,0);
       vLength:=SendMessage(Mem.Handle,EM_LINELENGTH,vCpos,0);
       vCpos:=Mem.SelStart-vCPos;
      end;
    end;