一个关于TMemo中滚屏的问题大家帮帮我,急!!!!!!!!

gwenxia 2004-05-13 10:28:25
在Tmemo中,我想使当前选中的行自动滚到屏幕的最顶端,我用SendMessage来使滚动条上下移也不行,这个函数对于刚好是一屏也没有用(就是滚动条没有发生作用时),大家帮帮我应该怎么办,我做的是一个考试系统,当用户从cmoboBox中选中一个题号时自动把memo中当前题自动移到屏幕的最顶端,怎样才好实现这一功能?
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
楚人无衣 2004-05-13
  • 打赏
  • 举报
回复
我反复去试,就是不能让选中的在第一行,有时向上选是它会,向下或在同一页就不可以,期待高手
gwenxia 2004-05-13
  • 打赏
  • 举报
回复
1. 支持在电子邮件中传输汉字信息的协议是_____.
2. 二进制11010110转换成十六制是_____.
3. 只有硬件而没有软件的计算机被称为_______.
4. 一个盘符最多有____个根目录.

Memo中题目显示是这样的,如果用户在ComboBox中选择一个题号后,程序就在MEMO中自动搜索这个标题然后再停在这一行上面,具体的应该怎么办?
gwenxia 2004-05-13
  • 打赏
  • 举报
回复
CurrentRow初始化为,还有如果这样的话,用户如果用鼠标移动一下滚动条不是又不对了?
gwenxia 2004-05-13
  • 打赏
  • 举报
回复
procedure TReadPaperForm.ScrollScreen;
var
i:integer;
strQuestionID:string;
begin
strQuestionID:=trim(QuestionIDComboBox.Text)+'.';
for i:=0 to QuestionListMemo.Lines.Count do
if pos(strQuestionID,QuestionListMemo.Lines.Strings[i])=1 then
begin
SendMessage(QuestionListMemo.Handle, EM_LINESCROLL, 0,(i-CurrentRow)+1);
ShowMessage(inttostr(i));
CurrentRow:=i;
break;
end;
end;
上面是我的代码,应该怎样改进一下,还有那个SendMessage(Memo1.Handle, EM_LINESCROLL, 0, 0);有什么用它后面的那两个参数都为0,不是没有移动吗?
楚人无衣 2004-05-13
  • 打赏
  • 举报
回复
没有搞定,试一下下面代码:
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 50 do
begin
ComboBox1.Items.Append(IntToStr(i));
Memo1.Lines.Append(IntToStr(i));
end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
i, j, k: Integer;
begin
k := 0;
j := Memo1.Lines.IndexOf(ComboBox1.Text);
for i := 0 to j do
k := k + Length(Memo1.Lines[i-1]);
k := k + 2*j;
Memo1.SelStart := k;
Memo1.SelLength := Length(Memo1.Lines[j]);
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, 0);
Memo1.SetFocus;
end;
aiirii 2004-05-13
  • 打赏
  • 举报
回复
try this:

SendMessage(memo1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
hzyood 2004-05-13
  • 打赏
  • 举报
回复
这样做吧

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
self.Memo1.Lines.Clear;
self.Memo1.Lines.Add('aaaaaaa');
self.Memo1.Lines.Add('bbbbbb');
self.Memo1.Lines.Add('cccc');
self.Memo1.Lines.Add('eeeeee');

self.ComboBox1.Items.Add('aaaaaaa');
self.ComboBox1.Items.Add('bbbbbb');
self.ComboBox1.Items.Add('cccc');
self.ComboBox1.Items.Add('eeeeee');
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var inti:integer;
var s:string;
begin
// Memo1.Lines[0].text
for inti:=0 to Memo1.Lines.Count-1 do
begin
if trim(ComboBox1.Text)=trim(Memo1.Lines[inti]) then
begin
s:= trim(Memo1.Lines[0]);
Memo1.Lines[0]:= trim(ComboBox1.Text);
Memo1.Lines[inti]:= s;
end;


end;
end;

end.
ztenv 2004-05-13
  • 打赏
  • 举报
回复
可以用数据库吧

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧