说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

有关 RichEdit 的几个简单的问题

编辑:说三道四文库 发布时间:2018-05-23 05:26
HTML文档下载 WORD文档下载 PDF文档下载
1,不要自动换行
2,当前光标所在的行号和列号
3, 改变当前行的字体或颜色
1 你试试分别设置不同的scrollbars看:)
2 // 指定输入游标的位置
     procedure SetCaret(RTF: TRichEdit; var Row, Col: word);
     var
       i, iStopLine, iSelStart: integer;
     begin
       if (RTF = nil) then Exit;
       if Row = 0 then Row := 1;
       if Col = 0 then Col := 1;

       // 到第 Row 列, Col 行共几个字元
       iStopLine := Row - 1;
       iSelStart := 0;
       for i := 0 to RTF.Lines.Count - 1 do
       begin
         if i = iStopLine then
         begin
           if Length(RTF.Lines[i]) >= Col then
             Inc(iSelStart, Col)
           else
             Inc(iSelStart, Length(RTF.Lines[i]) + 2);
           Break;
         end;
         Inc(iSelStart, Length(RTF.Lines[i]) + 2);
       end;
       if iSelStart > 0 then Dec(iSelStart);

       // 以设定标记的方式指定游标位置
       SendMessage(RTF.Handle, EM_SETSEL, iSelStart, iSelStart);

       // 再次侦测游标位置
       Row := SendMessage(RTF.Handle, EM_LINEFROMCHAR, RTF.SelStart, 0);
       Col := RTF.SelStart - SendMessage(RTF.Handle, EM_LINEINDEX, Row, 0);

       // 卷到游标所在位置
       SendMessage(RTF.Handle, EM_SCROLLCARET, 0, 0);
     end;

     procedure TForm1.Button1Click(Sender: TObject);
     var
       iRow, iCol: word;
     begin
       iRow := 17;
       iCol := 3;
       SetCaret(RichEdit1, iRow, iCol);
       RichEdit1.SetFocus;
     end;
2 还有一个例子:如何改变RichEdit的游标位置
请问在RichEdit中我想将游标(文字)移动到某一位置要怎麽用呢?

我用SendMessage可以取得行数、列数,然後要用那个参数或是函数才能移动游标呢?



这个需要自已处理, 例如本信所附的程式 --

// 指定输入游标的位置
procedure SetCaret(RTF: TRichEdit; var Row, Col: word);
var
  i, iStopLine, iSelStart: integer;
begin
  if (RTF = nil) then Exit;
  if Row = 0 then Row := 1;
  if Col = 0 then Col := 1;

  // 到第 Row 列, Col 行共几个字元
  iStopLine := Row - 1;
  iSelStart := 0;
  for i := 0 to RTF.Lines.Count - 1 do
  begin
    if i = iStopLine then
    begin
      if Length(RTF.Lines[i]) >= Col then
        Inc(iSelStart, Col)
      else
        Inc(iSelStart, Length(RTF.Lines[i]) + 2);
      Break;
    end;
    Inc(iSelStart, Length(RTF.Lines[i]) + 2);
  end;
  if iSelStart > 0 then Dec(iSelStart);

  // 以设定标记的方式指定游标位置
  SendMessage(RTF.Handle, EM_SETSEL, iSelStart, iSelStart);

  // 再次侦测游标位置
  Row := SendMessage(RTF.Handle, EM_LINEFROMCHAR, RTF.SelStart, 0);
  Col := RTF.SelStart - SendMessage(RTF.Handle, EM_LINEINDEX, Row, 0);

  // 卷到游标所在位置
  SendMessage(RTF.Handle, EM_SCROLLCARET, 0, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  iRow, iCol: word;
begin
  iRow := 17;
  iCol := 3;
  SetCaret(RichEdit1, iRow, iCol);
  RichEdit1.SetFocus;
end;

我还是不明白怎么样自动换行,能不能具体说说?
WordWarp属性
3、selstart
sellength
selattributes.color
selattributes.size
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘