如何控制Memo控件选中某一行?

zhaoyu_me 2008-05-17 11:00:43
我想编程实现当双击Memo3的某一行时选中Memo1控件中的某一行,Memo3中的格式是这样的:
XXX[ABCD]QWERT
上面的XXX是数字,代表要选中的memo1中的行号,我现在是用以下代码,发现没用:

procedure TForm1.Memo3DblClick(Sender: TObject);
var
CurrentLine:string;
Line:Integer;
begin
CurrentLine := Memo3.Lines[Memo3.CaretPos.Y];
Line := StrToInt(Copy(CurrentLine,0,Pos('[',CurrentLine) - 1));//取得XXX所对应的数字,即行号
Memo1.SelStart := Pos(Memo1.Lines[Line],Memo1.Lines.Text) - 1;
Memo1.SelLength := Length(Memo1.Lines[Line]);
//SendMessage(Memo1.Handle,EM_SETSEL,Memo1.SelStart,Memo1.SelLength + Memo1.SelStart);
//ShowMessage(IntToStr(Memo1.SelLength));
end;
...全文
238 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaikai_kk 2008-05-18
  • 打赏
  • 举报
回复
括号打错了,不好意思...
kaikai_kk 2008-05-18
  • 打赏
  • 举报
回复
再改进一下:

procedure TForm1.Memo3DblClick(Sender: TObject);
var
k,i,j:integer;
begin
j:=0;
k:=Memo3.CaretPos.y;
k:=strToint(copy(Memo3.Lines.Strings[k],1,pos('[',Memo3.Lines.Strings[k])-1))-1; {最后面的减1,是把Memo1的第0行当第1行看)
if k>memo1.Lines.Count then exit;
Memo1.SetFocus;
for i:=0 to k do
j:=j+length(Memo1.Lines.Strings[i]);
memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2;
memo1.SelLength:=Length(Memo1.Lines.Strings[k]);
end;
kaikai_kk 2008-05-18
  • 打赏
  • 举报
回复
LZ修改一下就能达到你的要求.

不用理会Memo3里面的内容格式
改一下K是从Memo3中取值就行;
也可以先判断一下,K是否大于memo1的行数,大于就不处理了!!

procedure TForm1.Memo1DblClick(Sender: TObject); 
var
k,i,j:integer;
begin
j:=0;
k:=Memo3.CaretPos.y;
if k>memo1.Lines.Count then exit;
for i:=0 to k do
j:=j+length(Memo1.Lines.Strings[i]);
memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2;
memo1.SelLength:=Length(Memo1.Lines.Strings[k]);
end;
kaikai_kk 2008-05-18
  • 打赏
  • 举报
回复
直接这样,双击某行,可以选中整行的字符:

procedure TForm1.Memo1DblClick(Sender: TObject);
var
k,i,j:integer;
begin
j:=0; {这里要初始化j)
k:=Memo1.CaretPos.y; {取得行值}
for i:=0 to k do
j:=j+length(Memo1.Lines.Strings[i]); {计算0-K行的字符长度}
memo1.SelStart:=j-Length(Memo1.Lines.Strings[k])+k*2; {选择起点=总长度(j)-当行长度(k)+K*2(回车+换行字符的总数}
memo1.SelLength:=Length(Memo1.Lines.Strings[k]); {选择长度为当行(K)长度}
end;
边缘998 2008-05-18
  • 打赏
  • 举报
回复
Memo应该有一个selected属性,memo.lines.selected还有一个是selectedindex看看..不太记得,我用LISTBOX时用过,MEMO也有相应的.

5,930

社区成员

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

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