怎样在有上下滚动栏的情况下将memo里面的光标页面置顶? 怎样在有上下滚动栏的情况下将memo里面的光标和页面置顶? 例如memo读入一篇很长的文章,默认是显示最后的,怎样让光标跑回第一行,并把滚动栏也返回最顶? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var vScrollInfo: TScrollInfo; i:HWND;begin FOldWinProc(Msg); // 选择原来的处理 // 判断是否滚动消息 if Msg.Msg=WM_VSCROLL then begin // 进行你的动作,如:ListBox.Perform( Msg.Msg, Msg.WParam, Msg.LParam ); i:=GetFocus(); if i=RichEdit1.Handle then Begin vScrollInfo.cbSize := SizeOf(vScrollInfo); vScrollInfo.fMask := SIF_POS; GetScrollInfo(RichEdit1.Handle, SB_VERT, vScrollInfo); RichEdit2.Perform(WM_VSCROLL, MakeLong(SB_THUMBPOSITION, vScrollInfo.nPos + 1), 0); end else if i= RichEdit2.Handle then Begin vScrollInfo.cbSize := SizeOf(vScrollInfo); vScrollInfo.fMask := SIF_POS; GetScrollInfo(RichEdit2.Handle, SB_VERT, vScrollInfo); RichEdit1.Perform(WM_VSCROLL, MakeLong(SB_THUMBPOSITION, vScrollInfo.nPos + 1), 0); end; end;end;参考一下,里面通过GetScrollInfo得到滚动信息,Perform发送消息来使滚动条滚动. var ScrollLn :integer; memo.SelStart := memo.Perform(EM_LINEINDEX, memo.Lines.Count, 1); ScrollLn := memo.Lines.Count - memo.Perform(EM_GETFIRSTVISIBLELINE, 0, 0); memo.Perform(EM_LINESCROLL, 0, ScrollLn); SendMessage(memo.Handle,EM_SCROLL,SB_LINEup,0); SendMessage(memo.Handle,EM_SCROLL,SB_LINEdown,0);//反正就这几句反来复去试一下吧 //我写程序的时候跟你要求是相反的,是如何把光标置为最后,写聊天程序时,msg窗口的richedit 在接到信息时,总是不会自动停到最后一行,滚动条有些问题,写了上面几句就好了,好像是先把光标置顶,再置回最后的处理方法。 我想你要的应该是前面一半就够了 这样就可以了: memo1.SetFocus; Memo1.SelStart:=0; Memo1.SelLength:=0; 与各位程序员共同分享,一个女生写的程序(爆笑) 怎么添加clientsocket和serversocket。忘记了 自定义控件自定义属性,运行时为什么没有加载设计时的设定?? 急需解答,请各位高手进入帮忙解决?谢谢!! SP技术论坛群1578568各位支持啊 有个问题问高手 Modem怎样实现点对点的传输文件?在线等待... delphi问题? 一个数据查询的问题!请进。。。 有关数据库查询问题 Indyftp 怎样判断远程服务器是否存在某文件? VB的Encrypt和Decrypt,谁帮忙翻译下
vScrollInfo: TScrollInfo;
i:HWND;
begin
FOldWinProc(Msg); // 选择原来的处理
// 判断是否滚动消息
if Msg.Msg=WM_VSCROLL then
begin
// 进行你的动作,如:ListBox.Perform( Msg.Msg, Msg.WParam, Msg.LParam );
i:=GetFocus();
if i=RichEdit1.Handle then
Begin
vScrollInfo.cbSize := SizeOf(vScrollInfo);
vScrollInfo.fMask := SIF_POS;
GetScrollInfo(RichEdit1.Handle, SB_VERT, vScrollInfo);
RichEdit2.Perform(WM_VSCROLL,
MakeLong(SB_THUMBPOSITION, vScrollInfo.nPos + 1), 0);
end else if i= RichEdit2.Handle then
Begin
vScrollInfo.cbSize := SizeOf(vScrollInfo);
vScrollInfo.fMask := SIF_POS;
GetScrollInfo(RichEdit2.Handle, SB_VERT, vScrollInfo);
RichEdit1.Perform(WM_VSCROLL,
MakeLong(SB_THUMBPOSITION, vScrollInfo.nPos + 1), 0);
end; end;end;参考一下,里面通过GetScrollInfo得到滚动信息,Perform发送消息来使滚动条滚动.
var
ScrollLn :integer;
memo.SelStart := memo.Perform(EM_LINEINDEX, memo.Lines.Count, 1);
ScrollLn := memo.Lines.Count - memo.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
memo.Perform(EM_LINESCROLL, 0, ScrollLn); SendMessage(memo.Handle,EM_SCROLL,SB_LINEup,0);
SendMessage(memo.Handle,EM_SCROLL,SB_LINEdown,0);
//反正就这几句反来复去试一下吧
//我写程序的时候跟你要求是相反的,是如何把光标置为最后,写聊天程序时,msg窗口的richedit 在接到信息时,总是不会自动停到最后一行,滚动条有些问题,写了上面几句就好了,好像是先把光标置顶,再置回最后的处理方法。 我想你要的应该是前面一半就够了
Memo1.SelStart:=0;
Memo1.SelLength:=0;