我想编程实现当双击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;
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;
解决方案 »
- 把本地机子上的DB数据文件集成一个数据包,在delphi中有什么函数或组件可以实现吗?
- 求delphi 排课算法
- 一个播放flash和mpeg,rm文件的播放器的问题
- 怎样旋转矢量图形?
- 如何将客户端access数据库中的表A的数据插入到服务器端SQL Server数据库中的表B中?
- sql server 2000下面建的表怎么样导出来
- 急救!!!delphi中编写多线程程序出现list out of bounds(????),怎么解决
- 窗体的创建
- 谁有Delphi 5 开发人员指南电子图书,给我一份
- 如何获取服务器的时间和间隔?
- 数据库中如何计算平均值的问题
- 满分送上 谁能帮我解决 如何实现当dbcheckbox选中时 ,dbgrid中相对应的行也同时被选中?如何用一个按扭(button)实现全选?急!!!!!!!!!
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;
改一下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;
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;