想做一个带行号的文本编辑器,主要是想在 RichEdit 的左边显示当前行号应该怎么实现?能否给个思路

解决方案 »

  1.   

    可以从RichEdit的CaretPos属性中读取:  ShowMessage('行:'+IntToStr(RichEdit1.CaretPos.y+1)+',列:'+IntToStr(RichEdit1.CaretPos.x+1));
      

  2.   

    那我要把这个行号放到哪里?
    是在 RichEdit 左边放一个 Panel 专门放行号呢,还是在 RichEdit 上绘制这样一块区域
      

  3.   

    怎样让 RichEdit 跳到指定行?
      

  4.   

    现在碰到的问题是,在 RichEdit 滚动的时候,怎样让行号也跟着滚动到相应的位置
      

  5.   

    //下面是一个例程,需一个RichEdit和一个Panel,Panel会自动显示RichEdit的当前光标位置X:Y。
    procedure TForm1.GetPosition(Sender: TRichEdit);
    var
      iX,iY:Integer;
    begin
      iX := 0;
      iY := 0;
      iY :=SendMessage(RichEdit1.Handle,EM_LINEFROMCHAR,RichEdit1.SelStart,0);
      iX :=RichEdit1.SelStart-SendMessage(RichEdit1.Handle,EM_LINEINDEX,iY,0);
      Panel1.Caption := IntToStr(iY + 1) + ':' + IntToStr(iX + 1) ;
    end;
    procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      GetPosition(RichEdit1);
    end;procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      GetPosition(RichEdit1);
    end;
      

  6.   

    richedit跳到指定行
    row:integer;row:=2;//指定行
    RichEdit1.SelStart = SendMessage(RichEdit1.Handle, EM_LINEINDEX, row, 0);
            RichEdit1.SelLength=0;
            SendMessage(RichEdit1.Handle, EM_SCROLLCARET, 0, 0);