打印

[已解决] delphi richedit做记事本问题

delphi richedit做记事本问题

最近闲来无事 想用delphi写个自己用的记事本。。主要是用来看看小说。。用来richedit控件显示别的功能都做好了。就是一个书签问题把我搞死了。。。。不知怎么做。查资料也没查到。。只有来X请教高人出手相助了。。。。我用INI保存光标位置再用向richedit发送WM_KEYDOWN消息来实行跳到上一次保存处。却无法实现。。。请教大家

[ 本帖最后由 ppp 于 2008-7-19 10:47 编辑 ]
烈酒牵肠断。醉意抚心头。寂寞无人伴。心碎独自愁。

TOP

现在我已经可以用INI保存上一次光标 然后也可以用 richedit1.SelStart := richedit1.Perform(EM_LINEINDEX, Row - 1, 0) + Col ;
将光标定位到上次保存位置。。问题是如何使richedit显示光标处。。。
烈酒牵肠断。醉意抚心头。寂寞无人伴。心碎独自愁。
可不可以用总行数和光标所在行来计算滚动条的位置?
这只是一个思路,我没用过Delphi,不了解Delphi的处理方法。
以子之,攻子之矛。

TOP

我只是个自学的菜鸟。。不懂怎么计算滚动条 我现在用一个过程可以跳往指定光标处但不知为何测试时总是跳错位置代码如下:
烈酒牵肠断。醉意抚心头。寂寞无人伴。心碎独自愁。
procedure   GotoRowCol(Row,   Col   :   Integer;   RichEdit   :   TRichEdit);
  var
      TextLen,   i   :   Integer;
  begin
      if   Row   >   RichEdit.Lines.Count   then   Exit;
      TextLen   :=   0;
      for   i   :=   0   to   Row   -   1   do
          TextLen   :=   TextLen   +   Length(RichEdit.Lines)   +   1;
      if   (Col   <=   Length(RichEdit.Lines[Row   -   1]))   and   (Col   >   0)   then
          TextLen   :=   TextLen   +   Col   -   1;
      RichEdit.SelStart   :=   TextLen   -   Length(RichEdit.Lines[Row   -   1]);
      SendMessage(RichEdit.Handle,   EM_SCROLLCARET,   0,0);
  end;   
这个过程用来跳。我测试了我的保存 位置没有错但不知为何总是跳到相应的另一个位置 是这个过程写错吗?还是调用问题 调用为
Col := StrToInt64(Ini.ReadString('bookmark', 'col', '0'));
     Row := StrToInt64(Ini.ReadString('bookmark', 'row', '0'));
     if row>0 then
     begin
    gotorowcol(row,col,RichEdit1);
     end else
      showmessage('没有找到书签');
     richedit1.setfocus;
烈酒牵肠断。醉意抚心头。寂寞无人伴。心碎独自愁。

TOP

。。。我已经自己解决了。。。其实很简单嘛。。从INI中读出来坐标后 光标定位 然后发送
SendMessage(RichEdit.Handle,   EM_SCROLLCARET,   0,0);
就OK了。。。
烈酒牵肠断。醉意抚心头。寂寞无人伴。心碎独自愁。

Processed in 0.020250 second(s), 5 queries, Gzip enabled