delphi richedit做记事本问题
最近闲来无事 想用delphi写个自己用的记事本。。主要是用来看看小说。。用来richedit控件显示别的功能都做好了。就是一个书签问题把我搞死了。。。。不知怎么做。查资料也没查到。。只有来X请教高人出手相助了。。。。我用INI保存光标位置再用向richedit发送WM_KEYDOWN消息来实行跳到上一次保存处。却无法实现。。。请教大家[[i] 本帖最后由 ppp 于 2008-7-19 10:47 编辑 [/i]] 现在我已经可以用INI保存上一次光标 然后也可以用 richedit1.SelStart := richedit1.Perform(EM_LINEINDEX, Row - 1, 0) + Col ;
将光标定位到上次保存位置。。问题是如何使richedit显示光标处。。。 可不可以用总行数和光标所在行来计算滚动条的位置?
这只是一个思路,我没用过Delphi,不了解Delphi的处理方法。 我只是个自学的菜鸟。。不懂怎么计算滚动条 我现在用一个过程可以跳往指定光标处但不知为何测试时总是跳错位置代码如下: 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[i]) + 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; 。。。我已经自己解决了。。。其实很简单嘛。。从INI中读出来坐标后 光标定位 然后发送
SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0,0);
就OK了。。。
页:
[1]
