TMemo 如何定位(100分)

  • 主题发起人 主题发起人 zwhc
  • 开始时间 开始时间
Z

zwhc

Unregistered / Unconfirmed
GUEST, unregistred user!
Memo1 中有 100 行数据,只能显示 20 行,如何让滚动条定位在第 50 行数据上?
也就是说,使得显示的是 50-69 行的数据?
 
来个妹儿,我告诉你。
我的妹儿:oldice@163.net
 
????
对不起,我不知道为何要这么做
==================================================
我有个很笨的方法:
for i := 0 to 48 do
begin
SendMessage(Memo1.handle,WM_VSCROLL,SB_LINEDOWN,10);
end;
==================================================
估计要用 WM_VSCROLL 的 SB_THUMBPOSITION,正在研究中
 
var
line:integer;
line:=49;//注意0是第一行,49是第50行。
Memo1.SelLength:=0;
Memo1.SelStart:=Memo1.Perform(EM_LINEINDEX,line,0);
Memo1.Perform(EM_SCROLLCARET,0,0);
Memo1.Perform(EM_LINESCROLL ,0, Memo1.Perform(EM_GETFIRSTVISIBLELINE,0,0)-line);
 
procedure TForm1.SetMemoLine(LineNum: Integer);
var
ScrollLn, SelEnd: Integer;
begin
with memo1 do begin
ScrollLn := LineNum - 1 - Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
Perform(EM_LINESCROLL, 0, ScrollLn);
SetFocus;
end;
end
 
我的解决方案如下:

Var
ScrollMessage : TWMVScroll ;
begin
ScrollMessage.Msg := WM_VScroll ;
ScrollMessage.ScrollCode := SB_THUMBPOSITION;
//ScrollMessage.ScrollCode := SB_THUMBTRACK;
ScrollMessage.Pos := 349 ;
Memo1.Dispatch(ScrollMessage) ;
========================================================
参考 129499 号贴子
来自:cmldy, 时间:1999-8-29 2:12:00, ID:
Var ScrollMessage : TWMVScroll ;
begin
ScrollMessage.Msg := WM_VScroll ;
ScrollMessage.ScrollCode := sb_LineUp ;//向上
ScrollMessage.Pos := 0 ;
Memo1.Dispatch(ScrollMessage) ;
end ;
 
pipi. 你的代码定位不准确

linsb 真抱歉,你晚了一步,而且 pipi 的
Memo1.SelStart:=Memo1.Perform(EM_LINEINDEX,line,0);
考虑得更周到。
 
to zwhc
我没晚,我的没问题!why ???
 
我的会定位不准确吗?我不觉得
 
to Pipi
我测试过,有问题,你测试一下。
 
linsb
是这样的,当时我看了一下两位的代码,原以为 Pipi. 的已很完美,未测试就给分了,
不然这样,你到 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1177723 取分
 
我测试过,win2000,没问题,你说说是什么问题吧
 
to Pipi
win2000,for d5 测试,你的代码不能定位到指定行,为什么?。
 
哦,是程序错误,最后一行里面的
Memo1.Perform(EM_GETFIRSTVISIBLELINE,0,0)-line
改成
line-Memo1.Perform(EM_GETFIRSTVISIBLELINE,0,0)
就ok了
 
后退
顶部